Gerenciador de transações: Integre aprovações do Salesforce
Integre as aprovações do Salesforce ao Gerenciador de transações.
Configuração do Salesforce
- Carteiro: Início rápido: Conecte o Postman ao Salesforce
- Enviar para aprovação: Desenvolvedores do Salesforce: Envie um registro para aprovação
- Etapas de aprovação: A sequência de etapas e aprovadores de um registro, por exemplo, enviar uma solicitação de folga ao gerente de um funcionário para aprovação.
- Ações: Ações automatizadas com base no resultado da aprovação, como atualizar registros se aprovados ou enviar notificações se rejeitadas.
Isso simplifica o processo de aprovação e garante a consistência.
- Vá para Configuração e clique em Processos de aprovação e selecione o registro de transação.
- Em Gerenciar processos de aprovação para , selecione Oportunidade .
- Clique em Criar novo processo de aprovação .
- Certifique-se de que Adicione Enviar para aprovação e Histórico de aprovação a opção está marcada.
Você pode especificar condições, se aplicável, na seção Critérios específicos da entrada.
- Escolha Atribuir aprovadores automaticamente E defina como qualquer pessoa com a função SysAdmin.
- Crie um campo de lista de seleção personalizado no registro de transação navegando até Configuração e clicando em Gerenciador de objetos e, em seguida, clique em Transação . Certifique-se de que o campo não esteja definido como uma lista de seleção de seleção múltipla.
- Dê ao campo da lista de seleção três valores para distinguir entre Aprovação pendente, Aprovado e Rejeitado.
- Adicione o campo personalizado ao Layout da transação.
Se você ignorou a etapa anterior, poderá adicionar o campo ao layout da transação da seguinte forma:
- Volte para o processo de aprovação, clique em Ações de envio inicial , clique em Adicionar novo e, em seguida, selecione Atualização de campo . Configure-o com os valores necessários.
- Para garantir que os campos relevantes sejam atualizados com base no resultado do processo de aprovação, repita a etapa 9 para as seções Ações de aprovação e Ações de rejeição. A captura de tela a seguir mostra a opção de rejeição final.
Se você incluiu alertas por e-mail junto com atualizações de campo, o processo de aprovação deve ser semelhante ao seguinte:
Se o processo de aprovação final tiver somente atualizações de campo, ele deverá ser semelhante ao seguinte:
- Clique em Ativar.
- Para garantir que o CORS inclua o URL, na barra de pesquisa Configurar, pesquise por CORS Ou vá para Configuração e clique em Segurança e clique em CORS . Verifique se eles estão incluídos no CORS:
Configuração do Gerenciador de transações: Integrações
Crie duas integrações para um evento que será usado para enviar o registro para aprovação por meio do Gerenciador de transações.
- Receba o ID do registro do Salesforce: Busque o ID de registro do Salesforce correto usando o UUID. Esta integração é usada para preencher o campo personalizado da integração acima.
- Conexão: Salesforce
- GET
Caminho adicional:
/Services/data/v62.0/query/?q: SELECIONE ID, CreatedDate, LGK__TransactionUUID__c DE LGK__Transaction__c EM QUE LGK__TransactionUUUUUUID__c: '(http://txn.id/}}'ORDER BY CreatedDate DESC
Transformação de resposta:
{ "fields": [ { "variableName": "txn.custom.sfRecordID", "value": {{#each records}}{{#if @first}}"{{this.Id}}"{{/if}}{{/each}} }, { "variableName": "txn.custom.opportunityName", "value": {{#each records}}{{#if @first}}"{{this.LGK__OpportunityId__r.Name}}"{{/if}}{{/each}} }, { "variableName": "txn.custom.accountName", "value": {{#each records}}{{#if @first}}"{{this.LGK__AccountId__r.Name}}"{{/if}}{{/each}} } ] }A CONSULTA ATUALIZADA USA ISTO:
/services/data/v62.0/query/?q=SELECT Id, CreatedDate,LGK__OpportunityId__c,LGK__OpportunityId__r.Name, LGK__AccountId__r.Name, LGK__AccountId__c,LGK__TransactionUUID__c FROM LGK__Transaction__c WHERE LGK__TransactionUUID__c ='{{txn.id}}'ORDER BY CreatedDate DESCcontextActorId Refere-se ao ID do registro do administrador do sistema no Salesforce. Ele pode ser obtido navegando até Configuração e clicando em Usuários E, em seguida, copiando o ID do URL da página do usuário.
- Enviar para aprovação.
- Conexão: Salesforce
- POST
Caminho adicional:
/services/data/v62.0/process/approvations
Transformação da solicitação:
{
"requests" : [{
"actionType": "Submit",
"contextId": "{{txn.custom.sfRecordID}}",
"nextApproverIds": [],
"comments":"The line item has a discount percentage of {{txn.custom.overallDealDiscount}}%",
"contextActorId": "005bm000003SKtJ", -- SF Record ID of user highlighted above
"processDefinitionNameOrId" : "TM_SF_Approval", --should be the unique name fro process definition detail highlighted above
"skipEntryCriteria": "true"}]
}
Certifique-se de que o modelo de transformação tenha estes valores corretamente:
Configuração do Gerenciador de transações: Criando eventos
A integração de aprovações do Slack é implementada por meio de chamadas de API de evento sem periféricos. Nesta abordagem, usaremos essas chamadas de API sem periféricos em um fluxo acionado por registro e executaremos a chamada por meio de ações do APEX.
Observe que as duas integrações criadas na etapa anterior foram projetadas para funcionar em sequência. A primeira integração recebe o ID de registro do Salesforce e a segunda integração o envia para aprovação. Como alternativa, o processo de recebimento do ID do Salesforce pode ocorrer na ação Abrir transação adicionando a configuração necessária nessa fase.
Crie dois eventos adicionais que moverão a fase para aprovação ou para trás para revisão. Certifique-se de anotar os respectivos nomes de variáveis para uso na configuração do texto explicativo da API.
Configuração do Gerenciador de transações: Adicionando o botão Enviar para aprovação ao layout
Os eventos de botão podem ser adicionados ao layout default_draft usando o seguinte formato JSON:
{
"type": "button",
"event": "submitForApproval",
"label": "Revise",
"columnOrder": 2,
"variableName": "revise"
},
Certifique-se de adicionar o campo personalizado ao campos de rascunho: [] seção; não é necessário incluí-la no layout.
{
"type": "ReadOnlyText",
"label": "SF Record ID",
"variableName": "txn.custom.sfRecordID"
},
Fluxo acionado por registro
Para configurar o ambiente de código VS, instale as extensões do código VS deste documento: Configuração do membro da equipe de engenharia de vendas
- Seguindo o. Processo de aprovação de trilhas , crie um registro de lista de seleção no LGK__Transaction__Cobjeto que tem o estado de aprovação atual da transação e certifique-se de que o processo atualize o registro com base na aprovação, rejeição e aprovação pendente.
A imagem a seguir mostra um campo personalizado que aciona o campo acionado por registro: O. Approval_Status__Ccampo que você criou quando criou o processo de aprovação.
A imagem a seguir mostra como será o fluxo quando estiver concluído.
- No bloco Iniciar, clique em Editar .
Gatilho no LGK__Transaction__CObjeto baseado no campo personalizado, garantindo que um UUID não seja nulo. Clique também em Executado de forma assíncrona e. Somente quando um registro é atualizado para atender .
- Adicione um bloco de decisão e crie resultados para quando o campo personalizado criado for aprovado ou rejeitado.
Código APEX
Embora esta classe APEX tenha sido implantada por meio do código VS, ela também pode ser implantada no Salesforce. A primeira etapa é criar um novo projeto com manifesto.
Em seguida, crie uma classe APEX (na caixa azul), bem como um arquivo manifest.xml (na caixa verde) para ir para os respectivos arquivos no diretório do projeto.
Código APEX:
global with sharing class TransactionManagerFlow {
global class FlowInput {
@InvocableVariable(label='Triggering Record' required=true)
global LGK__Transaction__c triggeringRecord;
}
// Handle logic for Rejected status
@InvocableMethod(label='Logik.io Transaction callout from Salesforce' description='Makes callout to transition Logik.io transaction stage.')
global static void handleApprovalStatus(FlowInput[] requestInputs) {
System.debug('Handling Rejected status for Record: ' + requestInputs[0].triggeringRecord.Id);
LGK__ConfigurationTenant__c customSettings = LGK__ConfigurationTenant__c.getInstance();
String updatedRuntimeToken = '_gdyi0w0oGu1bNk3PO5exhUGqDFcZQVLIw';
System.debug(updatedRuntimeToken);
String endpoint = 'https://se-txn-sandbox.test02.logik.io';
for (FlowInput eachTxn : requestInputs) {
// Make the API request to transfer a transaction from 'new' stage to 'rejected' stage
// (compare with snippet from ApprovalProcessHandler.makeApiCall)
String uuid = eachTxn.triggeringRecord.LGK__TransactionUUID__c;
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setHeader('Origin', endpoint);
if (eachTxn.triggeringRecord.Approval_Status__c == 'Rejected') {
request.setEndpoint(endpoint + '/api/t/' + String.valueOf(uuid) + '/events/revise'); // Example endpoint
System.debug('Endpoint set for rejection' + request.getEndpoint());
} else if (eachTxn.triggeringRecord.Approval_Status__c == 'Approved') {
request.setEndpoint(endpoint + '/api/t/' + String.valueOf(uuid) + '/events/proceedToApproved'); // Example endpoint
System.debug('Endpoint set for approval' + request.getEndpoint());
}
request.setMethod('POST');
request.setHeader('Authorization', 'Bearer ' + updatedRuntimeToken);
request.setHeader('Content-Type', 'application/json');
request.setBody('{}'); // Convert to JSON if inputs are needed
System.debug(request);
if (!Test.isRunningTest()) {
HttpResponse response = http.send(request);
if (response.getStatusCode() != 200) {
System.debug(LoggingLevel.ERROR, 'Error transitioning transaction: ' + response.getStatusCode());
System.debug(LoggingLevel.ERROR, response.getBody());
} else {
System.debug('Rejected API Call Failed: ' + response.getStatusCode() + ' - ' + response.getBody());
}
} else {
eachTxn.triggeringRecord.LGK__TransactionUUID__c = 'testUUID';
}
}
}
}
XML:
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>TransactionManagerFlow</members>
<name>ApexClass</name>
</types>
<version>61.0</version>
</Package>
Em seguida, se você não estiver conectado à organização na qual deseja implantar, faça isso com o. web de login da organização sf , que leva você a login.salesforce.com.
Quando você tiver autorizado a ILC, o resultado deverá ser semelhante ao seguinte:
<username>
Quando você estiver conectado, execute este comando:
deploy do projeto sf start --manify manifest/package.xml
Adicione as ações do APEX após os blocos de decisão e certifique-se de que seu fluxo seja semelhante ao fornecido na captura de tela. (Procure um nome que corresponda ao parâmetro de rótulo no método invocável.)
Por fim, ative o fluxo e teste.
Teste
Depois que o fluxo acionado por registro e o blueprint do Gerenciador de transações forem criados, você pode achar essa consulta SOQL útil para depurar seu processo de aprovações no Salesforce.
Recebendo status de aprovação da Salesforce (obtendo o estado do processo mais recente)
- Conexão: Salesforce
- GET
- Caminho adicional: e, em seguida, SELECIONE ID, Status, TargetObjectId
- Consulta de SOQL
SELECT Id, Status, TargetObjectId
FROM ProcessInstance
WHERE TargetObjectId-'006bm000002IUI4AAO' -- This is the sf oppy/transaction object id
ORDER BY CreatedDate DESC