Saltar al contenido

Actualizar valores y etiquetas de listas desplegables de Salesforce

Introducción

Este documento presenta una alternativa al uso del conector de Salesforce como destino para actualizar los valores y etiquetas de listas desplegables en Salesforce. Salesforce clasifica las etiquetas y valores de listas desplegables como metadatos, no como datos de campo. Dado que el conector de Salesforce se basa en la API Empresarial, no puede actualizar 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 listas desplegables

El primer paso es recuperar el DurableId del campo de lista desplegable. Para este caso de uso, utilizamos una actividad de consulta de Salesforce para consultar el objeto EntityDefinition utilizando 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>'

Luego, construyes un diccionario ($dict.picklist.field_id) con una clave del QualifiedApiName y un valor del DurableId. Este ID está en dos partes, separadas por un punto (.). Nos interesa la parte que sigue al punto.

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 basado en su nombre de campo. Ejemplo: Account__c=>"00N8A00000JUypw".

Paso 2: Construir una solicitud HTTP patch

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 envía todo el esquema, incluidos los campos nulos y los arreglos vacíos. (Una mejora adicional de este caso de uso sería utilizar 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á un arreglo vacío, se utiliza un script para reemplazar el valor nulo devuelto en el campo valueSettings con un arreglo vacío:

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

El conector HTTP se configura de la siguiente manera:

  • URL base: Ingrese la URI base, en el formato http://<dominio>/services/data/<vXX.X>/tooling/ (consulte la documentación de Salesforce Recursos REST de la API de Tooling).
  • Verbo HTTP: Seleccione Personalizado e ingrese PATCH.
  • Ruta: Ingrese /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 utilizando la función SalesforceLogin.

El esquema para la API de 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
    }
}