Saltar al contenido

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:

adjunto

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 el SalesforceLogin 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
    }
}