You are here:
VersionAwareCatalogConfigLoader:loadConfig Method
Loads the configuration for the VersionAwareCatalog service, defined in the Version Aware Object Relationship metadata (VersionAwareObjectRelationship__mdt).
Signature
public Boolean invokeMethod(String methodName, Map<String, Object> inputs, Map<String, Object> outputs, Map<String, Object> options)Usage
When the Version Aware Catalog Service is used by Vlocity Order Management to retrieve a Vlocity Catalog entity, the getSubGraph method of that service invokes the VersionAwareCatalogConfigLoader:loadConfig method.
Parameters
Parameter | Data Type | Description |
|---|---|---|
inputs |
Map |
Map <String, Object> of the required input parameters for the method. |
outputs |
Map |
Map <String, Object> to store the result value. |
options |
Map |
Map <String, Object> of the optional input parameters for the method. |
methodName |
String |
The name of the method that you want to use. In this case: loadConfig |
Output Data
This method returns the relationship map defined in VersionAwareObjectRelationship__mdt.
{
"OrderItem": {
"Product2": {
"versionFilter": null,
"sourceSObjectName": "OrderItem",
"relationshipName": "Product2",
"interfaceKey": "Product2"
}
},
"Product2": {
"Product2": {
"versionFilter": null,
"sourceSObjectName": "Product2",
"sourceIdentifierKey": "ParentProductId__c",
"junctionObjectName": "ProductChildItem__c",
"interfaceKey": "childrenProducts",
"destinationSObjectName": "Product2",
"destinationIdentifierKey": "ChildProductId__c"
},
"Children": {
"versionFilter": null,
"sourceSObjectName": "Product2",
"relationshipName": "Datastore__c",
"interfaceKey": "Children"
},
"offerProducts": {
"versionFilter": null,
"sourceSObjectName": "Product2",
"relationshipName": "ProductSpecOffers__r",
"interfaceKey": "offerProducts"
}
}
}Example
Here is a sample implementation of this method.
global class SampleVersionAwareCatalogConfigLoader implements vlocity_cmt.VlocityOpenInterface {
public Boolean invokeMethod(String methodName,
Map < String, Object > inputs,
Map < String, Object > outputs,
Map < String, Object > options) {
if (String.isNotBlank(methodName)) {
switch on methodName {
when 'loadConfig' {
Map < String, Map < String, IVersionAwareCatalogRelationship >> relationshipMap = new Map < String, Map < String, IVersionAwareCatalogRelationship >> ();
String nsp = ApplicationUtilities.getNamespacePrefix();
List < Map < String, String >> versionAwareObjectRelationshipList = new List < Map < String, String >> {
new Map < String,
String > {
nsp + 'DestinationObject__c' => 'Product2',
nsp + 'InterfaceKey__c' => 'offerProducts',
nsp + 'RelationshipName__c' => 'ProductSpecOffers__r',
nsp + 'RelationshipType__c' => 'One to Many',
nsp + 'SourceObject__c' => 'Product2'
},
new Map < String,
String > {
nsp + 'DestinationObject__c' => 'Product2',
nsp + 'InterfaceKey__c' => 'Children',
nsp + 'RelationshipName__c' => 'Datastore__c',
nsp + 'RelationshipType__c' => 'Child Products from Datastore',
nsp + 'SourceObject__c' => 'Product2',
nsp + 'VersionFilter__c' => 'EffectiveStartDateTime__c = null AND EffectiveStartDateTime__c >= 2020-08-15 06:00:00.000Z'
},
new Map < String,
String > {
nsp + 'DestinationObject__c' => 'Product2',
nsp + 'InterfaceKey__c' => 'Product2',
nsp + 'RelationshipName__c' => 'Product2',
nsp + 'RelationshipType__c' => 'Many to One',
nsp + 'SourceObject__c' => 'OrderItem'
},
new Map < String,
String > {
nsp + 'DestinationIdKey__c' => 'ChildProductId__c',
nsp + 'DestinationObject__c' => 'Product2',
nsp + 'InterfaceKey__c' => 'childrenProducts',
nsp + 'JunctionObject__c' => 'ProductChildItem__c',
nsp + 'RelationshipType__c' => 'Many to Many',
nsp + 'SourceIdKey__c' => 'ParentProductId__c',
nsp + 'SourceObject__c' => 'Product2'
}
};
for (Map < String, String > verObj: versionAwareObjectRelationshipList) {
if (verObj.get(nsp + 'RelationshipType__c') == 'One to Many') {
if (!relationshipMap.containsKey(verObj.get(nsp + 'SourceObject__c'))) {
relationshipMap.put(verObj.get(nsp + 'SourceObject__c'), new Map < String, IVersionAwareCatalogRelationship > {
verObj.get(nsp + 'InterfaceKey__c') => (IVersionAwareCatalogRelationship)
new OneToManyRelationship(verObj.get(nsp + 'RelationshipName__c'), verObj.get(nsp + 'SourceObject__c'), verObj.get(nsp + 'InterfaceKey__c'), verObj.get(nsp + 'VersionFilter__c'))
});
} else {
if (!relationshipMap.get(verObj.get(nsp + 'SourceObject__c')).containsKey(verObj.get(nsp + 'InterfaceKey__c'))) {
relationshipMap.get(verObj.get(nsp + 'SourceObject__c')).put(verObj.get(nsp + 'InterfaceKey__c'), (IVersionAwareCatalogRelationship) new OneToManyRelationship(verObj.get(nsp + 'RelationshipName__c'), verObj.get(nsp + 'SourceObject__c'), verObj.get(nsp + 'InterfaceKey__c'), verObj.get(nsp + 'VersionFilter__c')));
}
}
} else if (verObj.get(nsp + 'RelationshipType__c') == 'Many to One') {
if (!relationshipMap.containsKey(verObj.get(nsp + 'SourceObject__c'))) {
relationshipMap.put(verObj.get(nsp + 'SourceObject__c'), new Map < String, IVersionAwareCatalogRelationship > {
verObj.get(nsp + 'InterfaceKey__c') => (IVersionAwareCatalogRelationship)
new ManyToOneRelationship(verObj.get(nsp + 'RelationshipName__c'), verObj.get(nsp + 'SourceObject__c'), verObj.get(nsp + 'InterfaceKey__c'), verObj.get(nsp + 'VersionFilter__c'))
});
} else {
if (!relationshipMap.get(verObj.get(nsp + 'SourceObject__c')).containsKey(verObj.get(nsp + 'InterfaceKey__c'))) {
relationshipMap.get(verObj.get(nsp + 'SourceObject__c')).put(verObj.get(nsp + 'InterfaceKey__c'), (IVersionAwareCatalogRelationship) new ManyToOneRelationship(verObj.get(nsp + 'RelationshipName__c'), verObj.get(nsp + 'SourceObject__c'), verObj.get(nsp + 'InterfaceKey__c'), verObj.get(nsp + 'VersionFilter__c')));
}
}
} else if (verObj.get(nsp + 'RelationshipType__c') == 'Many to Many') {
if (!relationshipMap.containsKey(verObj.get(nsp + 'SourceObject__c'))) {
relationshipMap.put(verObj.get(nsp + 'SourceObject__c'), new Map < String, IVersionAwareCatalogRelationship > {
verObj.get(nsp + 'InterfaceKey__c') => (IVersionAwareCatalogRelationship)
new ManyToManyRelationship(verObj.get(nsp + 'SourceObject__c'), verObj.get(nsp + 'DestinationObject__c'), verObj.get(nsp + 'JunctionObject__c'), verObj.get(nsp + 'SourceIdKey__c'), verObj.get(nsp + 'DestinationIdKey__c'), verObj.get(nsp + 'InterfaceKey__c'), verObj.get(nsp + 'VersionFilter__c'))
});
} else {
if (!relationshipMap.get(verObj.get(nsp + 'SourceObject__c')).containsKey(verObj.get(nsp + 'InterfaceKey__c'))) {
relationshipMap.get(verObj.get(nsp + 'SourceObject__c')).put(verObj.get(nsp + 'DestinationObject__c'), (IVersionAwareCatalogRelationship) new ManyToManyRelationship(verObj.get(nsp + 'SourceObject__c'), verObj.get(nsp + 'DestinationObject__c'), verObj.get(nsp + 'JunctionObject__c'), verObj.get(nsp + 'SourceIdKey__c'), verObj.get(nsp + 'DestinationIdKey__c'), verObj.get(nsp + 'InterfaceKey__c'), verObj.get(nsp + 'VersionFilter__c')));
}
}
} else if (verObj.get(nsp + 'RelationshipType__c') == 'Child Products from Datastore') {
if (!relationshipMap.containsKey(verObj.get(nsp + 'SourceObject__c'))) {
relationshipMap.put(verObj.get(nsp + 'SourceObject__c'), new Map < String, IVersionAwareCatalogRelationship > {
verObj.get(nsp + 'InterfaceKey__c') => (IVersionAwareCatalogRelationship)
new ChildProductFromDataStore(verObj.get(nsp + 'RelationshipName__c'), verObj.get(nsp + 'SourceObject__c'), verObj.get(nsp + 'InterfaceKey__c'), verObj.get(nsp + 'VersionFilter__c'))
});
} else {
if (!relationshipMap.get(verObj.get(nsp + 'SourceObject__c')).containsKey(verObj.get(nsp + 'InterfaceKey__c'))) {
relationshipMap.get(verObj.get(nsp + 'SourceObject__c')).put(verObj.get(nsp + 'InterfaceKey__c'), (IVersionAwareCatalogRelationship) new ChildProductFromDataStore(verObj.get(nsp + 'RelationshipName__c'), verObj.get(nsp + 'SourceObject__c'), verObj.get(nsp + 'InterfaceKey__c'), verObj.get(nsp + 'VersionFilter__c')));
}
}
}
}
outputs.put('relationshipMap', relationshipMap);
}
}
return true;
}
return false;
}
}