Actualizar Valores y Etiquetas de Listas de Selección de Salesforce
Introducción
Este documento presenta una alternativa al uso del Conector de Salesforce como objetivo para actualizar etiquetas y valores de listas de selección en Salesforce. Salesforce clasifica las etiquetas y los valores de la lista de selección como metadatos, no como datos de campo. Dado que el conector de Salesforce se basa en la API empresarial, no puede actualizar los metadatos.
Salesforce proporciona dos APIs para manipular metadatos:
La API de herramientas es menos engorrosa y es el núcleo de la solución. Hay dos pasos para usar la API de herramientas para este caso de uso, que se describen a continuación.
Paso 1: Recuperar Metadatos y Valores de la Lista de Selección
El primer paso es recuperar el DurableId
del campo de la lista de selección. Para este caso de uso, usamos una actividad de consulta de Salesforce para consultar la EntityDefinition
objeto usando una subconsulta en Fields
:
SELECT (SELECT Id, DeveloperName, DurableId, QualifiedApiName, Label, DataType FROM Fields WHERE DataType = 'Picklist'), DeveloperName, QualifiedApiName, NewUrl FROM EntityDefinition WHERE QualifiedApiName = '<picklist object name>'
Ejemplo de respuesta:
A continuación, crea un diccionario ($dict.picklist.field_id
) con una llave del QualifiedApiName
y valor de la DurableId
. Este ID consta de dos partes, separadas por un punto (.
). Estamos interesados en la parte que sigue al 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 diccionario se utilizará para buscar el ID de un campo en función de su nombre de campo. Ejemplo: Account__c=>"00N8A00000JUypw"
.
Paso 2: Cree una Solicitud de PATCH HTTP
El segundo paso es construir la solicitud. El esquema requerido para la solicitud se enumera a continuación. Esta API sobrescribirá la definición de metadatos y, por lo tanto, se enviará el esquema completo, incluidos los campos nulos y las matrices vacías. (Otro refinamiento de este caso de uso sería usar el primer paso para recuperar los metadatos existentes y actualizar solo los campos relevantes. En ese caso, el objeto sería muy básico y no se muestra aquí).
Como una transformación no generará una matriz vacía, se utiliza un secuencia de comandos para reemplazar el valor nulo devuelto en el valueSettings
campo con una matriz vacía:
$io = Replace($io,'"valueSettings": null','"valueSettings": []');
El conector HTTP se configura de la siguiente manera:
- URL base: Ingrese el URI base, en el formato de
http://<domain>/services/data/<vXX.X>/tooling/
(consulte la documentación de Salesforce Recursos REST de la API de herramientas). - Verbo HTTP: Seleccione Personalizar e ingrese
PATCH
. - Ruta: Entrar
/sobjects/CustomField/<field id>
. - Encabezados de solicitud: Especifique un Nombre de
Authorization Bearer
y un Valor del ID de sesión, que se puede derivar usando elSalesforceLogin
función.
El esquema para la API de herramientas:
{
"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
}
}