Du är här:
Omnistudio Data Mapper-anrop från Apex
För att anropa en datamappare från Apex, anropa ConnectApi.OmniDesignerConnect.executeDataMapper(bundleName, apexInput) Connect API och specificera namnet på datamapparen och de indata som den behöver. Denna API ersätter metoden vlocity_ins.DRGlobal.processObjectsJSON(). Denna Connect API tar bort beroendet av det hanterade paketet och ger upp till 60 % bättre prestanda för Data Mapper-anrop från en Apex klass jämfört med den tidigare metoden.
Specificera indata enligt följande:
-
För ett JSON-objekt, använd
Map<String, Object>. Sätt strängen till JSON-nyckeln och objektet till JSON-värdet. -
För en matris av JSON-objekt, använd
List<Map<String, Object>>. Sätt strängen till JSON-nyckeln och objektet till JSON-värdet. -
Som ett alternativ kan du specificera inmatningen som en sträng som innehåller den JSON-inmatning som krävs av Datamappningen.
Mer information om metoderna i klassen DRGlobal, som erbjuder flera sätt att anropa datamappare, finns i DRGlobal-klass och metoder.
Exempel på extrahering eller transformation av datamappning
För att bearbeta resultaten som returneras av ett Data Mapper-extrahering eller transformeras i Apex, deserialisera utdata till en Map<String, Object> eller List<Map<String,
Object>>.
/* Specify Data Mapper extract or transform to call */
String bundleName = 'DataMapperName';
/* Populate the input JSON */
Map<String, Object> objectList = new Map<String, Object>{'MyKey'=>'MyValue'};
/* Call the Data Mapper */
String jsonString = JSON.serialize(objectList);
List<String> jsonInputData = new List<String>();
jsonInputData.add(jsonString);
ConnectApi.DataMapperExecuteInputRepresentation apexInput = new ConnectApi.DataMapperExecuteInputRepresentation();
apexInput.dataMapperInput = jsonInputData;
apexInput.inputType = 'JSON';
ConnectApi.DataMapperExecuteOptionsRepresentation options = new ConnectApi.DataMapperExecuteOptionsRepresentation();
options.locale = null;
options.shouldSendLegacyResponse = true;
apexInput.options = options;
ConnectApi.DataMapperExecuteOutputRepresentation output = ConnectApi.OmniDesignerConnect.executeDataMapper(bundleName, apexInput);
/* Process the results returned by a Data Mapper Extract or Transform */
List<String> innerResponse = output.response;
for (String currentResponse : innerResponse){
Map<String, Object> outerMap = (Map<String, Object>) JSON.deserializeUntyped(currentResponse);
List<String> keys = new List<String>(outerMap.keySet());
System.debug(outerMap.get('response'));
}Exempel på datamappningsbelastning
Datamappningsinläsningar returnerar JSON som innehåller data om de Salesforce-objekt som skapades eller uppdaterades av operationen. För att bearbeta resultaten som returneras av en Data Mapper-inläsning, deserialisera utdata till en karta. Från den resulterande kartan kan du extrahera data om de objekt som skapades och eventuella fel som inträffade. Inläsningsexemplet för Datamappning nedan visar hur du kommer åt dessa data från resultatkartan.
String objectList = '{"accountName":"Vlocity", "contractCode":"SKS9181"}';
List<String> jsonInputData = new List<String>();
jsonInputData.add(objectList);
ConnectApi.DataMapperExecuteInputRepresentation apexInput = new ConnectApi.DataMapperExecuteInputRepresentation();
apexInput.dataMapperInput = jsonInputData;
apexInput.inputType = 'JSON';
ConnectApi.DataMapperExecuteOptionsRepresentation options = new ConnectApi.DataMapperExecuteOptionsRepresentation();
options.ignoreCache = false;
options.shouldSendLegacyResponse = true;
apexInput.options = options;
ConnectApi.DataMapperExecuteOutputRepresentation output =ConnectApi.OmniDesignerConnect.executeDataMapper(bundleName, apexInput);
List<String> innerResponse = output.response;
String currentResponse = innerResponse[0];
System.debug(currentResponse);
Map<String, Object> outerMap = (Map<String, Object>) JSON.deserializeUntyped(currentResponse);
List<String> keys = new List<String>(outerMap.keySet());
System.debug(outerMap.get('drSObjectResults'));
/*
Process the results of the load: these methods return details about objects affected by the Data Mapper Load, in addition to any errors that occured
*/
Map<String, Object> createdObjectsByType = (Map<String, Object>)resultMap.get('createdObjectsByType');
Map<String, Object> createdObjectsByTypeForBundle = (Map<String, Object>)createdObjectsByType.get('bundleName');
Map<String, Object> createdObjectsByOrder = (Map<String, Object>)resultMap.get('createdObjectsByOrder');
Map<String, Object> errors = (Map<String, Object>)resultMap.get('errors');
Map<String, Object> errorsByField = (Map<String, Object>)resultMap.get('errorsByField');
List<Object> errorsAsJson = (List<Object>)outerMap.get('errorsAsJson'); // Returns input JSON plus per-node errorsExempel på datamappningsbelastning med parametern bulkUpload
Denna exempelkod skickar parametern bulkUpload till en Data Mapper Load.
String objectList = '[{"ProductCode__c": 11050665},{"ProductCode__c": 11070100}]'; // replace this with the input for your Data Mapper Load
String bundleName = 'DRLoadPrice'; // replace this with your Data Mapper name
Map<String,Object> bodyData = new Map<String,Object>();
bodyData.put('bundleName',bundleName);
bodyData.put('objectList',objectList);
List<String> jsonInputData = new List<String>();
jsonInputData.add(bodyData.get('objectList'));
ConnectApi.DataMapperExecuteInputRepresentation apexInput = new ConnectApi.DataMapperExecuteInputRepresentation();
apexInput.dataMapperInput = jsonInputData;
apexInput.inputType = 'JSON';
ConnectApi.DataMapperExecuteOptionsRepresentation options = new ConnectApi.DataMapperExecuteOptionsRepresentation();
options.ignoreCache = false;
apexInput.options = options;
options.shouldSendLegacyResponse = true;
ConnectApi.DataMapperExecuteOutputRepresentation output = ConnectApi.OmniDesignerConnect.executeDataMapper(bodyData.get('bundleName'), apexInput);
List<String> innerResponse = output.response;
Map<String, Object> outerMap = (Map<String, Object>) JSON.deserializeUntyped(innerResponse[0]);
List<String> keys = new List<String>(outerMap.keySet());
System.debug(outerMap.get('drSObjectResults'));
