Aktualisieren von Salesforce-Picklist-Werten und -Bezeichnungen
Einführung
Dieses Dokument bietet eine Alternative zur Verwendung des Salesforce-Connectors als Ziel zum Aktualisieren von Picklist-Werten und -Bezeichnungen in Salesforce. Salesforce klassifiziert Picklist-Bezeichnungen 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 bildet den Kern der Lösung. Es gibt zwei Schritte zur Verwendung der Tooling API für diesen Anwendungsfall, die im Folgenden beschrieben werden.
Schritt 1: Abrufen von Picklist-Metadaten und -Werten
Der erste Schritt besteht darin, die DurableId des Picklist-Felds abzurufen. Für diesen Anwendungsfall verwenden wir eine Salesforce-Abfrageaktivität, um das EntityDefinition-Objekt mithilfe einer Unterabfrage zu Fields abzufragen:
SELECT (SELECT Id, DeveloperName, DurableId, QualifiedApiName, Label, DataType FROM Fields WHERE DataType = 'Picklist'), DeveloperName, QualifiedApiName, NewUrl FROM EntityDefinition WHERE QualifiedApiName = '<picklist object name>'
Anschließend erstellen Sie ein Wörterbuch ($dict.picklist.field_id) mit einem Schlüssel des QualifiedApiName und einem Wert der DurableId. Diese ID besteht aus zwei Teilen, die durch einen Punkt (.) getrennt sind. Wir sind an dem Teil nach dem Punkt interessiert.
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 Feldes basierend auf seinem Feldnamen nachzuschlagen. Beispiel: Account__c=>"00N8A00000JUypw".
Schritt 2: Erstellen einer HTTP-Patch-Anfrage
Der zweite Schritt besteht darin, die Anfrage zu erstellen. Das für die Anfrage erforderliche Schema ist unten aufgeführt. Diese API überschreibt die Metadaten-Definition, sodass das gesamte Schema gesendet wird, einschließlich der Nullfelder und leeren Arrays. (Eine weitere Verfeinerung dieses Anwendungsfalls wäre, den ersten Schritt zu verwenden, um 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 generiert, wird ein Skript verwendet, um den Nullwert, der im Feld valueSettings zurückgegeben wird, durch ein leeres Array zu ersetzen:
$io = Replace($io,'"valueSettings": null','"valueSettings": []');
Der HTTP-Connector ist wie folgt konfiguriert:
- Basis-URL: Geben Sie die Basis-URI im Format
http://<domain>/services/data/<vXX.X>/tooling/ein (siehe die Salesforce-Dokumentation Tooling API REST-Ressourcen). - HTTP-Verb: Wählen Sie Benutzerdefiniert und geben Sie
PATCHein. - Pfad: Geben Sie
/sobjects/CustomField/<field id>ein. - Anforderungsheader: Geben Sie einen Namen von
Authorization Bearerund einen Wert der Sitzungs-ID an, die mit der FunktionSalesforceLoginabgeleitet werden kann.
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
}
}