Loading
Quote Creation Issue - Non-USD CurrenciesRead More
Important Advisory: iOS Update Impacting CG Mobile ApplicationRead More
Get Started with Communications, Media, and Energy & Utilities (CME)...
VersionAwareCatalogConfigLoader:loadConfig Method

VersionAwareCatalogConfigLoader:loadConfig Method

Loads the configuration for the VersionAwareCatalog service, defined in the Version Aware Object Relationship metadata (VersionAwareObjectRelationship__mdt).

Interface

LoadConfiguration Interface

Class

VersionAwareCatalogConfigLoader Class

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

Input Data

No input data is required.

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;
  }
}
 
Loading
Salesforce Help | Article