Loading
Omnistudio Data Mapper-anrop från Apex

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.

Viktig
Viktig Prestandasiffrorna i detta dokument tillhandahålls endast i informationssyfte och baseras på intern validering och tester under specifika förhållanden. Faktiska resultat kan variera beroende på din komponentdesign, produktionsmiljö och andra faktorer. Dessa siffror ger allmän vägledning och är inte en garanti för prestanda.

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 errors

Exempel 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'));
 
Laddar
Salesforce Help | Article