Ir para o conteúdo

Atualizar Valores e Rótulos da Lista de Opções do Salesforce

Introdução

Este documento apresenta uma alternativa ao uso do conector Salesforce como destino para atualizar os valores e rótulos da lista de opções no Salesforce. O Salesforce classifica rótulos e valores de lista de opções como metadados, não como dados de campo. Como o conector do Salesforce é baseado na API corporativa, ele não pode atualizar metadados.

O Salesforce fornece duas APIs para manipulação de metadados:

A API de ferramentas é menos complicada e é o núcleo da solução. Há duas etapas para usar a API de ferramentas para este caso de uso, descritas abaixo.

Etapa 1: Recuperar Metadados e Valores da Lista de Opções

O primeiro passo é recuperar o DurableId do campo da lista de opções. Para este caso de uso, usamos uma Atividade de consulta do Salesforce para consultar o EntityDefinition objeto usando uma subconsulta em Fields:

SELECT (SELECT Id, DeveloperName, DurableId, QualifiedApiName, Label, DataType FROM Fields WHERE DataType = 'Picklist'), DeveloperName, QualifiedApiName, NewUrl FROM EntityDefinition WHERE QualifiedApiName = '<picklist object name>'

Exemplo de resposta:

anexo

Você então constrói um dicionário ($dict.picklist.field_id) com uma chave do QualifiedApiName e valor do DurableId. Este ID está em duas partes, separadas por um ponto (.). Estamos interessados na parte seguinte ao período.

var = root$transaction.response$body$queryResponse$result$records.EntityDefinition$Fields.DurableId$;
AddToDict($dict.picklist.field_id,root$transaction.response$body$queryResponse$result$records.EntityDefinition$Fields.QualifiedApiName$,
Mid(var,Index(var,".") + 1,Length(var) - Index(var,".")));

Este dicionário será usado para procurar o ID de um campo com base em seu nome de campo. Exemplo: Account__c=>"00N8A00000JUypw".

Etapa 2: Criar uma Solicitação HTTP PATCH

A segunda etapa é criar a solicitação. O esquema necessário para a solicitação está listado abaixo. Essa API irá sobrescrever a definição de metadados e assim todo o esquema é enviado, incluindo os campos nulos e arrays vazios. (Um refinamento adicional deste caso de uso seria usar a primeira etapa para recuperar os metadados existentes e atualizar apenas os campos relevantes. Nesse caso, o objeto seria muito básico e não é mostrado aqui.)

Como uma transformação não irá gerar um array vazio, um script é usado para substituir o valor nulo retornado no valueSettings campo com uma matriz vazia:

$io = Replace($io,'"valueSettings": null','"valueSettings": []');

O conector HTTP está configurado da seguinte forma:

  • Base URL: Insira o URI base, no formato de http://<domain>/services/data/<vXX.X>/tooling/(consulte a documentação do Salesforce Recursos REST da API de ferramentas).
  • Verbo HTTP: Selecione Personalizado e digite PATCH.
  • Caminho: Digite /sobjects/CustomField/<field id>.
  • Cabeçalhos de solicitação: Especifique um Nome de Authorization Bearer e um Valor do ID da sessão, que pode ser derivado usando o SalesforceLogin função.

O esquema para a API de ferramentas:

{
    "FullName": "<objectname.fieldname>",
    "Metadata": {
        "businessOwnerGroup": null,
        "businessOwnerUser": null,
        "businessStatus": null,
        "caseSensitive": null,
        "complianceGroup": null,
        "customDataType": null,
        "defaultValue": null,
        "deleteConstraint": null,
        "deprecated": null,
        "description": null,
        "displayFormat": null,
        "displayLocationInDecimal": null,
        "encryptionScheme": null,
        "escapeMarkup": null,
        "externalDeveloperName": null,
        "externalId": false,
        "formula": null,
        "formulaTreatBlanksAs": null,
        "inlineHelpText": null,
        "isAIPredictionField": null,
        "isConvertLeadDisabled": null,
        "isFilteringDisabled": null,
        "isNameField": null,
        "isSortingDisabled": null,
        "label": "Test",
        "length": null,
        "lookupFilter": null,
        "maskChar": null,
        "maskType": null,
        "metadataRelationshipControllingField": null,
        "populateExistingRows": null,
        "precision": null,
        "readOnlyProxy": null,
        "referenceTargetField": null,
        "referenceTo": null,
        "relationshipLabel": null,
        "relationshipName": null,
        "relationshipOrder": null,
        "reparentableMasterDetail": null,
        "required": false,
        "restrictedAdminField": null,
        "scale": null,
        "securityClassification": null,
        "startingNumber": null,
        "stripMarkup": null,
        "summarizedField": null,
        "summaryFilterItems": null,
        "summaryForeignKey": null,
        "summaryOperation": null,
        "trackFeedHistory": false,
        "trackHistory": false,
        "trackTrending": false,
        "translateData": null,
        "type": "Picklist",
        "unique": null,
        "urls": null,
        "valueSet": {
            "controllingField": null,
            "restricted": false,
            "valueSetDefinition": {
                "sorted": false,
                "value": [
                    {
                        "color": null,
                        "default": false,
                        "description": null,
                        "isActive": null,
                        "label": "<labeldata>",
                        "urls": null,
                        "valueName": "<picklistvaluedata>"
                    },
                    {
                        "color": null,
                        "default": false,
                        "description": null,
                        "isActive": null,
                        "label": "<labeldata>",
                        "urls": null,
                        "valueName": "<picklistvaluedata>"
                    },
                    {
                        "color": null,
                        "default": false,
                        "description": null,
                        "isActive": null,
                        "label": "<labeldata>",
                        "urls": null,
                        "valueName": "<picklistvaluedata>"
                    }
                ]
            },
            "valueSetName": null,
            "valueSettings": []
        },
        "visibleLines": null,
        "writeRequiresMasterRead": null
    }
}