Konsolidierungsservice - Umfang, Gobal
Die Konsolidierungsservice API ist eine Skripteinbindung mit Methoden zum Zusammenführen und Deduplizieren komplexer, hierarchischer Geschäftsdaten (z. B. Verträge, Angebote, Einzelposten und Berechtigungen) mit anwenderdefinierter Logik.
Diese API gehört zum Namespace „sn_l2c_Core“ und erfordert die Administratorrolle und das Plugin „Lead-to-Cash-Core“ (com.snc.l2c_Core), um darauf zuzugreifen.
- Definieren, was zwei Datensätze für mehrere Attribute oder geschachtelte untergeordnete Entitäten gleich macht.
- Datensätze werden bedingt zusammengeführt, wenn bestimmte Kriterien erfüllt sind.
- Anwenden anwenderdefinierter Berechnungen während der Konsolidierung, z. B. Summieren von Mengen oder Berechnung von Datumsbereichen.
- Rekursives Deduplizieren (Konsolidieren) tief verschachtelter untergeordneter Strukturen.
- Dieselbe Konsolidierungslogik wird konsistent über Flows und Integrationen hinweg wiederverwendet.
Die Konsolidierungsservice Ist Teil der Lead-to-Cash-Core-Primitives-Engine und wird über aufgerufen Lead-to-Cash Core Produkt.
Bevor Sie beginnen
- Das Lead-to-Cash-Core-Plugin (
Com.snc.l2c_Core) Und installiertAdministratorRolle. - Eine anwenderdefinierte Skripteinbindung, die erweitert wird
sn_l2c_Core.LeadToCashServiceUnd gibt zurückKonsolidierungsserviceImplementierung vonGetConsolidationService(). Dadurch wird Ihre Konsolidierungslogik in die Pipeline verdrahtet, sodass sie zur Laufzeit von PrimitiveUtil gelöst wird. - Vertrautheit mit PrimitiveUtil, dem Einstiegspunkt zum Aufrufen von L2C-Core-Primitiven einschließlich Konsolidierung.
ConsolidationService ist Teil von Lead-to-Cash Core(l2c) Core Primitives Engine. Bevor Sie diese API implementieren, sollten Sie verstehen, wie sie in die breitere Aufrufpipeline passt.
PrimitiveUtil ist der Laufzeiteinstiegspunkt für alle primitiven L2C-Core-Vorgänge, einschließlich Konsolidierung. Anstatt aufzurufen Konsolidierungsservice Direkt verwendet PrimitiveUtil einen Erweiterungspunktmechanismus, um die richtige Serviceimplementierung zur Laufzeit zu lösen, unabhängig davon, ob sie von einem serverseitigen Skript oder einem primitiven Lead-to-Cash Flow Designer ausgelöst wird.
Um zu überweisen Konsolidierungsservice Logik in dieser Pipeline müssen Sie eine anwenderdefinierte Skripteinbindung erstellen, die sn_l2c_Core.LeadToCashService erweitert und zurückgibt Konsolidierungsservice Implementierung von GetConsolidationService() . PrimitiveUtil überprüft die Erweiterungspunktregistrierung für einen anwenderdefinierten LeadToCashService zur Laufzeit und ruft ihn auf, wenn einer gefunden wird. Wenn keine anwenderdefinierte Implementierung registriert ist, greift PrimitiveUtil automatisch auf die Basis „sn_l2c_Core.LeadToCashService“ zurück. Sie müssen diesen Fallback nie direkt in Ihrem Code instanziieren oder darauf verweisen.
ConsolidationServiceSNC API-Erweiterung und Workflow
Die KonsolidierungServiceSNC Das Basissystem der API ist standardmäßig deaktiviert, um sicherzustellen, dass unerwünschte Konsolidierung nicht unwissentlich angewendet wird. Um Konsolidierungsaktionen zu aktivieren, müssen Sie anwenderdefinierte Logik erstellen und optional Methoden überschreiben, die mit der Skripteinbindung „ConsolidationServiceSNC“ bereitgestellt werden.
- Erforderlich. Erstellen Sie eine anwenderdefinierte Skripteinbindung, die sn_l2c_Core.ConsolidationService erweitert.
- Erforderlich. Überschreiben EnableConsolidation() Um zurückzugeben Wahr . Mit dieser Kennzeichnung kann das System die Konsolidierung Ihres Service zulassen. Beispielskript:
var MyConsolidationService = Class.create(); MyConsolidationService.prototype = Object.extendsObject( sn_l2c_core.ConsolidationService, { enableConsolidation: function () { return true; // REQUIRED }, type: 'MyConsolidationService' }); - Abhängig von den Entitäten, die Sie steuern möchten, überschreiben (oder aktivieren) Sie optional eine beliebige Anzahl dieser zusätzlichen Methoden:Hinweis:Wenn Sie keine Methoden überschreiben,
Konsolidieren()Gibt die Ziel-JSON unverändert zurück, ohne dass eine Zusammenführung oder Konsolidierung durchgeführt wird.Methode Aktion CanConsolidateEntity (contextType) Wählen Sie aus, welche untergeordneten Arrays innerhalb eines Ziels konsolidiert werden sollen. CanMergeEntity (contextType) Führen Sie untergeordnete Quellelemente in einem Ziel zusammen. GetHashConfig() Geben Sie an, wie Entitäten gruppiert werden (Hashing). CanConsolidateJSONs(json1, json2) Entscheiden Sie, ob zwei JSONs zusammengeführt werden sollen. Überschriebene AttributeValues() Wenden Sie die anwenderdefinierte Geschäftslogik nach einer Zusammenführung an, bevor die endgültige konsolidierte JSON den Workflow durchläuft. GetPrimary(json1, json2) Entscheidet, welche der beiden Entitäten während der Konsolidierung als primärer Datensatz behandelt wird, dessen Attributwerte standardmäßig im zusammengeführten Ergebnis beibehalten werden. Vorverarbeiten() Vorhook für die Datenberechnung. PostHierarchyConsolidation() Post-Hook für endgültige Bereinigung. - Geben Sie Ihren anwenderdefinierten ConsolidationService aus sn_l2c_Core.LeadToCashService zurück.
LeadToCashServiceIst der Einstiegspunkt, der Ihre Konsolidierungslogik in die Lead-to-Cash-Pipeline überträgt, damit sie tatsächlich verwendet wird, wenn die Konsolidierung aufgerufen wird. Beispielskript:var MyLeadToCashService = Class.create(); MyLeadToCashService.prototype = Object.extendsObject( sn_l2c_core.LeadToCashService, { getConsolidationService: function () { return new MyConsolidationService(); }, type: 'MyLeadToCashService' }); - Rufen Sie Ihre Konsolidierung auf, indem Sie anrufen LeadToCashService.Konsolidieren() Entweder direkt über ein serverseitiges Skript oder indirekt über Lead-to-Cash Flow Designer-Primitive.
ConsolidationService – canConsolidateEntity(Zeichenfolge contextType)
Überschreibbare Methode zum Angeben, welche untergeordneten Entitätstypen in einer JSON konsolidiert werden können. Die Basisimplementierung gibt zurück Falsch Für alle Entitätstypen, wenn nicht überschrieben.
| Name | Typ | Beschreibung |
|---|---|---|
| contextType | Zeichenfolge | Der Schlüsselname der Array-Eigenschaft auf der Entitäts-JSON, die den untergeordneten Entitätstyp darstellt. Beispiele: „LineItems“ , „Merkmale“ , „CoveredProducts“ . |
| Typ | Beschreibung |
|---|---|
| Boolean | Kennzeichnung, die angibt, ob eine Konsolidierung für den ausgewählten Entitätstyp möglich ist. Gültige Werte:
Standardwert: false |
Das folgende Beispiel zeigt, wie Sie überschreiben CanConsolidateEntity() Dient zum Aktivieren der Konsolidierung für Einzelposten und abgedeckte Produkte.
var MyConsolidationService = Class.create();
MyConsolidationService.prototype = Object.extendsObject(sn_l2c_core.ConsolidationService, {
enableConsolidation: function() {
return true;
},
canConsolidateEntity: function(contextType) {
return contextType == "lineItems" || contextType == "coveredProducts";
},
type: 'MyConsolidationService'
});
var service = new MyConsolidationService();
gs.info("Can consolidate lineItems = " + service.canConsolidateEntity("lineItems"));
gs.info("Can consolidate characteristics = " + service.canConsolidateEntity("characteristics"));
Can consolidate lineItems = true
Can consolidate characteristics = falseConsolidationService – canConsolidateJSONs(Object json1, Object json2)
Überschreibbare Methode, die Bedingungen hinzufügt, um zu bestimmen, ob zwei Entitäts-JSONs mit demselben Hash konsolidiert werden können. Die Basisimplementierung gibt „falsch“ zurück, wenn sie nicht überschrieben wird.
| Name | Typ | Beschreibung |
|---|---|---|
| json1 | Objekt | Erste zu vergleichende Entitäts-JSON. Enthält sys_ID, Tabelle, Attribute und untergeordnete Arrays. |
| json2 | Objekt | Zweite zu vergleichende Entitäts-JSON. Enthält sys_ID, Tabelle, Attribute und untergeordnete Arrays. |
| Typ | Beschreibung |
|---|---|
| Boolean | Kennzeichnung, die angibt, ob die beiden JSONs zu einem konsolidiert werden können. Gültige Werte:
Standardwert: false |
Dieses Beispiel zeigt, wie Sie überschreiben CanConsolidateJSONs() Um die Konsolidierung von Einzelposten mit demselben Produktangebot zu ermöglichen.
var MyConsolidationService = Class.create();
MyConsolidationService.prototype = Object.extendsObject(sn_l2c_core.ConsolidationService, {
enableConsolidation: function() {
return true;
},
canConsolidateJSONs: function(json1, json2) {
if (json1.table == "sn_quote_mgmt_core_quote_line_item") {
// Fall back to empty string if product_offering has no value
var po1 = json1.attributes.product_offering ? json1.attributes.product_offering.value : "";
// Fall back to empty string if product_offering has no value
var po2 = json2.attributes.product_offering ? json2.attributes.product_offering.value : "";
// Consolidate only if both line items share the same product offering, and that value is not empty
return po1 == po2 && po1 != "";
}
return false;
},
type: 'MyConsolidationService'
});
falseConsolidationService – canMergeEntity(Zeichenfolge contextType)
Überschreibbare Methode zum Angeben, welche untergeordneten Entitätstypen aus Quell-JSON in die Ziel-JSON zusammengeführt werden können. Die Basisimplementierung gibt „falsch“ für alle Entitätstypen zurück, wenn sie nicht überschrieben wird.
| Name | Typ | Beschreibung |
|---|---|---|
| contextType | Zeichenfolge | Der Schlüsselname der Array-Eigenschaft auf der Entitäts-JSON, die den untergeordneten Entitätstyp darstellt. Beispiele: „LineItems“ , „Merkmale“ , „CoveredProducts“ . |
| Typ | Beschreibung |
|---|---|
| Boolean | Kennzeichnung, die angibt, ob Entitäten dieses Typs aus Quelle und Ziel zusammengeführt werden können. Gültige Werte:
Standardwert: false |
Das folgende Beispiel zeigt, wie Sie überschreiben CanMergeEntity() Dient zum Aktivieren der Zusammenführung für Einzelposten und abgedeckte Produkte.
var MyConsolidationService = Class.create();
MyConsolidationService.prototype = Object.extendsObject(sn_l2c_core.ConsolidationService, {
enableConsolidation: function() {
return true;
},
canMergeEntity: function(contextType) {
return contextType == "lineItems" || contextType == "coveredProducts";
},
type: 'MyConsolidationService'
});
var service = new MyConsolidationService();
gs.info("Can merge lineItems = " + service.canMergeEntity("lineItems"));
gs.info("Can merge characteristics = " + service.canMergeEntity("characteristics"));
Can merge lineItems = true
Can merge characteristics = falseConsolidationService – Consolidate(Object sourceJSON, Object targetJSON, Object additionalParams)
Führt die Quellentität JSON(s) in einer Zielentität-JSON zusammen und konsolidiert untergeordnete Entitäten innerhalb des zusammengeführten Ergebnisses basierend auf der Hash-basierten Gruppierungslogik und der paarweisen Konsolidierungslogik.
Die Konsolidieren() Die Methode fungiert als Haupteinstiegspunkt für die Konsolidierung von JSONs. Diese Methode verarbeitet sowohl einzelne JSON als auch mehrere JSONs über itemsArray, als Quelleingabe.
| Name | Typ | Beschreibung |
|---|---|---|
| additionalParams | Objekt | Optional. Zusätzliche Konfigurationsparameter, die an die Konsolidierungsmethoden übergeben werden. In der Instanz als gespeichert This.additionalParameter Und ist in allen überschreibbaren Methoden zugänglich. Kann alle anwenderdefinierten Schlüssel-Wert-Paare enthalten, die von der implementierenden Klasse benötigt werden. |
| Source-JSON | Objekt | Akzeptiert die JSON-Ausgabe von LeadtoCashCore – Umfang CreateInstance() Oder Effekt() Methode. Kann ein einzelnes Entitäts-JSON-Objekt oder ein JSON-Objekt sein, das ein Element-Array aus mehreren Entitäts-JSONs enthält. Wenn sourceJSON kein Element-Array enthält, behandelt die Methode es als einzelne Entität und schließt es automatisch in ein Array ein. Übergeben Sie null, oder lassen Sie diesen Parameter aus, wenn nur die Zielkonsolidierung erforderlich ist. |
| sourceJSON.items | Objekt-Array | Optional. Array von Entitäts-JSONs, die mit dem Ziel zusammengeführt werden sollen. Jedes Element stellt eine Entität mit ihren Attributen und untergeordneten Arrays dar. Wenn diese Eigenschaft vorhanden ist, itemsWird direkt als Liste der Quellentitäten verwendet. |
| sourceJSON.items.attributes | Objekt | Schlüssel-Wert-Paare, die die Entitätsattribute darstellen. Jedes Attribut ist ein Objekt mit einer Werteigenschaft.Beispiel: |
| sourceJSON.items.attributes.end_date | Zeichenfolge | Enddatum des Attributs. Format: GlideDate-Wert (z. B. 2026-01-01) |
| sourceJSON.items.attributes.product_offering | Zeichenfolge | Name des Produktangebots, das dem Attribut zugeordnet ist. Befindet sich in der Tabelle „Produktangebot“ [sn_prd_pm_product_offering]. |
| sourceJSON.items.attributes.quantity | Zeichenfolge | Anzahl der gekauften Produktartikel relativ zum Attribut. |
| sourceJSON.items.attributes.start_date | Zeichenfolge | Startdatum des Attributs. Format: GlideDate-Wert (z. B. 2026-01-01) |
| sourceJSON.items.characteristics | Objekt-Array | Optional. Array von Merkmalsentität-JSONs. |
| sourceJSON.items.characteristics.attributes | Objekt | Attribute, die dem Elementmerkmal zugeordnet sind. Jede untergeordnete Eigenschaft ist ein Schlüssel-Wert-Paar, das das Attribut darstellt. Das Attribut ist ein Objekt mit einer Werteigenschaft. |
| sourceJSON.items.characteristics.attributes.characteristic | Objekt | Schlüssel-Wert-Paar, das das dem Attribut zugeordnete Merkmal darstellt. characteristicIst ein Objekt mit einer Werteigenschaft. |
| sourceJSON.items.characteristics.attributes.value | Objekt | Schlüssel-Wert-Paar, das den Attributwert darstellt, der dem übergeordneten Merkmal zugeordnet ist. valueIst ein Objekt mit einer Werteigenschaft. |
| sourceJSON.items.characteristics.sys_id | Zeichenfolge | SYS_ID des Merkmals, das dem Element zugeordnet ist. |
| sourceJSON.items.characteristics.table | Zeichenfolge | Tabellenposition des Merkmals, das dem Element zugeordnet ist. |
| sourceJSON.items.coveredProducts | Objekt-Array | Optional. Array von abgedeckten Produktentitäts-JSONs. |
| sourceJSON.items.coveredProducts.sys_id | Objekt | SYS_ID des abgedeckten Produktdatensatzes. |
| sourceJSON.items.coveredProducts.table | Zeichenfolge | Tabellenname, der den abgedeckten Produktdatensatz enthält. Beispiel: sn_install_base_m2m_contract_sold_product . |
| sourceJSON.items.coveredProducts.attributes | Objekt | Attribute des abgedeckten Produkts. Felder können je nach Datensatz variieren. |
| sourceJSON.items.coveredProducts.attributes.sold_product | Objekt | Datensatz für verkauftes Produkt, der diesem abgedeckten Produkt zugeordnet ist. |
| sourceJSON.items.coveredProducts.attributes.contract | Objekt | Übergeordneter Vertragsdatensatz, unter dem die Abdeckung definiert ist. |
| sourceJSON.items.coveredProducts.attributes.service_contract_line | Objekt | Bestimmtes Servicevertragspositionselement, das mit diesem abgedeckten Produkt verknüpft ist. |
| sourceJSON.items.coveredProducts.attributes.entitlement | Objekt | Berechtigungsdatensatz, der die Abdeckungsbedingungen steuert. |
| sourceJSON.items.coveredProducts.attributes.install_base | Objekt | Installationsbasisdatensatz, der das bereitgestellte Asset darstellt. |
| sourceJSON.items.coveredProducts.attributes.covering_sold_product | Objekt | Verkauftes Produkt, das Abdeckung für diesen Eintrag bereitstellt. |
| sourceJSON.items.coveredProducts.attributes.date_added | Objekt | ISO 8601-Datumszeichenfolge, die angibt, wann das Produkt der Abdeckung hinzugefügt wurde. |
| sourceJSON.items.coveredProducts.attributes.date_removed | Objekt | ISO 8601-Datumszeichenfolge, die angibt, wann das Produkt aus der Abdeckung entfernt wurde. Null oder leer, wenn derzeit aktiv. |
| sourceJSON.items.lineItems | Objekt-Array | Optional. Array von JSONs der untergeordneten Positionselemententität. Jedes untergeordnete Element folgt derselben Struktur (sys_ID, Tabelle, Attribute und geschachtelte untergeordnete Elemente). |
| sourceJSON.items.lineItems.attributes | Objekt | Schlüssel-Wert-Paare, die die Entitätsattribute darstellen. Jedes Attribut ist ein Objekt mit einer Werteigenschaft. Folgt der gleichen Struktur wie sourceJSON.items.attributes. |
| sourceJSON.items.lineItems.characteristic | Objekt | Schlüssel-Wert-Paare, die das Merkmal der Einzelposition darstellen. Das Merkmal ist ein Objekt mit einer Werteigenschaft. Folgt der gleichen Struktur wie sourceJSON.items.characteristics. |
| sourceJSON.items.lineItems.coveredProducts | Array von abgedeckten Produktentitäten-JSONs, die dem Einzelposten zugeordnet sind. Folgt der gleichen Struktur wie sourceJSON.items.coveredProducts. |
|
| sourceJSON.items.lineItems.sys_id | SYS_ID der Entitäts-JSONs-Position. | |
| sourceJSON.items.lineItems.table | Tabellenspeicherort der Entitäts-JSONs-Position. | |
| sourceJSON.items.sys_id | Zeichenfolge | SYS_ID des Quellentitätsdatensatzes. |
| sourceJSON.items.table | Zeichenfolge | Tabellenname der Quellentität. Beispiel: sn_pss_core_service_contract_line . |
| TargetJSON | Objekt | Erforderlich. Zielentität-JSON, in der die Quell-JSON konsolidiert werden soll. Darf nicht null oder leer sein. Folgt derselben Objektstruktur wie die Quellentität ( sourceJSONParameter). |
| TargetJSON.attributes | Objekt | Schlüssel-Wert-Paare, die die Attribute der Zielentität darstellen. Jedes Attribut ist ein Objekt mit einer Werteigenschaft. Folgt derselben Objektstruktur wie die Quellattribute ( sourceJSON.items.attributesParameter).Beispiel: |
| TargetJSON.lineItems | Objekt-Array | Optional. Array von JSONs der untergeordneten Positionselemententität im Ziel. Folgt derselben Objektstruktur wie sourceJSON.items.lineItems. |
| TargetJSON.lineItems.attributes | Objekt | Schlüssel-Wert-Paare, die die Entitätsattribute darstellen. Jedes Attribut ist ein Objekt mit einer Werteigenschaft. Folgt der gleichen Struktur wie sourceJSON.items.attributes. |
| targetJSON.lineItems.characteristics | Objekt | Schlüssel-Wert-Paare, die das Merkmal der Einzelposition darstellen. Das Merkmal ist ein Objekt mit einer Werteigenschaft. Folgt der gleichen Struktur wie sourceJSON.items.characteristics. |
| TargetJSON.lineItems.coveredProducts | Array von abgedeckten Produktentitäten-JSONs, die dem Einzelposten zugeordnet sind. Folgt der gleichen Struktur wie sourceJSON.items.coveredProducts. |
|
| TargetJSON.lineItems.sys_ID | SYS_ID der Entitäts-JSONs-Position. | |
| TargetJSON.lineItems.table | Tabellenspeicherort der Entitäts-JSONs-Position. | |
| TargetJSON.sys_ID | Zeichenfolge | SYS_ID des Zielentitätsdatensatzes. |
| TargetJSON.table | Zeichenfolge | Tabellenname der Zielentität. Beispiel: sn_pss_core_service_contract |
| Typ | Beschreibung |
|---|---|
| Objekt | Konsolidiertes JSON-Ergebnis. Die zusammengeführte und konsolidierte Entität-JSON enthält alle Attribute aus den Ziel- und zusammengeführten/konsolidierten untergeordneten Arrays. Gibt targetJSON zurück, wenn die Konsolidierung deaktiviert oder sourceJSON ungültig ist. Gibt Null zurück, wenn targetJSON null oder leer ist. |
Das folgende Beispiel zeigt, wie die Konsolidierungsmethode über LeadToCashService aufgerufen wird. Konsolidiert eine Quellentitäts-JSON, die Einzelposten enthält, in einer Zielentitäts-JSON. Einzelposten mit demselben Produktangebot werden konsolidiert.
LeadToCashService Direkt aus Gründen der Einfachheit, aber in der Produktion sollte Ihre anwenderdefinierte Unterklasse über den Erweiterungspunkt registriert und über PrimitiveUtil aufgerufen werden.var sourceToTargetConfigID = "sn_cont_ent_wf_contract_to_quote";
var util = new sn_l2c_core.LeadToCashService(sourceToTargetConfigID);
var sourceJSON = {
"items": [{
"sys_id": "a1b2c3d4e5f6",
"table": "sn_pss_core_service_contract_line",
"attributes": {
"product_offering": {
"value": "po_001"
},
"quantity": {
"value": "5"
},
"start_date": {
"value": "2026-01-01"
},
"end_date": {
"value": "2026-12-31"
}
},
"characteristics": [{
"sys_id": "ch_001",
"table": "sn_pss_core_entitlement_characteristic",
"attributes": {
"characteristic": {
"value": "speed"
},
"value": {
"value": "100mbps"
}
}
}],
"coveredProducts": []
}]
};
var targetJSON = {
"sys_id": "t1a2b3c4d5e6",
"table": "sn_quote_mgmt_core_quote",
"attributes": {
"account": {
"value": "acct_001"
}
},
"lineItems": [{
"sys_id": "li_001",
"table": "sn_quote_mgmt_core_quote_line_item",
"attributes": {
"product_offering": {
"value": "po_001"
},
"quantity": {
"value": "3"
},
"start_date": {
"value": "2026-03-01"
},
"end_date": {
"value": "2026-11-30"
}
},
"characteristics": [{
"sys_id": "ch_002",
"table": "sn_pss_core_entitlement_characteristic",
"attributes": {
"characteristic": {
"value": "speed"
},
"value": {
"value": "100mbps"
}
}
}],
"coveredProducts": []
}]
};
var additionalParams = {};
var output = util.consolidate(sourceJSON, targetJSON, additionalParams);
gs.info("Consolidated output = " + JSON.stringify(output));
Ausgabe:
{
"sys_id": "t1a2b3c4d5e6",
"table": "sn_quote_mgmt_core_quote",
"attributes": {
"account": {
"value": "acct_001"
}
},
"lineItems": [
{
"sys_id": "li_001",
"table": "sn_quote_mgmt_core_quote_line_item",
"attributes": {
"product_offering": {
"value": "po_001"
},
"quantity": {
"value": "8"
},
"start_date": {
"value": "2026-01-01"
},
"end_date": {
"value": "2026-12-31"
}
},
"characteristics": [
{
"sys_id": "ch_002",
"table": "sn_pss_core_entitlement_characteristic",
"attributes": {
"characteristic": {
"value": "speed"
},
"value": {
"value": "100mbps"
}
}
}
],
"coveredProducts": []
}
]
}
Das folgende Beispiel zeigt, wie die Konsolidierungsmethode mit Null sourceJSON aufgerufen wird. In diesem Fall werden nur die untergeordneten Entitäten innerhalb der targetJSON konsolidiert. Dies ist nützlich, wenn das Ziel bereits doppelte Einzelposten enthält, die zusammengeführt werden müssen.
var sourceToTargetConfigID = "sn_cont_ent_wf_contract_to_quote";
var util = new sn_l2c_core.LeadToCashService(sourceToTargetConfigID);
var targetJSON = {
"sys_id": "t1a2b3c4d5e6",
"table": "sn_quote_mgmt_core_quote",
"attributes": {
"account": {
"value": "acct_001"
}
},
"lineItems": [{
"sys_id": "li_001",
"table": "sn_quote_mgmt_core_quote_line_item",
"attributes": {
"product_offering": {
"value": "po_001"
},
"quantity": {
"value": "5"
}
},
"characteristics": [],
"coveredProducts": []
},
{
"sys_id": "li_002",
"table": "sn_quote_mgmt_core_quote_line_item",
"attributes": {
"product_offering": {
"value": "po_001"
},
"quantity": {
"value": "3"
}
},
"characteristics": [],
"coveredProducts": []
}
]
};
var output = util.consolidate(null, targetJSON, {});
gs.info("Consolidated output = " + JSON.stringify(output));
Ausgabe:
{
"sys_id": "t1a2b3c4d5e6",
"table": "sn_quote_mgmt_core_quote",
"attributes": {
"account": {
"value": "acct_001"
}
},
"lineItems": [
{
"sys_id": "li_001",
"table": "sn_quote_mgmt_core_quote_line_item",
"attributes": {
"product_offering": {
"value": "po_001"
},
"quantity": {
"value": "8"
}
},
"characteristics": [],
"coveredProducts": []
}
]
}
ConsolidationService – enableConsolidation()
Überschreibbare Methode, die steuert, ob die Konsolidierung für diese Serviceinstanz aktiviert ist. Die Basisimplementierung gibt „falsch“ zurück, wenn sie nicht überschrieben wird. Implementierende Klassen müssen diese Methode überschreiben, um „wahr“ zurückzugeben, um die Konsolidierung zu aktivieren.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Boolean | Kennzeichnung, die angibt, ob der Service die Konsolidierung erfolgreich aktiviert hat. Gültige Werte:
Standardwert: false |
var MyConsolidationService = Class.create();
MyConsolidationService.prototype = Object.extendsObject(sn_l2c_core.ConsolidationService, {
enableConsolidation: function() {
return true;
},
type: 'MyConsolidationService'
});
var service = new MyConsolidationService();
var isEnabled = service.enableConsolidation();
gs.info("Consolidation enabled = " + isEnabled);
Consolidation enabled = trueConsolidationService – getHashConfig()
Überschreibbare Methode, die die Hash-Konfiguration für die Gruppierung von Entitäten vor der Konsolidierung zurückgibt. Die Konfiguration gibt an, welche Attribute und untergeordneten Kontexttypen einen MD5-Hash für jede Entität generieren. Entitäten mit demselben Hash werden für die paarweise Konsolidierung gruppiert. Die Basisimplementierung gibt ein leeres Objekt zurück, wenn es nicht überschrieben wird.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Objekt | Ein JSON-Objekt, das Tabellennamen ihrer Hash-Konfiguration zuordnet. Jeder Tabelleneintrag enthält:
Erwartetes Rückgabeformat: Wenn die Hash-Konfiguration für eine Tabelle ein leeres Objekt ist Wenn die Hash-Konfiguration für eine Tabelle nicht gefunden wird (nicht definiert oder null), wird ein Fehler protokolliert, und Entitäten werden unverändert zurückgegeben. Die Basisimplementierung gibt ein leeres Objekt zurück, wenn es nicht überschrieben wird. |
Das folgende Beispiel zeigt, wie Sie überschreiben GetHashConfig() Zum Definieren von Hash-Attributen für Vertragspositionen und Berechtigungsmerkmale.
var MyConsolidationService = Class.create();
MyConsolidationService.prototype = Object.extendsObject(sn_l2c_core.ConsolidationService, {
enableConsolidation: function() {
return true;
},
getHashConfig: function() {
return {
"sn_quote_mgmt_core_quote_line_item": {
"attributes": ["product_offering"],
"childContextTypes": ["sn_pss_core_entitlement_characteristic"]
},
"sn_pss_core_entitlement_characteristic": {
"attributes": ["characteristic", "option", "value"]
},
"sn_pss_core_covered_product": {
"attributes": ["sold_product"]
}
};
},
type: 'MyConsolidationService'
});
var service = new MyConsolidationService();
var config = service.getHashConfig();
gs.info("Hash config = " + JSON.stringify(config));
Hash config = {
"sn_quote_mgmt_core_quote_line_item": {
"attributes": ["product_offering"],
"childContextTypes": ["sn_pss_core_entitlement_characteristic"]
},
"sn_pss_core_entitlement_characteristic": {
"attributes": ["characteristic", "option", "value"]
},
"sn_pss_core_covered_product": {
"attributes": ["sold_product"]
}
}ConsolidationService – getPrimary(Objekt json1, Objekt json2)
Überschreibbare Methode zum Bestimmen der primären JSON, wenn zwei JSONs konsolidiert werden. Für nicht überschriebene Attribute werden die Attributwerte der primären JSON für das konsolidierte Ergebnis verwendet. Die Basisimplementierung gibt JSON 1 zurück, wenn sie nicht überschrieben wird.
| Name | Typ | Beschreibung |
|---|---|---|
| json1 | Objekt | Erste Entitäts-JSON, die konsolidiert werden soll. Enthält sys_ID, Tabelle, Attribute und untergeordnete Arrays. |
| json2 | Objekt | Zweite Entitäts-JSON, die konsolidiert werden soll. Enthält sys_ID, Tabelle, Attribute und untergeordnete Arrays. |
| Typ | Beschreibung |
|---|---|
| Objekt | Die ausgewählte primäre JSON. Die Attribute dieses JSON werden zu den Standardwerten im konsolidierten Ergebnis. Muss entweder json1 oder json2 sein. Die Basisimplementierung gibt JSON 1 zurück, wenn sie nicht überschrieben wird. |
Das folgende Beispiel zeigt, wie Sie überschreiben GetPrimär() Dient zur Auswahl der Entität mit dem früheren Startdatum als primär.
// Custom ConsolidationService with getPrimary override
var MyConsolidationService = Class.create();
MyConsolidationService.prototype = Object.extendsObject(sn_l2c_core.ConsolidationService, {
enableConsolidation: function() {
return true;
},
getPrimary: function(json1, json2) {
var date1 = json1.attributes.start_date ? json1.attributes.start_date.value : "";
var date2 = json2.attributes.start_date ? json2.attributes.start_date.value : "";
return date1 <= date2 ? json1 : json2;
},
type: 'MyConsolidationService'
});
// json1 — earlier start date
var json1 = {
sys_id: { value: "a1b2c3d4e5f6" },
table: "sn_pss_core_service_contract_line",
attributes: {
product_offering: { value: "po_abc123" },
quantity: { value: "5" },
start_date: { value: "2024-01-01" }
}
};
// json2 — later start date
var json2 = {
sys_id: { value: "f6e5d4c3b2a1" },
table: "sn_pss_core_service_contract_line",
attributes: {
product_offering: { value: "po_abc123" },
quantity: { value: "3" },
start_date: { value: "2024-06-01" }
}
};
var result = new MyConsolidationService().getPrimary(json1, json2);
Ausgabe:
// result === json1 → true
// "2024-01-01" <= "2024-06-01" is true, so json1 (earlier start date) is returned
{
sys_id: { value: "a1b2c3d4e5f6" },
table: "sn_pss_core_service_contract_line",
attributes: {
product_offering: { value: "po_abc123" },
quantity: { value: "5" },
start_date: { value: "2024-01-01" }
}
}
ConsolidationService – overrideAttributeValues(Object json1, Object json2, Object solidatedJSON)
Überschreibbare Methode, die aufgerufen wird, nachdem zwei JSONs konsolidiert wurden, zum Aktualisieren von Attributen in der konsolidierten JSON. Die Basisimplementierung ist ein No-OP, wenn sie nicht überschrieben wird.
Häufige Anwendungsfälle umfassen die Mengensummierung, die Berechnung des Datumsbereichs (frühester Start/spätestes Ende), die Neuberechnung des Begriffs und die Nachverfolgung von „Consolidated_from“.
| Name | Typ | Beschreibung |
|---|---|---|
| json1 | Objekt | Erste Entitäts-JSON, die konsolidiert wurde. Dies ist die primäre JSON (wie bestimmt von GetPrimär() ). Enthält ursprüngliche Attribute vor der Konsolidierung. |
| json2 | Objekt | Zweite Entitäts-JSON, die konsolidiert wurde. Dies ist die sekundäre JSON. Enthält ursprüngliche Attribute vor der Konsolidierung. |
| KonsolidiertJSON | Objekt | Die Ergebnis-JSON nach dem Zusammenführen. Ändern Sie die Attribute dieses Objekts direkt, um anwenderdefinierte Logik anzuwenden. Enthält anfänglich eine Tiefkopie der Attribute der primären JSON mit zusammengeführten untergeordneten Arrays. |
| Typ | Beschreibung |
|---|---|
| Ungültig | Diese Methode gibt keinen Wert zurück. Ändern Sie consolidatedJSONObjekt direkt. |
var MyConsolidationService = Class.create();
MyConsolidationService.prototype = Object.extendsObject(sn_l2c_core.ConsolidationService, {
enableConsolidation: function() {
return true;
},
overrideAttributeValues: function(json1, json2, consolidatedJSON) {
// Sum quantities from both entities; fall back to 0 if quantity has no value
var qty1 = parseInt(json1.attributes.quantity ? json1.attributes.quantity.value : "0");
var qty2 = parseInt(json2.attributes.quantity ? json2.attributes.quantity.value : "0");
consolidatedJSON.attributes.quantity = {
"value": String(qty1 + qty2)
};
// Use the earliest start date; fall back to empty string if start_date has no value
var start1 = json1.attributes.start_date ? json1.attributes.start_date.value : "";
var start2 = json2.attributes.start_date ? json2.attributes.start_date.value : "";
consolidatedJSON.attributes.start_date = {
"value": start1 <= start2 ? start1 : start2
};
// Use the latest end date; fall back to empty string if end_date has no value
var end1 = json1.attributes.end_date ? json1.attributes.end_date.value : "";
var end2 = json2.attributes.end_date ? json2.attributes.end_date.value : "";
consolidatedJSON.attributes.end_date = {
"value": end1 >= end2 ? end1 : end2
};
// Record the sys_ids of the source entities that were merged into this consolidated result
var consolidatedFrom = [];
if (json1.sys_id) consolidatedFrom.push(json1.sys_id);
if (json2.sys_id) consolidatedFrom.push(json2.sys_id);
consolidatedJSON.attributes.consolidated_from = {
"value": consolidatedFrom.join(",")
};
},
type: 'MyConsolidationService'
});ConsolidationService – postHierarchyConsolidation(Object solidatedJSON)
Überschreibbare Methode, die endgültige Änderungen an der konsolidierten JSON anwendet, nachdem die Hierarchiekonsolidierung abgeschlossen ist. Die Basisimplementierung ist ein No-OP, wenn sie nicht überschrieben wird.
Das System ruft diese Methode für das endgültige konsolidierte Ergebnis in auf Konsolidieren() Methode und auch für jede Ergebnisentität innerhalb ProcessHashGroup() .
| Name | Typ | Beschreibung |
|---|---|---|
| KonsolidiertJSON | Objekt | Vollständig verarbeitetes konsolidiertes JSON-Objekt, nachdem alle Zusammenführungen und Konsolidierungen abgeschlossen sind. Ändern Sie dieses Objekt direkt, um endgültige Transformationen anzuwenden. |
| Typ | Beschreibung |
|---|---|
| Ungültig | Diese Methode gibt keinen Wert zurück. Ändern Sie consolidatedJSONObjekt direkt. |
Das folgende Beispiel zeigt, wie Sie überschreiben PostHierarchyConsolidation() Zum Festlegen einer Kennzeichnung für die konsolidierte Entität.
var MyConsolidationService = Class.create();
MyConsolidationService.prototype = Object.extendsObject(sn_l2c_core.ConsolidationService, {
enableConsolidation: function() {
return true;
},
postHierarchyConsolidation: function(consolidatedJSON) {
if (consolidatedJSON && consolidatedJSON.attributes) {
consolidatedJSON.attributes.is_consolidated = {
"value": "true"
};
}
},
type: 'MyConsolidationService'
});
ConsolidationService – vorverarbeiten (Object sourceJSON, Object targetJSON, Object additionalParams)
Überschreibbare Methode, die vor der Zusammenführung und Konsolidierung zum Ausführen anwenderdefinierter Vorverarbeitungsaufgaben wie Massenzuordnungserstellung oder Zwischenspeicherung von Suchdaten aufgerufen wird.
Speichern Sie berechnete Ergebnisse auf Dies Objekt (z. B. This.targetHeaderId = „sample_sys_ID“ ). Diese Methode gibt keinen Wert zurück.
| Name | Typ | Beschreibung |
|---|---|---|
| Quellziel | Objekt | Ausgabe der zu konsolidierenden sourceJSON. Akzeptiert die JSON-Ausgabe von LeadtoCashCore – Umfang CreateInstance() Oder Effekt() Methode. Kann ein einzelnes Entitäts-JSON-Objekt oder ein JSON-Objekt sein, das ein Element-Array aus mehreren Entitäts-JSONs enthält. Kann null oder leer sein. |
| TargetJSON | Objekt | Erforderlich. Zielentitäts-JSON für Konsolidierung. |
| additionalParams | Objekt | Optional. Zusätzliche Daten, die vom Anrufer übergeben wurden. |
| Typ | Beschreibung |
|---|---|
| Ungültig | Diese Methode gibt keinen Wert zurück. Speichern Sie berechnete Ergebnisse auf Dies Objekt zur Verwendung in nachfolgenden Konsolidierungsschritten. |
Das folgende Beispiel zeigt, wie Sie überschreiben Vorverarbeiten() Dient zum Cachen einer Ziel-Header-ID zur Verwendung während der Konsolidierung.
var MyConsolidationService = Class.create();
MyConsolidationService.prototype = Object.extendsObject(sn_l2c_core.ConsolidationService, {
enableConsolidation: function() {
return true;
},
preProcess: function(sourceJSON, targetJSON, additionalParams) {
// Cache the target entity's sys_id for use in subsequent consolidation steps
this.targetHeaderId = targetJSON.sys_id;
// If sourceJSON and sourceJSON.items are both present, store the item count; otherwise default to 0
this.sourceCount = sourceJSON && sourceJSON.items ? sourceJSON.items.length : 0;
},
type: 'MyConsolidationService'
});