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:
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 oSalesforceLogin
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
}
}