Loading
Automotive Cloud
Índice
Selecionar filtros

          Sem resultados
          Sem resultados
          Aqui estão algumas dicas de pesquisa

          Verifique a grafia das palavras-chave.
          Tente utilizar termos mais genéricos.
          Selecione menos filtros para ampliar sua pesquisa.

          Pesquisar em toda a Ajuda do Salesforce
          Criar classes do Apex para gerenciamento de estágios para empréstimo de veículos e ativos

          Criar classes do Apex para gerenciamento de estágios para empréstimo de veículos e ativos

          Crie classes do Apex que armazenem a lógica de negócios para transições de estágio. O fluxo iniciado automaticamente que é acionado quando um produto do formulário de solicitação passa do estágio de Entrada para Enviado contém uma etapa que chama a classe do Apex. Quando o campo de estágio no registro do Produto do formulário de solicitação é atualizado, o Apex atualiza o valor do campo Estágio no registro do Formulário de solicitação relacionado e os valores do Status visível do solicitante e do Status visível do parceiro são exibidos no registro do Produto do formulário de solicitação. A classe do Apex também cria registros de Participante no Produto do Formulário de solicitação, do Formulário de solicitação associado e do Perfil da parte associada para gerenciar a visibilidade para diferentes usuários.

          Edições obrigatórias

          Disponível em: Edições Enterprise, Unlimited e Developer.
          Permissões do usuário necessárias
          Para criar uma classe do Apex: Perfil do Administrador de sistema
          1. Crie um arquivo do Apex.
            1. Em Configuração, na caixa Busca rápida, insira Classes do Apex e selecione Classes do Apex.
            2. Clique em Novo.
            3. Insira a Classe do Apex conforme fornecido.
              
               public class CDSCacheHelper {
              
                  public static Map<String, String> PARTICIPANT_ROLE_NAME_TO_ID = new Map<String, String>();
                  public static Map<String, String> PARTICIPANT_GROUP_NAME_TO_ID = new Map<String, String>();
                  
                  public static void loadCDSData() {
                  
                      if (!(PARTICIPANT_ROLE_NAME_TO_ID.isEmpty() || PARTICIPANT_GROUP_NAME_TO_ID.isEmpty())) {
                          return;
                      }        
                      
                      // Caching participant roles
                      List<Participantrole> paticipantRoles = [SELECT ID, DeveloperName FROM ParticipantRole WHERE IsActive = true];
                      for (Participantrole role: paticipantRoles) {
                          PARTICIPANT_ROLE_NAME_TO_ID.put(role.DeveloperName, role.ID);
                      }
                      
                      // Caching participant groups
                      List<Group> groups = [SELECT ID, DeveloperName FROM Group WHERE Type = 'Participant'];
                      for (Group groupData: groups) {
                          PARTICIPANT_GROUP_NAME_TO_ID.put(groupData.DeveloperName, groupData.ID);
                      }
                      
                  }
                  
              }
            4. Salve suas alterações.
          2. Crie um arquivo do Apex.
            1. Em Configuração, na caixa Busca rápida, insira Classes do Apex e selecione Classes do Apex.
            2. Clique em Novo.
            3. Insira a Classe do Apex conforme fornecido.
              
               public with sharing class AutomotiveLendingCDSUtil {
              
                  // Enum Field names
                  private static final String DM_APP_FORM_PRODUCT_STAGE_FIELD_NAME = 'ApplicationFormProductStage';
                  private static final String DM_APP_FORM_STAGE_FIELD_NAME = 'ApplicationFormStage';
                  private static final String DM_APPLICANT_STATUS_FIELD_NAME = 'ApplicantVisibleStatus';
                  private static final String DM_PARTNER_STATUS_FIELD_NAME = 'PartnerVisibleStatus';
                  
                  // Decision Matrix Names
                  private static final String DM_AFP_STAGE_TO_AF_STAGE = 'AFPStage_To_AFStage';
                  private static final String DM_AFP_Stage_To_AVS_PVS = 'AFPStage_To_AVS_PVS';
                  //private static final String DM_AFP_Stage_To_AVS_PVS = 'AFPStage_To_AVS_PVS_TEMP';
                  private static final String DM_AUTO_LOAN_CDS = 'Automotive_Lending_CDS_Config';
                  
                  // Decision Matrix input and output fields
                  private static final String DM_UW_ACCESS_FIELD_NAME = 'Underwriter_Access';
                  private static final String DM_APPLICANT_AGENT_ACCESS_FIELD_NAME = 'Applicant_Agent_Access';
                  private static final String DM_APPLICANT_DEALER_ACCESS_FIELD_NAME = 'Dealer_Access';
              
                  // CDS Enabled Entity names
                  private static final String APPLICATION_FORM = 'ApplicationForm';
                  private static final String APPLICATION_FORM_PRODUCT = 'ApplicationFormProduct';
                  private static final String PARTY_PROFILE = 'PartyProfile';
              
                  // Participant group names
                  private static final String UNDERWRITER_PARTICIPANT_GROUP_NAME = 'Underwriter_Group';
                  private static final String AGENT_PARTICIPANT_GROUP_NAME = 'Agent_Group';
                  
                  // CDS user permision set
                  //private static final String AUTOLENDING_UW_PERMISSION_SET_NAME = 'VehicleandAssetLendingUWUser';
                  private static final String AUTOLENDING_PARTNER_PERMISSION_SET_NAME = 'VehicleAndAssetLendingPartnerUser';
                  //private static final String AUTOLENDING_AGENT_PERMISSION_SET_NAME = 'VehAndAssetLendingForAgentsUser';
                  private static final String AUTOLENDING_CUSTOMER_PERMISSION_SET_NAME = 'VehicleAndAssetLendingCustomerUser';
                  
                  
                  /**
                   *  Automotive_Lending_CDS_Config 
                   * AFPStage_To_AVS_PVS
                   * AFPStage_To_AFStage
                   * 
                   * Applicant_Agent_Access=ApplicationFormRead,ApplicationFormProductRead,PartyProfileRead, 
                   * Dealer_Access=ApplicationFormRead,ApplicationFormProductRead,PartyProfileRead, 
                   * Underwriter_Access=ApplicationFormRW,ApplicationFormProductRW,
                  */
                      
                  static {
                      CDSCacheHelper.loadCDSData();
                  }
              
                  @InvocableMethod(label = 'Automotive Lending CDS'
                      description = 'Creates the CDS records on ApplicationForm/ApplicationFormProduct/PartyProfile based on the configuration.')
                  public static List <Result> execute(List <ID> ids) {
                      List <Result> results = new List <Result> ();
                      Result result = new Result();
                      try {
              
                          Id applicationFormProductId = ids.get(0);
              
                          ApplicationFormProduct appFormProduct = [SELECT Id, Stage, ApplicantVisibleStatus, ApplicationFormId FROM ApplicationFormProduct WHERE Id =: applicationFormProductId];
              
                          updateApplicantAndPartnerVisibleStatus(appFormProduct);
                          updateApplicationFormStage(appFormProduct);
              
                          Invocable.Action.Result cdsDmResult = invokeDecisionMatrix(DM_AUTO_LOAN_CDS, appFormProduct.Stage);
                          String applicantAgentRole = getOutputVal(cdsDmResult, DM_APPLICANT_AGENT_ACCESS_FIELD_NAME);
                          String underwriterRole = getOutputVal(cdsDmResult, DM_UW_ACCESS_FIELD_NAME);
                          String dealerRole = getOutputVal(cdsDmResult, DM_APPLICANT_DEALER_ACCESS_FIELD_NAME);
              
                           
                          String[] applicantAgentRoles = applicantAgentRole.split(',');
                          String[] underwriterRoles = underwriterRole.split(',');
                          String[] dealerRoles = dealerRole.split(',');
                          
                          Set <Id> partyProfileIds = new Set < Id > ();
              
                          List <Applicant> applicants = [SELECT Id, Email, ApplicationFormId, PartyProfileId FROM Applicant WHERE ApplicationFormId =: appFormProduct.ApplicationFormId];
              
                          
                          // Extending/Modifying sharing Customer users
                          for (Applicant applicant: applicants) {
                              if (applicant.PartyProfileId != null) {
                                  partyProfileIds.add(applicant.PartyProfileId);
                              }
                               
                              // If no users where email matches applicant email, continue
                              List<User> users = [SELECT Id FROM USER WHERE Email =: applicant.Email];
                              //005Z6000000ETSUIA4
                              if (users.size() == 0) {
                                  continue;
                              }
                              User user = users.get(0);
              
                              // If customer user does not have CDS permission, continue
                              if (!hasValidCDSUserPermission(user.Id, AUTOLENDING_CUSTOMER_PERMISSION_SET_NAME)) {
                                  continue;
                              }
              
                              for (String cdsRole: applicantAgentRoles) {
                                  if (cdsRole.startsWith(APPLICATION_FORM_PRODUCT)) {
                                      handleApplicationFormProductParticipants(user.Id, appFormProduct, cdsRole);
                                  } else if (cdsRole.startsWith(APPLICATION_FORM)) {
                                      handleApplicationFormParticipants(user.Id, appFormProduct, cdsRole);
                                  } else if (cdsRole.startsWith(PARTY_PROFILE)) {
                                      handlePartyProfileParticipants(user.Id, applicant.PartyProfileId, cdsRole);
                                  }
                              }
                          } 
                          // Updating / Creating Participant Records for Underwrite groups 
                          handleCDSUpdatesForGroups(UNDERWRITER_PARTICIPANT_GROUP_NAME, underwriterRoles, 
                                                    partyProfileIds, appFormProduct);
              
                          // Updating / Creating Participant Records for Agent groups 
                          handleCDSUpdatesForGroups(AGENT_PARTICIPANT_GROUP_NAME, applicantAgentRoles, 
                                                    partyProfileIds, appFormProduct);
                          
                          // Updating / Creating Participant Records Dealer/Partners 
                          handleCDSUpdatesForDealers(dealerRoles, partyProfileIds, appFormProduct, AUTOLENDING_PARTNER_PERMISSION_SET_NAME);
                          result.isSuccess = true;
                          result.message = 'Stage configuration executed successfully.';
              
                      } catch (Exception ex) {
                          result.isSuccess = false;
                          result.message = ex.getMessage();
                          System.debug(ex);
                      }
              
                      results.add(result);
                      return results;
                  }
              
                  public static boolean hasValidCDSUserPermission(Id userId, String permissionSetName) {
                      // If user does not have CDS permission, continue
                      List<PermissionSetAssignment> permissionSetAssignments = [SELECT AssigneeId, PermissionSet.Name FROM PermissionSetAssignment 
                                                                                WHERE AssigneeId =: userId AND PermissionSet.Name =: permissionSetName ];
                      return (permissionSetAssignments.size() > 0);      
                  }
              
                  public static void handleCDSUpdatesForGroups(String groupName, String[] roles, 
                                                               Set < Id > partyProfileIds, ApplicationFormProduct appFormProduct) {
                      String groupId = CDSCacheHelper.PARTICIPANT_GROUP_NAME_TO_ID.get(groupName);
                      for (String cdsRole: roles) {
                          if (cdsRole.startsWith(APPLICATION_FORM_PRODUCT)) {
                              handleApplicationFormProductParticipants(groupId, appFormProduct, cdsRole);
                          } else if (cdsRole.startsWith(APPLICATION_FORM)) {
                              handleApplicationFormParticipants(groupId, appFormProduct, cdsRole);
                          } else if (cdsRole.startsWith(PARTY_PROFILE)) {
                              for (Id partyProfileId: partyProfileIds) {
                                  handlePartyProfileParticipants(groupId, partyProfileId, cdsRole);
                              }
                          }
                      }
                  }
              
                  public static void updateApplicantAndPartnerVisibleStatus(ApplicationFormProduct appFormProduct) {
                      Invocable.Action.Result result = invokeDecisionMatrix(DM_AFP_Stage_To_AVS_PVS, appFormProduct.Stage);
                      String applicantVisibleStatus = getOutputVal(result, DM_APPLICANT_STATUS_FIELD_NAME);
                      String partnerVisibleStatus = getOutputVal(result, DM_PARTNER_STATUS_FIELD_NAME);
                      appFormProduct.ApplicantVisibleStatus = applicantVisibleStatus;
                      appFormProduct.PartnerVisibleStatus = partnerVisibleStatus;
                      upsert appFormProduct;
                  }
              
                  public static void updateApplicationFormStage(ApplicationFormProduct appFormProduct) {
                      Invocable.Action.Result result = invokeDecisionMatrix(DM_AFP_STAGE_TO_AF_STAGE, appFormProduct.Stage);
                      String applicationFormStage = getOutputVal(result, DM_APP_FORM_STAGE_FIELD_NAME);
                      
                      ApplicationForm applicationForm = new ApplicationForm();
                      applicationForm.Id = appFormProduct.ApplicationFormId;
                      applicationForm.Stage = applicationFormStage;
                      upsert applicationForm;
                  }
              
                  public static void handleCDSUpdatesForDealers(String[] dealerRoles, Set < Id > partyProfileIds, 
                                                                ApplicationFormProduct appFormProduct, String requiredPermSet) {
                      
                      List <ApplicationFormSellerItem> sellerItems = [SELECT Id, SellerId FROM ApplicationFormSellerItem WHERE ApplicationFormProductId =: appFormProduct.Id];
                      //Return if there are no seller items
                      if (sellerItems.size() == 0) {
                          system.debug('No seller items found');
                          return;
                      } else {
                          ApplicationFormSellerItem sellerItem = sellerItems.get(0);
                          List<User> users = [SELECT Id FROM USER WHERE AccountId =: sellerItem.SellerId];
                          // Return if Account on the dealer is not a valid user      
                          if (users.size() == 0) {
                              system.debug('No users items found');
                            return;
                          }
                          Id dealerUserId = users.get(0).Id;
                          if (!hasValidCDSUserPermission(dealerUserId, requiredPermSet)) {
                                  return;
                           }
                          /////////
                          for (String cdsRole: dealerRoles) {
                            if (cdsRole.startsWith(APPLICATION_FORM_PRODUCT)) {
                               handleApplicationFormProductParticipants(dealerUserId, appFormProduct, cdsRole);
                            } else if (cdsRole.startsWith(APPLICATION_FORM)) {
                               handleApplicationFormParticipants(dealerUserId, appFormProduct, cdsRole);
                            } else if (cdsRole.startsWith(PARTY_PROFILE)) {
                               for (Id partyProfileId: partyProfileIds) {
                                  handlePartyProfileParticipants(dealerUserId, partyProfileId, cdsRole);
                               }
                            }
                        }
                      }
                  }
                  
                  public static void handleApplicationFormParticipants(Id userOrGroupId, ApplicationFormProduct appFormProduct, String roleName) {
                      List<ApplicationFormParticipant> appFormParticipants = [SELECT Id, ParticipantRoleId FROM ApplicationFormParticipant WHERE ParticipantId =: userOrGroupId AND ApplicationFormId=:appFormProduct.ApplicationFormId];
                      String roleId = CDSCacheHelper.PARTICIPANT_ROLE_NAME_TO_ID.get(roleName);
                      if (appFormParticipants.size() == 0) {
                          ApplicationFormParticipant participant = new ApplicationFormParticipant(ApplicationFormId = appFormProduct.ApplicationFormId,
                                                                                                  IsActive = true,
                                                                                                  ParticipantRoleId = roleId,
                                                                                                  ParticipantId=userOrGroupId);
                          insert participant;
                      } else {
                          ApplicationFormParticipant participant = appFormParticipants.get(0);
                          participant.IsActive = true;
                          participant.ParticipantRoleId = roleId;
                          upsert participant;
                      }
                  }
              
                  public static void handleApplicationFormProductParticipants(Id userOrGroupId, ApplicationFormProduct appFormProduct, String roleName) {
                      List<AppFormProductParticipant> participants = [SELECT Id, ParticipantRoleId FROM AppFormProductParticipant WHERE ParticipantId =: userOrGroupId AND ApplicationFormProductId=:appFormProduct.Id];
                      String roleId = CDSCacheHelper.PARTICIPANT_ROLE_NAME_TO_ID.get(roleName);
                      if (participants.size() == 0) {
                          AppFormProductParticipant participant = new AppFormProductParticipant(ApplicationFormProductId = appFormProduct.Id,
                                                                                                IsActive = true,
                                                                                                ParticipantRoleId = roleId,
                                                                                                ParticipantId=userOrGroupId);
                          insert participant;
                      } else {
                          AppFormProductParticipant participant = participants.get(0);
                          participant.IsActive = true;
                          participant.ParticipantRoleId = roleId;
                          upsert participant;
                      }
                  }
              
                  public static void handlePartyProfileParticipants(Id userOrGroupId, String partyProfileId, String roleName) {
                      List<PartyProfileParticipant> participants = [SELECT Id, ParticipantRoleId FROM PartyProfileParticipant WHERE ParticipantId =: userOrGroupId AND PartyProfileId=:partyProfileId];
                      String roleId = CDSCacheHelper.PARTICIPANT_ROLE_NAME_TO_ID.get(roleName);
                      if (participants.size() == 0) {
                          PartyProfileParticipant participant = new PartyProfileParticipant(PartyProfileId = partyProfileId,
                                                                                            IsActive = true,
                                                                                            ParticipantRoleId = roleId,
                                                                                            ParticipantId=userOrGroupId);
                          insert participant;
                      } else {
                          PartyProfileParticipant participant = participants.get(0);
                          participant.IsActive = true;
                          participant.ParticipantRoleId = roleId;
                          upsert participant;
                      }
                  }
              
              
                  public static Invocable.Action.Result invokeDecisionMatrix(String decisionMatrixName, String appFormProductStageVal) {
                      // Create an Invocable.Action
                      Invocable.Action action = Invocable.Action.createCustomAction('runDecisionMatrix', decisionMatrixName);
                      action.setInvocationParameter(DM_APP_FORM_PRODUCT_STAGE_FIELD_NAME, appFormProductStageVal);
                      List < Invocable.Action.Result > results = action.invoke();
                      return results.get(0);
                  }
              
                  public static String getOutputVal(Invocable.Action.Result result, String outputFieldName) {
                      return (String) result.getOutputParameters().get(outputFieldName);
                  }
              
              
                  public class Result {
                      @InvocableVariable(label = 'Message'
                                         description = 'Resulted output of the action.'
                                         required = true)
                      public String message;
                      
                      @InvocableVariable(label = 'Status'
                                         description = 'Resulted status of the action.'
                                         required = true)
                      public boolean isSuccess;
                  }
              }
            4. Salve suas alterações.
           
          Carregando
          Salesforce Help | Article