Gerenciador de transações: Integre aprovações do Salesforce

  • Versão de lançamento: Australia
  • Atualizado 12 de mar. de 2026
  • 8 min. de leitura
  • Integre as aprovações do Salesforce ao Gerenciador de transações.

    Menu

    Transação

    Configuração do Salesforce

    Consulte estes módulos e documentação de trilhas do Salesforce:
    Um processo de aprovação no Salesforce automatiza os fluxos de trabalho de aprovação de registro em uma organização. Ele define:
    • 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.

    Fluxo de trabalho

    1. Vá para Configuração e clique em Processos de aprovação e selecione o registro de transação.
    2. Em Gerenciar processos de aprovação para , selecione Oportunidade .
    3. Clique em Criar novo processo de aprovação .

      Criar novo processo de aprovação

    4. 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.

    5. Escolha Atribuir aprovadores automaticamente E defina como qualquer pessoa com a função SysAdmin.

      Atribuir aprovadores automaticamente

    6. 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.

      Transação

    7. Dê ao campo da lista de seleção três valores para distinguir entre Aprovação pendente, Aprovado e Rejeitado.

      Novo campo personalizado

    8. Adicione o campo personalizado ao Layout da transação.

      Layout

      Se você ignorou a etapa anterior, poderá adicionar o campo ao layout da transação da seguinte forma:

      Layout

    9. 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.
    10. 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.

      Transação

      Se você incluiu alertas por e-mail junto com atualizações de campo, o processo de aprovação deve ser semelhante ao seguinte:

      Processo de aprovação

      Se o processo de aprovação final tiver somente atualizações de campo, ele deverá ser semelhante ao seguinte:

      Processo de aprovação

    11. Clique em Ativar.

      Ativar

    12. 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:

      Segurança

    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.

    Nota:
    Se você quiser testar essas chamadas no Postman, o endpoint será o URL do meu Salesforce: <https://logik-1e-dev-ed.develop.my.salesforce.com/> .
    1. 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 DESC

      contextActorId 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.

      Integrações

    2. Enviar para aprovação.
      • Conexão: Salesforce
      • POST

        Caminho adicional: /services/data/v62.0/process/approvations

        Processo de aprovação

    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:

    Código

    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.

    Criar eventos

    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.

    Fases de transição

    Recusar

    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

    1. 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.

      Processo de aprovação

      A imagem a seguir mostra como será o fluxo quando estiver concluído.

      Fluxo de trabalho

    2. 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 .

      Configure o gatilho

    3. Adicione um bloco de decisão e crie resultados para quando o campo personalizado criado for aprovado ou rejeitado.

      Bloco de decisão

    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.

    Manu

    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.

    Gerenciador de transações

    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:

    Script

    Nota:
    Se você estiver conectado a várias organizações por meio da CLI, use este comando para alternar:

    <username>

    Quando você estiver conectado, execute este comando:

    deploy do projeto sf start --manify manifest/package.xml

    Implantações

    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