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:
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 desSalesforceLogin
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
}
}