- Perspectiva Negócios Digitais
- NEWBIE
- 0 Points
- Member since 2018
-
ChatterFeed
-
0Best Answers
-
2Likes Received
-
0Likes Given
-
6Questions
-
2Replies
HELP!- Test Apex Send Mail in a batch class!
Thanks for your attention
Batch Class:
global class EmailCaringSenior implements Schedulable, Database.Batchable<sObject> { Account estipulante; global Database.QueryLocator start(Database.BatchableContext BC) { try{ estipulante = [SELECT Id FROM Account WHERE RecordTypeId IN (SELECT Id FROM RecordType WHERE Name = 'Estipulante' AND SObjectType = 'Account') AND Name = 'Caring Senior']; } catch(Exception e) { System.debug('The following exception has occurred: ' + e.getMessage()); } return Database.getQueryLocator([SELECT Name, CPF__pc FROM Account WHERE Estipulante__c = :estipulante.Id AND CreatedDate = TODAY]); } global void execute(Database.BatchableContext BC, List<sObject> scope) { List<Account> accounts = (List<Account>) scope; String listaPaciente = ''; Integer contagem = 0; for(Account paciente : accounts){ contagem++; listaPaciente += contagem + '. ' + paciente.Name + ' (CPF: ' + paciente.CPF__pc + ') <br>'; } String dataOntem = DateTime.now().addDays(-1).format('dd-MM-yyyy'); Messaging.SingleEmailMessage message = new Messaging.SingleEmailMessage(); message.toAddresses = new String[] { 'gabrielmocelin@unochapeco.edu.br' }; message.subject = 'Ace - Novos Pacientes (' + dataOntem + ')'; message.setHtmlBody('Olá Gestor, <br> Abaixo uma lista de pacientes carregados no Health Cloud ontem (' + dataOntem + '): <br><br> ' + listaPaciente); for(OrgWideEmailAddress owa : [SELECT Id, Address, DisplayName FROM OrgWideEmailAddress]) { if(owa.DisplayName.contains('Caring Senior')) { message.setOrgWideEmailAddressId(owa.Id); } } Messaging.SingleEmailMessage[] messages = new List<Messaging.SingleEmailMessage> {message}; Messaging.SendEmailResult[] results = Messaging.sendEmail(messages); if (results[0].success) { System.debug('The email was sent successfully.'); } else { System.debug('The email failed to send: ' + results[0].errors[0].message); } } global void execute(SchedulableContext sc) { EmailCaringSenior b = new EmailCaringSenior(); Database.executebatch(b); } global void finish(Database.BatchableContext BC) { } }Test Class:
@isTest public class Test_EmailCaringSenior { static testMethod void testInsertDetecta() { Integer contasAntes = [SELECT COUNT() FROM Account]; System.assertEquals(contasAntes, 0); RecordType estipulanteRecordType = [SELECT Id FROM RecordType WHERE Name = 'Estipulante' AND SObjectType = 'Account']; Account estipulante = new Account(); estipulante.RecordTypeId = estipulanteRecordType.Id; estipulante.Name = 'Caring Senior'; insert estipulante; Datetime dataAnteOntem = Datetime.now().addDays(-2); Test.setCreatedDate(estipulante.Id, dataAnteOntem); RecordType personAccountRecordType = [SELECT Id FROM RecordType WHERE Name = 'Paciente' AND SObjectType = 'Account']; Account paciente = new Account(); paciente.RecordType = personAccountRecordType; paciente.FirstName = 'Teste'; paciente.LastName = 'Sobrenome'; paciente.CPF__pc = '133.173.513-06'; paciente.Estipulante__c = estipulante.id; insert paciente; Datetime dataOntem = Datetime.now().addDays(-1); Test.setCreatedDate(paciente.Id, dataOntem); Test.startTest(); Account myAccount = [SELECT Id, Name, CreatedDate FROM Account WHERE Name ='Teste Sobrenome' LIMIT 1]; System.assertEquals(myAccount.CreatedDate, dataOntem); Account estipulanteTest = [SELECT Id, CreatedDate FROM Account WHERE Name = 'Caring Senior' AND RecordTypeId = :estipulanteRecordType.Id]; System.assertEquals(estipulanteTest.Id, estipulante.id); System.assertEquals(estipulanteTest.CreatedDate, dataAnteOntem); EmailCaringSenior b = new EmailCaringSenior(); Database.executebatch(b); Test.stopTest(); } }
- Perspectiva Negócios Digitais
- December 04, 2019
- Like
- 2
TEXT A DML EXCEPTION- NEED HELP!
The rule is that it should not be entered in the system when it does not find an account, that is, if it enters the "catch"(line 14), it should stop the trigger, (I tried with Exception but it continued the rest of the code instead of stopping).
My trigger:
trigger PacienteUtilizacao on Dados_Utiliza_o__c (before insert) { Account paciente; TUSS__c tuss; String restSplits; String firstSplit; String isEqual; for(Dados_Utiliza_o__c utilizacao : Trigger.new) { if(utilizacao.CPF_do_Paciente__c != null && utilizacao.Nome_do_Paciente_Texto__c != null){ try { paciente = [SELECT Id, CPF__pc FROM Account WHERE CPF__pc = :utilizacao.CPF_do_Paciente__c LIMIT 1]; } catch (DmlException e) { System.debug(e.getMessage()); } if(paciente != null){ try { utilizacao.Nome_do_Paciente__c = paciente.Id; //se o segurado e o paciente forem o mesmo então é relacionado também if (utilizacao.Nome_do_Paciente_Texto__c == utilizacao.Nome_do_Segurado_Texto__c){ isEqual = utilizacao.Nome_do_Paciente_Texto__c; if(isEqual != null){ utilizacao.Nome_do_Segurado__c = paciente.Id; } } } catch (Exception e) { System.debug(e.getMessage()); } } } //trata o procedimento if(utilizacao.Procedimento_Codigo_Texto__c != null){ try { tuss = [SELECT Id,Name,Procedimento__c FROM TUSS__c WHERE Name = :utilizacao.Procedimento_Codigo_Texto__c LIMIT 1]; } catch (Exception e) { tuss = new TUSS__c(); } try { if(utilizacao.Procedimento_Codigo_Texto__c != null){ tuss.Name = utilizacao.Procedimento_Codigo_Texto__c; tuss.Procedimento__c = utilizacao.Descricao_Procedimento__c; upsert tuss; utilizacao.C_digo_do_Procedimento__c = tuss.Id; //preenchimento de Tipo de Procedimento //consulta albulatorial if(utilizacao.Procedimento_Codigo_Texto__c == '10101012' || utilizacao.Procedimento_Codigo_Texto__c == '10014' || utilizacao.Procedimento_Codigo_Texto__c == '88183038' || utilizacao.Procedimento_Codigo_Texto__c == '88199522' || utilizacao.Procedimento_Codigo_Texto__c == '88200111'){ utilizacao.Tipo_de_Procedimento__c = 'Consulta ambulatorial'; } //consulta pronto socorro if(utilizacao.Procedimento_Codigo_Texto__c == '10101039' || utilizacao.Procedimento_Codigo_Texto__c == '88183039' || utilizacao.Procedimento_Codigo_Texto__c == '70708143' || utilizacao.Procedimento_Codigo_Texto__c =='88199337' || utilizacao.Procedimento_Codigo_Texto__c == '10073'){ utilizacao.Tipo_de_Procedimento__c = 'Consulta pronto socorro'; } //Para casos de Subtipo de Exames Simples if(utilizacao.Procedimento_Codigo_Texto__c >= '40301010' && utilizacao.Procedimento_Codigo_Texto__c <= '40314235'){ utilizacao.Tipo_de_Procedimento__c = 'Exames simples'; utilizacao.Subtipo_de_Exame_Simples__c = 'Medicina laboratorial'; } if(utilizacao.Procedimento_Codigo_Texto__c >= '40501019' && utilizacao.Procedimento_Codigo_Texto__c <= '40503259'){ utilizacao.Tipo_de_Procedimento__c = 'Exames simples'; utilizacao.Subtipo_de_Exame_Simples__c = 'Genética'; } if(utilizacao.Procedimento_Codigo_Texto__c >= '40601102' && utilizacao.Procedimento_Codigo_Texto__c <= '40601293'){ utilizacao.Tipo_de_Procedimento__c = 'Exames simples'; utilizacao.Subtipo_de_Exame_Simples__c = 'Anatomia patológica e citopatologia'; } if(utilizacao.Procedimento_Codigo_Texto__c >= '40701018' && utilizacao.Procedimento_Codigo_Texto__c <= '40711021'){ utilizacao.Tipo_de_Procedimento__c = 'Exames simples'; utilizacao.Subtipo_de_Exame_Simples__c = 'Medicina nuclear'; } if(utilizacao.Procedimento_Codigo_Texto__c >= '40801128' && utilizacao.Procedimento_Codigo_Texto__c <= '40812103'){ utilizacao.Tipo_de_Procedimento__c = 'Exames simples'; utilizacao.Subtipo_de_Exame_Simples__c = 'Radiologia convencional'; } if(utilizacao.Procedimento_Codigo_Texto__c >= '40813045' && utilizacao.Procedimento_Codigo_Texto__c <= '40814041'){ utilizacao.Tipo_de_Procedimento__c = 'Exames simples'; utilizacao.Subtipo_de_Exame_Simples__c = 'Radiologia intervencionista'; } if(utilizacao.Procedimento_Codigo_Texto__c >= '40901181' && utilizacao.Procedimento_Codigo_Texto__c <= '40902129'){ utilizacao.Tipo_de_Procedimento__c = 'Exames simples'; utilizacao.Subtipo_de_Exame_Simples__c = 'Ultrassonografia'; } if(utilizacao.Procedimento_Codigo_Texto__c >= '41001109' && utilizacao.Procedimento_Codigo_Texto__c <= '41002016'){ utilizacao.Tipo_de_Procedimento__c = 'Exames simples'; utilizacao.Subtipo_de_Exame_Simples__c = 'Tomografia computadorizada'; } if(utilizacao.Procedimento_Codigo_Texto__c >= '41101170' && utilizacao.Procedimento_Codigo_Texto__c <= '41102010'){ utilizacao.Tipo_de_Procedimento__c = 'Exames simples'; utilizacao.Subtipo_de_Exame_Simples__c = 'Ressonância nuclear magnética'; } if(utilizacao.Procedimento_Codigo_Texto__c >= '41301013' && utilizacao.Procedimento_Codigo_Texto__c <= '41501284'){ utilizacao.Tipo_de_Procedimento__c = 'Exames simples'; utilizacao.Subtipo_de_Exame_Simples__c = 'Outros'; } } } catch (Exception e) { System.debug(e.getMessage()); } } } }
Test Class:
static testMethod void testSemContaInsereTuss() { Integer quantidadePacientesInicial = [SELECT COUNT() FROM Account]; System.assertEquals(quantidadePacientesInicial, 0); Integer tussAntes = [SELECT COUNT() FROM TUSS__c]; System.assertEquals(tussAntes, 0); Integer utilizacaoAntes = [SELECT COUNT() FROM Dados_Utiliza_o__c]; System.assertEquals(utilizacaoAntes, 0); Dados_Utiliza_o__c utilizacao = new Dados_Utiliza_o__c(); utilizacao.Nome_do_Segurado_Texto__c = 'Joelinton Barbosa Siqueira Gomes Freitas'; utilizacao.Nome_do_Paciente_Texto__c = 'Joelinton Barbosa Siqueira Gomes Freitas'; utilizacao.Sexo__c = 'Masculino'; utilizacao.Data_de_Nascimento__c = Date.newInstance(1962, 12, 9); utilizacao.Procedimento_Codigo_Texto__c = '40601331'; utilizacao.Descricao_Procedimento__c = 'Citológico anatomia patológica, qualquer material'; utilizacao.CPF_do_Paciente__c = '615.830.252-00'; insert utilizacao; Integer tussDepois = [SELECT COUNT() FROM TUSS__c]; System.assertEquals(tussDepois, 0); Integer utilizacaoDepois = [SELECT COUNT() FROM Dados_Utiliza_o__c]; System.assertEquals(utilizacaoDepois, 0); Integer quantidadePacientesPosterior = [SELECT COUNT() FROM Account]; System.assertEquals(quantidadePacientesPosterior, 0); }thank you for the attention!
- Perspectiva Negócios Digitais
- November 21, 2019
- Like
- 0
How do I fire an email to a specific email address when I finish importing (.csv) accounts?
- Perspectiva Negócios Digitais
- August 19, 2019
- Like
- 0
Schedule Batch INVALID_FIELD_FOR_INSERT_UPDATE, cannot specify Id in an insert call: [Id]
My Code:
global class CancerDeColonBatch implements Schedulable, Database.Batchable<sObject> { global Database.QueryLocator start(Database.BatchableContext BC) { return Database.getQueryLocator([SELECT Id, PersonContactId FROM Account WHERE RecordTypeId IN (SELECT Id FROM RecordType WHERE Name = 'Paciente' AND SObjectType = 'Account') AND Detecta__pc = TRUE AND Idade__pc >= 50 AND Idade__pc <= 74]); } global void execute(Database.BatchableContext BC, List<sObject> scope) { List<Account> accounts = (List<Account>) scope; Set<Id> accountIds = new Set<Id>(); Set<Id> personAccountsIds = new Set<Id>(); for(Account c : accounts){ accountIds.add(c.Id); personAccountsIds.add(c.PersonContactId); } system.debug(accountIds); system.debug(personAccountsIds); List<AggregateResult> procedimentos = [SELECT C_digo_do_Procedimento__r.Name exame, Nome_do_Paciente__c conta, MAX(Data_de_Processamento__c) dataExame FROM Dados_Utiliza_o__c WHERE C_digo_do_Procedimento__r.Name IN ('40303250', '40202690', '40202720', '40202739', '40202666', '40201082', '41001265', '40201090', '40201350', '40202135') AND Nome_do_Paciente__c IN :accountIds GROUP BY Nome_do_Paciente__c, C_digo_do_Procedimento__r.Name]; Map<Id, Boolean> criarCase = new Map<Id, Boolean>(); for(AggregateResult ex : procedimentos){ Date dataExame = (Date) ex.get('dataExame'); Date todayDate = Date.today(); Integer difCalc = dataExame.daysBetween(todayDate); if((ex.get('exame') == '40303250') && (difCalc >= 365)){ criarCase.put((Id) ex.get('conta'), true); system.debug('if1'); } else if(((ex.get('exame') == '40202690') || (ex.get('exame') == '40202720') || (ex.get('exame') == '40202739')) && (difCalc >= 1825)){ criarCase.put((Id) ex.get('conta'), true); system.debug('if2'); } else if(((ex.get('exame') == '40202666') || (ex.get('exame') == '40201082') || (ex.get('exame') == '41001265') || (ex.get('exame') == '40201090') || (ex.get('exame') == '40201350') || (ex.get('exame') == '40202135')) && difCalc >= 3650){ criarCase.put((Id) ex.get('conta'), true); system.debug('if3'); } } List<Account> semProcedimentos = new List<Account>([SELECT Id FROM Account WHERE Id NOT IN (SELECT Nome_do_Paciente__c FROM Dados_Utiliza_o__c WHERE C_digo_do_Procedimento__r.Name IN ('40303250', '40202690', '40202720', '40202739', '40202666', '40201082', '41001265', '40201090', '40201350', '40202135')) AND Detecta__pc = TRUE AND Idade__pc >= 50 AND Idade__pc <= 74]); for(Account sp : semProcedimentos){ system.debug('entrou sem procedimentos'); criarCase.put((Id) sp.Id, true); } String CaseDescription; CaseDescription = 'Exames pendentes: Sangue oculto nas fezes, pesquisa imunológica (40303250), '; CaseDescription += 'Retossigmoidoscopia flexível com biópsia e/ou citologia (40202690), '; CaseDescription += 'Retossigmoidoscopia rígida com biópsia e/ou citologia (40202720), '; CaseDescription += 'Retossigmoidoscopia rígida com polipectomia (40202739), '; CaseDescription += 'Colonoscopia com biópsia e/ou citologia (40202666), '; CaseDescription += 'Colonoscopia (inclui a retossigmoidoscopia) (40201082), '; CaseDescription += 'TC - Colonoscopia virtual (41001265), '; CaseDescription += 'Colonoscopia com magnificação (40201090), '; CaseDescription += 'Colonoscopia com cromoscopia (40201350), '; CaseDescription += 'Colonoscopia com magnificação e tatuagem (40202135)'; RecordType carePlantRecordType = [SELECT Id FROM RecordType WHERE Name = 'CarePlan' AND SObjectType = 'Case']; List<Case> newCases = new List<Case>(); List<CaseTeamMember> newteamMembers = new List<CaseTeamMember>(); List<HealthCloudGA__CarePlanProblem__c> newProblem = new List<HealthCloudGA__CarePlanProblem__c>(); List<HealthCloudGA__CarePlanGoal__c> newGoal = new List<HealthCloudGA__CarePlanGoal__c>(); HealthCloudGA__CarePlanProblem__c problemaCriado; HealthCloudGA__CarePlanGoal__c metaCriada; List<Task> newtask = new List<Task>(); for(Id pId : personAccountsIds){ for(Id cId : accountIds){ if(criarCase.keySet().contains(cId)){ Case newCase = new Case( Subject = 'Câncer de Cólon - Exames Pendentes', RecordType = carePlantRecordType, AccountId = cId, ContactId = pId, Description = CaseDescription ); newCases.add(newCase); try{ system.debug('Entrou no insert'); insert newCases; system.debug(newCases); } catch(Exception e){ system.debug('Erro: ' + e.getMessage()); } CaseTeamMember newCareCoordinator = new CaseTeamMember( ParentId = newCase.Id, MemberId = '0053600000141fOAAQ', //fixo conta da perspectiva, producao ou sandbox o ID não muda TeamRoleId = '0B7360000004asLCAQ' //fixo Care Coordinator, producao ou sandbox o ID não muda ); newteamMembers.add(newCareCoordinator); CaseTeamMember newPatient = new CaseTeamMember( ParentId = newCase.Id, MemberId = pId, //fixo conta da perspectiva, producao ou sandbox o ID não muda TeamRoleId = '0B7360000004asQCAQ' //fixo Patient producao ou sandbox o ID não muda ); newteamMembers.add(newPatient); try{ insert newteamMembers; } catch(Exception e){ system.debug('Erro: ' + e.getMessage()); } HealthCloudGA__CarePlanProblem__c newColon = new HealthCloudGA__CarePlanProblem__c( HealthCloudGA__CarePlan__c = newCase.Id, Name = 'Câncer de Cólon' ); newProblem.add(newColon); try{ insert newProblem; } catch(Exception e){ system.debug('Erro: ' + e.getMessage()); } try{ problemaCriado = [SELECT Id FROM HealthCloudGA__CarePlanProblem__c WHERE HealthCloudGA__CarePlan__c = :newCase.Id]; } catch(Exception e){ system.debug('Erro: ' + e.getMessage()); } HealthCloudGA__CarePlanGoal__c newMeta = new HealthCloudGA__CarePlanGoal__c( HealthCloudGA__CarePlan__c = newCase.Id, HealthCloudGA__CarePlanProblem__c = problemaCriado.Id, Name = 'Realizar exames relacionados ao Câncer de Cólon' ); newGoal.add(newMeta); try{ insert newGoal; } catch(Exception e){ system.debug('Erro: ' + e.getMessage()); } try{ metaCriada = [SELECT Id FROM HealthCloudGA__CarePlanGoal__c WHERE HealthCloudGA__CarePlan__c = :newCase.Id]; } catch(Exception e){ system.debug('Erro: ' + e.getMessage()); } Task newExamOne = new Task( WhatId = newCase.Id, OwnerId = '0053600000141fOAAQ', //fixo conta da perspectiva, producao ou sandbox o ID não muda WhoId = pId, Subject = 'Retossigmoidoscopia flexível com biópsia e/ou citologia (40202690)', Status = 'Aberta', Priority = 'Normal', HealthCloudGA__CarePlanProblem__c = problemaCriado.Id, HealthCloudGA__CarePlanGoal__c = metaCriada.Id ); newTask.add(newExamOne); Task newExamTwo = new Task( WhatId = newCase.Id, OwnerId = '0053600000141fOAAQ', //fixo conta da perspectiva, producao ou sandbox o ID não muda WhoId = pId, Subject = 'Retossigmoidoscopia rígida com biópsia e/ou citologia (40202720)', Status = 'Aberta', Priority = 'Normal', HealthCloudGA__CarePlanProblem__c = problemaCriado.Id, HealthCloudGA__CarePlanGoal__c = metaCriada.Id ); newTask.add(newExamTwo); Task newExamThree = new Task( WhatId = newCase.Id, OwnerId = '0053600000141fOAAQ', //fixo conta da perspectiva, producao ou sandbox o ID não muda WhoId = pId, Subject = 'Retossigmoidoscopia rígida com polipectomia (40202739)', Status = 'Aberta', Priority = 'Normal', HealthCloudGA__CarePlanProblem__c = problemaCriado.Id, HealthCloudGA__CarePlanGoal__c = metaCriada.Id ); newTask.add(newExamThree); Task newExamFour = new Task( WhatId = newCase.Id, OwnerId = '0053600000141fOAAQ', //fixo conta da perspectiva, producao ou sandbox o ID não muda WhoId = pId, Subject = 'Colonoscopia com biópsia e/ou citologia (40202666)', Status = 'Aberta', Priority = 'Normal', HealthCloudGA__CarePlanProblem__c = problemaCriado.Id, HealthCloudGA__CarePlanGoal__c = metaCriada.Id ); newTask.add(newExamFour); Task newExamFive = new Task( WhatId = newCase.Id, OwnerId = '0053600000141fOAAQ', //fixo conta da perspectiva, producao ou sandbox o ID não muda WhoId = pId, Subject = 'Colonoscopia (inclui a retossigmoidoscopia) (40201082', Status = 'Aberta', Priority = 'Normal', HealthCloudGA__CarePlanProblem__c = problemaCriado.Id, HealthCloudGA__CarePlanGoal__c = metaCriada.Id ); newTask.add(newExamFive); Task newExamSix = new Task( WhatId = newCase.Id, OwnerId = '0053600000141fOAAQ', //fixo conta da perspectiva, producao ou sandbox o ID não muda WhoId = pId, Subject = 'TC - Colonoscopia virtual (41001265)', Status = 'Aberta', Priority = 'Normal', HealthCloudGA__CarePlanProblem__c = problemaCriado.Id, HealthCloudGA__CarePlanGoal__c = metaCriada.Id ); newTask.add(newExamSix); Task newExamSeven = new Task( WhatId = newCase.Id, OwnerId = '0053600000141fOAAQ', //fixo conta da perspectiva, producao ou sandbox o ID não muda WhoId = pId, Subject = 'Colonoscopia com magnificação (40201090)', Status = 'Aberta', Priority = 'Normal', HealthCloudGA__CarePlanProblem__c = problemaCriado.Id, HealthCloudGA__CarePlanGoal__c = metaCriada.Id ); newTask.add(newExamSeven); Task newExamEight = new Task( WhatId = newCase.Id, OwnerId = '0053600000141fOAAQ', //fixo conta da perspectiva, producao ou sandbox o ID não muda WhoId = pId, Subject = 'Colonoscopia com cromoscopia (40201350)', Status = 'Aberta', Priority = 'Normal', HealthCloudGA__CarePlanProblem__c = problemaCriado.Id, HealthCloudGA__CarePlanGoal__c = metaCriada.Id ); newTask.add(newExamEight); Task newExamNine = new Task( WhatId = newCase.Id, OwnerId = '0053600000141fOAAQ', //fixo conta da perspectiva, producao ou sandbox o ID não muda WhoId = pId, Subject = 'Colonoscopia com magnificação e tatuagem (40202135)', Status = 'Aberta', Priority = 'Normal', HealthCloudGA__CarePlanProblem__c = problemaCriado.Id, HealthCloudGA__CarePlanGoal__c = metaCriada.Id ); newTask.add(newExamNine); try{ insert newTask; } catch(Exception e){ system.debug('Erro: ' + e.getMessage()); } } } } } global void execute(SchedulableContext sc) { CancerDeColonBatch b = new CancerDeColonBatch(); DataBase.executebatch(b); } global void finish(Database.BatchableContext BC) { } }
Debug Log with error , in the line 113
Full Log:
RawLog Link (https://pastebin.com/XEg5XMyX)
- Perspectiva Negócios Digitais
- August 13, 2019
- Like
- 0
Trigger Insert Before with .csv
1. Check if there is an account (patient in my case) with the CPF (document of unique registration of person in Brazil, similar to Social Security Card) registered in the system;
2. If it does not exist it starts the process of registering
3. As .csv sends the full name in the field, then it breaks the name to enter in the salesforce, first name and last name.
4. Register or update the account if it is already on the system.
5. If the registered account name is the same as the Nome_do_Segurado__c field (another field and something that can occur in .csv), it lists this created or updated account, otherwise it just inserts in text form in the unrelated field
This is my trigger currently, I'm not finding what's wrong or if something is missing:
trigger PacienteUtilizacao on Dados_Utiliza_o__c (before insert) { Account paciente; Account segurado; String restSplits; String firstSplit; RecordType personAccountRecordType = [SELECT Id FROM RecordType WHERE Name = 'Paciente' AND SObjectType = 'Account']; //verifica se existe um account com o mesmo nome do preenchido for(Dados_Utiliza_o__c utilizacao : Trigger.new) { try { paciente = [ SELECT FirstName, LastName, Sexo__pc, Birthdate__c, CPF__pc FROM Account WHERE CPF__pc = :utilizacao.CPF_CGC_do_Referenciado__c LIMIT 1 ]; //se não encontrar ele cadastra } catch (Exception e) { paciente = new Account(); } //Quando não encontrar o paciente no try de cima ele então cadastra try { //Quebra o nome do paciente em First Name e Last Name if(utilizacao.Nome_do_Paciente_Texto__c != null){ String input = utilizacao.Nome_do_Paciente_Texto__c; firstSplit = input.substringBefore(' '); restSplits = input.substringAfter(' '); paciente.RecordTypeId = personAccountRecordType.Id; paciente.FirstName = firstSplit; paciente.LastName = restSplits; paciente.Sexo__pc = utilizacao.Sexo__c; paciente.Birthdate__c = utilizacao.Data_de_Nascimento_Y2K__c; paciente.CPF__pc = utilizacao.CPF_CGC_do_Referenciado__c; upsert paciente; } } catch (Exception e) { System.debug(e.getMessage()); } String fullName = paciente.FirstName + ' ' + paciente.LastName; System.debug(paciente.Id); //se o nome do Segurado for o mesmo nome , entao o id do segurado é o id que achamos para o paciente IF (utilizacao.Nome_do_Segurado_Texto__c == fullName){ utilizacao.Nome_do_Segurado__c = paciente.Id; System.debug(utilizacao.Nome_do_Segurado__c); } ELSE{ //se nao for, vamos tentar buscar o segurado pelo nome. try { segurado = [ SELECT FirstName, LastName, Sexo__pc, Birthdate__c, CPF__pc FROM Account WHERE CPF__pc = :utilizacao.Nome_do_Segurado__c LIMIT 1 ]; //se acharmos, entao vamos buscar o ID no registro de utilizacao que estamos criando. utilizacao.Nome_do_Segurado__c = segurado.Id; } catch (Exception e) { System.debug(e.getMessage()); } } } }
An this is my UnitTest
@isTest public class Test_PacienteUtilizacao { static testMethod void testInserePacienteQueNaoExisteNomesIguais() { Integer quantidadePacientesInicial = [SELECT COUNT() FROM Account]; System.assertEquals(quantidadePacientesInicial, 0); Dados_Utiliza_o__c utilizacao = new Dados_Utiliza_o__c(); utilizacao.Nome_do_Segurado_Texto__c = 'Joelinton Barbosa Siqueira Gomes Freitas'; utilizacao.Nome_do_Paciente_Texto__c = 'Joelinton Barbosa Siqueira Gomes Freitas'; utilizacao.Sexo__c = 'Masculino'; utilizacao.Data_de_Nascimento_Y2K__c = Date.newInstance(1962, 12, 9); utilizacao.CPF_CGC_do_Referenciado__c = '61583025200'; insert utilizacao; Integer quantidadePacientesPosterior = [SELECT COUNT() FROM Account]; System.assertEquals(quantidadePacientesPosterior, 1); Account pacienteId = [SELECT Id FROM Account WHERE CPF__pc = '61583025200' LIMIT 1]; System.debug(pacienteId.Id); System.debug(utilizacao.Nome_do_Segurado__r.Id); System.assertEquals(pacienteId.Id, utilizacao.Nome_do_Segurado__c); } /*static testMethod void testAtualizaPacienteAoPreencherSubirArquivo() { RecordType personAccountRecordType = [SELECT Id FROM RecordType WHERE Name = 'Paciente' AND SObjectType = 'Account']; Account paciente = new Account(); paciente.RecordType = personAccountRecordType; paciente.FirstName = 'Arestides'; paciente.LastName = 'Barborsa'; paciente.Sexo__pc = 'Masculino'; paciente.CPF__pc = '13317351306'; insert paciente; Account pacienteBase = [SELECT FirstName FROM Account WHERE CPF__pc = '13317351306' LIMIT 1]; System.assertEquals(pacienteBase.FirstName, 'Arestides'); Dados_Utiliza_o__c utilizacao = new Dados_Utiliza_o__c(); utilizacao.Nome_do_Segurado_Texto__c = 'Wilson Gonçalves Pereira'; utilizacao.Nome_do_Paciente_Texto__c = 'Wilson Gonçalves Pereira'; utilizacao.Sexo__c = 'Masculino'; utilizacao.Data_de_Nascimento_Y2K__c = Date.newInstance(1962, 12, 9); utilizacao.CPF_CGC_do_Referenciado__c = '13317351306'; insert utilizacao; Account pacienteBaseAtualizado = [SELECT FirstName FROM Account WHERE CPF__pc = '13317351306' LIMIT 1]; System.assertEquals(pacienteBaseAtualizado.FirstName, 'Wilson'); } static testMethod void testInserePacienteQueNaoExisteNomesDiferentes() { Integer quantidadePacientesInicial = [SELECT COUNT() FROM Account]; System.assertEquals(quantidadePacientesInicial, 0); Dados_Utiliza_o__c utilizacao = new Dados_Utiliza_o__c(); utilizacao.Nome_do_Segurado_Texto__c = 'Alcindo da Silva'; utilizacao.Nome_do_Paciente_Texto__c = 'Cleiton Soares'; utilizacao.Sexo__c = 'Masculino'; utilizacao.Data_de_Nascimento_Y2K__c = Date.newInstance(1962, 12, 9); utilizacao.CPF_CGC_do_Referenciado__c = '12453278625'; insert utilizacao; Integer quantidadePacientesPosterior = [SELECT COUNT() FROM Account]; System.assertEquals(quantidadePacientesPosterior, 1); }*/ }
My Log(debug):
My Full Log:
https://gist.github.com/gabrielmocelin/212e6f5db8b8b2a9d5a0e42c33232e4e
- Perspectiva Negócios Digitais
- December 12, 2018
- Like
- 0
Trigger Insert Before Insert with .csv
I created an object called Dados_Utiliza_o__c which contains about 50 fields, which are populated with .csv, among these fields there is a called Nome_do_Paciente__C that contains the name of an account, where my intention is to create a trigger before inserting, where:
1. Check if there is an account (patient in my case) with the CPF (document of unique registration of person in Brazil, similar to Social Security Card) registered in the system;
2. If it does not exist it starts the process of registering
3. As .csv sends the full name in the field, then it breaks the name to enter in the salesforce, first name and last name.
4. Register or update the account if it is already on the system.
5. If the registered account name is the same as the Nome_do_Segurado__c field (another field and something that can occur in .csv), it lists this created or updated account, otherwise it just inserts in text form in the unrelated field
this is my trigger currently, I'm not finding what's wrong or if something is missing:
trigger PacienteUtilizacao on Dados_Utiliza_o__c (before insert) { Account paciente; Account segurado; String firstSplit; String restSplits; RecordType personAccountRecordType = [SELECT Id FROM RecordType WHERE Name = 'Paciente' AND SObjectType = 'Account']; //verifica se existe um account com o preenchido for(Dados_Utiliza_o__c utilizacao : Trigger.new) { try { paciente = [ SELECT FirstName, LastName, Sexo__pc, Birthdate__c, CPF__pc FROM Account WHERE CPF__pc = :utilizacao.CPF_CGC_do_Referenciado__c LIMIT 1 ]; //se não encontrar ele cadastra } catch (Exception e) { paciente = new Account(); } //Quebra o nome do paciente em First Name e Last Name if(utilizacao.Nome_do_Paciente__r.Name != null){ String input = utilizacao.Nome_do_Paciente__r.Name; firstSplit = input.substringBefore(' '); restSplits = input.substringAfter(' '); } //Quando não encontrar o paciente no try de cima ele então cadastra try { paciente.RecordTypeId = personAccountRecordType.Id; paciente.FirstName = firstSplit; paciente.LastName = restSplits; paciente.Sexo__pc = utilizacao.Sexo__c; paciente.Birthdate__c = utilizacao.Data_de_Nascimento_Y2K__c; paciente.CPF__pc = utilizacao.CPF_CGC_do_Referenciado__c; upsert paciente; } catch (Exception e) { System.debug(e.getMessage()); } IF (paciente.Name == utilizacao.Nome_do_Segurado__c){ utilizacao.Nome_do_Segurado__c = paciente.Id; // se for, entao o id do segurado é o id que achamos para o paciente } ELSE{ // se nao for, vamos tentar buscar o segurado pelo nome. try { segurado = [ SELECT FirstName, LastName, Sexo__pc, Birthdate__c, CPF__pc FROM Account WHERE CPF__pc = :utilizacao.Nome_do_Segurado__c LIMIT 1 ]; // se acharmos, entao vamos bucsar o ID no registro de utilizacao que estamos criando. utilizacao.Nome_do_Segurado__c = segurado.Id; } catch (Exception e) { System.debug(e.getMessage()); } } } }
- Perspectiva Negócios Digitais
- December 04, 2018
- Like
- 0
HELP!- Test Apex Send Mail in a batch class!
Thanks for your attention
Batch Class:
global class EmailCaringSenior implements Schedulable, Database.Batchable<sObject> { Account estipulante; global Database.QueryLocator start(Database.BatchableContext BC) { try{ estipulante = [SELECT Id FROM Account WHERE RecordTypeId IN (SELECT Id FROM RecordType WHERE Name = 'Estipulante' AND SObjectType = 'Account') AND Name = 'Caring Senior']; } catch(Exception e) { System.debug('The following exception has occurred: ' + e.getMessage()); } return Database.getQueryLocator([SELECT Name, CPF__pc FROM Account WHERE Estipulante__c = :estipulante.Id AND CreatedDate = TODAY]); } global void execute(Database.BatchableContext BC, List<sObject> scope) { List<Account> accounts = (List<Account>) scope; String listaPaciente = ''; Integer contagem = 0; for(Account paciente : accounts){ contagem++; listaPaciente += contagem + '. ' + paciente.Name + ' (CPF: ' + paciente.CPF__pc + ') <br>'; } String dataOntem = DateTime.now().addDays(-1).format('dd-MM-yyyy'); Messaging.SingleEmailMessage message = new Messaging.SingleEmailMessage(); message.toAddresses = new String[] { 'gabrielmocelin@unochapeco.edu.br' }; message.subject = 'Ace - Novos Pacientes (' + dataOntem + ')'; message.setHtmlBody('Olá Gestor, <br> Abaixo uma lista de pacientes carregados no Health Cloud ontem (' + dataOntem + '): <br><br> ' + listaPaciente); for(OrgWideEmailAddress owa : [SELECT Id, Address, DisplayName FROM OrgWideEmailAddress]) { if(owa.DisplayName.contains('Caring Senior')) { message.setOrgWideEmailAddressId(owa.Id); } } Messaging.SingleEmailMessage[] messages = new List<Messaging.SingleEmailMessage> {message}; Messaging.SendEmailResult[] results = Messaging.sendEmail(messages); if (results[0].success) { System.debug('The email was sent successfully.'); } else { System.debug('The email failed to send: ' + results[0].errors[0].message); } } global void execute(SchedulableContext sc) { EmailCaringSenior b = new EmailCaringSenior(); Database.executebatch(b); } global void finish(Database.BatchableContext BC) { } }Test Class:
@isTest public class Test_EmailCaringSenior { static testMethod void testInsertDetecta() { Integer contasAntes = [SELECT COUNT() FROM Account]; System.assertEquals(contasAntes, 0); RecordType estipulanteRecordType = [SELECT Id FROM RecordType WHERE Name = 'Estipulante' AND SObjectType = 'Account']; Account estipulante = new Account(); estipulante.RecordTypeId = estipulanteRecordType.Id; estipulante.Name = 'Caring Senior'; insert estipulante; Datetime dataAnteOntem = Datetime.now().addDays(-2); Test.setCreatedDate(estipulante.Id, dataAnteOntem); RecordType personAccountRecordType = [SELECT Id FROM RecordType WHERE Name = 'Paciente' AND SObjectType = 'Account']; Account paciente = new Account(); paciente.RecordType = personAccountRecordType; paciente.FirstName = 'Teste'; paciente.LastName = 'Sobrenome'; paciente.CPF__pc = '133.173.513-06'; paciente.Estipulante__c = estipulante.id; insert paciente; Datetime dataOntem = Datetime.now().addDays(-1); Test.setCreatedDate(paciente.Id, dataOntem); Test.startTest(); Account myAccount = [SELECT Id, Name, CreatedDate FROM Account WHERE Name ='Teste Sobrenome' LIMIT 1]; System.assertEquals(myAccount.CreatedDate, dataOntem); Account estipulanteTest = [SELECT Id, CreatedDate FROM Account WHERE Name = 'Caring Senior' AND RecordTypeId = :estipulanteRecordType.Id]; System.assertEquals(estipulanteTest.Id, estipulante.id); System.assertEquals(estipulanteTest.CreatedDate, dataAnteOntem); EmailCaringSenior b = new EmailCaringSenior(); Database.executebatch(b); Test.stopTest(); } }
- Perspectiva Negócios Digitais
- December 04, 2019
- Like
- 2
How do I fire an email to a specific email address when I finish importing (.csv) accounts?
- Perspectiva Negócios Digitais
- August 19, 2019
- Like
- 0
Trigger Insert Before with .csv
1. Check if there is an account (patient in my case) with the CPF (document of unique registration of person in Brazil, similar to Social Security Card) registered in the system;
2. If it does not exist it starts the process of registering
3. As .csv sends the full name in the field, then it breaks the name to enter in the salesforce, first name and last name.
4. Register or update the account if it is already on the system.
5. If the registered account name is the same as the Nome_do_Segurado__c field (another field and something that can occur in .csv), it lists this created or updated account, otherwise it just inserts in text form in the unrelated field
This is my trigger currently, I'm not finding what's wrong or if something is missing:
trigger PacienteUtilizacao on Dados_Utiliza_o__c (before insert) { Account paciente; Account segurado; String restSplits; String firstSplit; RecordType personAccountRecordType = [SELECT Id FROM RecordType WHERE Name = 'Paciente' AND SObjectType = 'Account']; //verifica se existe um account com o mesmo nome do preenchido for(Dados_Utiliza_o__c utilizacao : Trigger.new) { try { paciente = [ SELECT FirstName, LastName, Sexo__pc, Birthdate__c, CPF__pc FROM Account WHERE CPF__pc = :utilizacao.CPF_CGC_do_Referenciado__c LIMIT 1 ]; //se não encontrar ele cadastra } catch (Exception e) { paciente = new Account(); } //Quando não encontrar o paciente no try de cima ele então cadastra try { //Quebra o nome do paciente em First Name e Last Name if(utilizacao.Nome_do_Paciente_Texto__c != null){ String input = utilizacao.Nome_do_Paciente_Texto__c; firstSplit = input.substringBefore(' '); restSplits = input.substringAfter(' '); paciente.RecordTypeId = personAccountRecordType.Id; paciente.FirstName = firstSplit; paciente.LastName = restSplits; paciente.Sexo__pc = utilizacao.Sexo__c; paciente.Birthdate__c = utilizacao.Data_de_Nascimento_Y2K__c; paciente.CPF__pc = utilizacao.CPF_CGC_do_Referenciado__c; upsert paciente; } } catch (Exception e) { System.debug(e.getMessage()); } String fullName = paciente.FirstName + ' ' + paciente.LastName; System.debug(paciente.Id); //se o nome do Segurado for o mesmo nome , entao o id do segurado é o id que achamos para o paciente IF (utilizacao.Nome_do_Segurado_Texto__c == fullName){ utilizacao.Nome_do_Segurado__c = paciente.Id; System.debug(utilizacao.Nome_do_Segurado__c); } ELSE{ //se nao for, vamos tentar buscar o segurado pelo nome. try { segurado = [ SELECT FirstName, LastName, Sexo__pc, Birthdate__c, CPF__pc FROM Account WHERE CPF__pc = :utilizacao.Nome_do_Segurado__c LIMIT 1 ]; //se acharmos, entao vamos buscar o ID no registro de utilizacao que estamos criando. utilizacao.Nome_do_Segurado__c = segurado.Id; } catch (Exception e) { System.debug(e.getMessage()); } } } }
An this is my UnitTest
@isTest public class Test_PacienteUtilizacao { static testMethod void testInserePacienteQueNaoExisteNomesIguais() { Integer quantidadePacientesInicial = [SELECT COUNT() FROM Account]; System.assertEquals(quantidadePacientesInicial, 0); Dados_Utiliza_o__c utilizacao = new Dados_Utiliza_o__c(); utilizacao.Nome_do_Segurado_Texto__c = 'Joelinton Barbosa Siqueira Gomes Freitas'; utilizacao.Nome_do_Paciente_Texto__c = 'Joelinton Barbosa Siqueira Gomes Freitas'; utilizacao.Sexo__c = 'Masculino'; utilizacao.Data_de_Nascimento_Y2K__c = Date.newInstance(1962, 12, 9); utilizacao.CPF_CGC_do_Referenciado__c = '61583025200'; insert utilizacao; Integer quantidadePacientesPosterior = [SELECT COUNT() FROM Account]; System.assertEquals(quantidadePacientesPosterior, 1); Account pacienteId = [SELECT Id FROM Account WHERE CPF__pc = '61583025200' LIMIT 1]; System.debug(pacienteId.Id); System.debug(utilizacao.Nome_do_Segurado__r.Id); System.assertEquals(pacienteId.Id, utilizacao.Nome_do_Segurado__c); } /*static testMethod void testAtualizaPacienteAoPreencherSubirArquivo() { RecordType personAccountRecordType = [SELECT Id FROM RecordType WHERE Name = 'Paciente' AND SObjectType = 'Account']; Account paciente = new Account(); paciente.RecordType = personAccountRecordType; paciente.FirstName = 'Arestides'; paciente.LastName = 'Barborsa'; paciente.Sexo__pc = 'Masculino'; paciente.CPF__pc = '13317351306'; insert paciente; Account pacienteBase = [SELECT FirstName FROM Account WHERE CPF__pc = '13317351306' LIMIT 1]; System.assertEquals(pacienteBase.FirstName, 'Arestides'); Dados_Utiliza_o__c utilizacao = new Dados_Utiliza_o__c(); utilizacao.Nome_do_Segurado_Texto__c = 'Wilson Gonçalves Pereira'; utilizacao.Nome_do_Paciente_Texto__c = 'Wilson Gonçalves Pereira'; utilizacao.Sexo__c = 'Masculino'; utilizacao.Data_de_Nascimento_Y2K__c = Date.newInstance(1962, 12, 9); utilizacao.CPF_CGC_do_Referenciado__c = '13317351306'; insert utilizacao; Account pacienteBaseAtualizado = [SELECT FirstName FROM Account WHERE CPF__pc = '13317351306' LIMIT 1]; System.assertEquals(pacienteBaseAtualizado.FirstName, 'Wilson'); } static testMethod void testInserePacienteQueNaoExisteNomesDiferentes() { Integer quantidadePacientesInicial = [SELECT COUNT() FROM Account]; System.assertEquals(quantidadePacientesInicial, 0); Dados_Utiliza_o__c utilizacao = new Dados_Utiliza_o__c(); utilizacao.Nome_do_Segurado_Texto__c = 'Alcindo da Silva'; utilizacao.Nome_do_Paciente_Texto__c = 'Cleiton Soares'; utilizacao.Sexo__c = 'Masculino'; utilizacao.Data_de_Nascimento_Y2K__c = Date.newInstance(1962, 12, 9); utilizacao.CPF_CGC_do_Referenciado__c = '12453278625'; insert utilizacao; Integer quantidadePacientesPosterior = [SELECT COUNT() FROM Account]; System.assertEquals(quantidadePacientesPosterior, 1); }*/ }
My Log(debug):
My Full Log:
https://gist.github.com/gabrielmocelin/212e6f5db8b8b2a9d5a0e42c33232e4e
- Perspectiva Negócios Digitais
- December 12, 2018
- Like
- 0