Ir para o conteúdo

Atualizar valores e rótulos de picklist do Salesforce

Introdução

Este documento apresenta uma alternativa ao uso do conector do Salesforce como destino para atualizar valores e rótulos de picklist no Salesforce. O Salesforce classifica rótulos e valores de picklist como metadados, e não como dados de campo. Como o conector do Salesforce é baseado na API Enterprise, 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. Existem duas etapas para usar a API de Ferramentas para este caso de uso, descritas abaixo.

Etapa 1: Recuperar metadados e valores de picklist

A primeira etapa é recuperar o DurableId do campo de picklist. Para este caso de uso, utilizamos uma atividade de consulta do Salesforce para consultar o objeto EntityDefinition 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>'

Em seguida, você constrói um dicionário ($dict.picklist.field_id) com uma chave do QualifiedApiName e valor do DurableId. Este ID é composto por duas partes, separadas por um ponto (.). Estamos interessados na parte que segue o ponto.

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 no nome do campo. Exemplo: Account__c=>"00N8A00000JUypw".

Passo 2: Construir uma solicitação HTTP patch

O segundo passo é construir a solicitação. O esquema necessário para a solicitação está listado abaixo. Esta API irá sobrescrever a definição de metadados e, portanto, todo o esquema é enviado, incluindo os campos nulos e arrays vazios. (Um refinamento adicional deste caso de uso seria usar o primeiro passo 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 gerará um array vazio, um script é usado para substituir o valor nulo retornado no campo valueSettings por um array vazio:

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

O conector HTTP é configurado da seguinte forma:

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

O esquema para a API Tooling:

{
    "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
    }
}