Zum Inhalt springen

Aktualisieren von Salesforce Auswahllistenwerten und-Beschriftungen

Einführung

Dieses Dokument stellt eine Alternative zur Verwendung des Salesforce Connectors dar als Ziel zum Aktualisieren von Auswahllistenwerten und -beschriftungen in Salesforce. Salesforce klassifiziert Auswahllistenbeschriftungen und -werte als Metadaten, nicht als Felddaten. Da der Salesforce Connector auf der Enterprise API basiert, kann er Metadaten nicht aktualisieren.

Salesforce bietet zwei APIs zur Manipulation von Metadaten:

Die Tooling API ist weniger umständlich und stellt den Kern der Lösung dar. Die Verwendung der Tooling-API für diesen Anwendungsfall erfolgt in zwei Schritten, die unten beschrieben werden.

Schritt 1: Abrufen von Metadaten und Werten der Auswahlliste

Der erste Schritt besteht darin, die DurableId des Auswahllistenfelds. Für diesen Anwendungsfall verwenden wir eine Salesforce Query-Aktivität zur Abfrage der EntityDefinition Objekt mithilfe einer Unterabfrage auf Fields:

SELECT (SELECT Id, DeveloperName, DurableId, QualifiedApiName, Label, DataType FROM Fields WHERE DataType = 'Picklist'), DeveloperName, QualifiedApiName, NewUrl FROM EntityDefinition WHERE QualifiedApiName = '<picklist object name>'

Beispielantwort:

Anhang

Dann erstellen Sie ein Wörterbuch ($dict.picklist.field_id) mit einem Schlüssel der QualifiedApiName und Wert der DurableId Diese ID besteht aus zwei Teilen, die durch einen Punkt getrennt sind (.). Uns interessiert der Teil nach dem Punkt.

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,".")));

Dieses Wörterbuch wird verwendet, um die ID eines Felds anhand seines Feldnamens nachzuschlagen. Beispiel: Account__c=>"00N8A00000JUypw".

Schritt 2: Erstellen einer HTTP-Patch-Anforderung

Der zweite Schritt besteht darin, die Anfrage zu erstellen. Das für die Anfrage erforderliche Schema ist unten aufgeführt. Diese API überschreibt die Metadatendefinition, sodass das gesamte Schema gesendet wird, einschließlich der Nullfelder und leeren Arrays. (Eine weitere Verfeinerung dieses Anwendungsfalls wäre, im ersten Schritt die vorhandenen Metadaten abzurufen und nur die relevanten Felder zu aktualisieren. In diesem Fall wäre das Objekt sehr einfach und wird hier nicht angezeigt.)

Da eine Transformation kein leeres Array erzeugt, wird ein Script verwendet, um den im Array zurückgegebenen Nullwert zu ersetzen valueSettings Feld mit einem leeren Array:

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

Der HTTP-Anschluss ist wie folgt konfiguriert:

  • Basis-URL: Geben Sie die Basis-URI im Format http://<domain>/services/data/<vXX.X>/tooling/ (siehe die Salesforce Dokumentation Tooling API REST-Ressourcen).
  • HTTP-Verb: Wählen Sie Benutzerdefiniert und geben Sie ein PATCH.
  • Pfad: Eingabe /sobjects/CustomField/<field id>.
  • Anforderungsheader: Geben Sie einen Namen von Authorization Bearer und ein Wert der Sitzungs-ID, der abgeleitet werden kann mithilfe des SalesforceLogin Funktion.

Das Schema für die Tooling API:

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