Konsolidierungsservice - Umfang, Gobal

  • Freigeben Version: Australia
  • Aktualisiert 1. April 2026
  • 20 Minuten Lesedauer
  • 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.

    Verwenden Sie Konsolidierungsservice API, wenn Sie eine genaue Kontrolle darüber benötigen, wie Datensätze kombiniert werden. Diese API bietet komplexe Funktionen, die auf der Anwenderoberfläche nicht verfügbar sind, z. B.:
    • 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

    Stellen Sie vor der Implementierung von ConsolidationService sicher, dass Sie über Folgendes verfügen:
    • Das Lead-to-Cash-Core-Plugin ( Com.snc.l2c_Core ) Und installiert Administrator Rolle.
    • Eine anwenderdefinierte Skripteinbindung, die erweitert wird sn_l2c_Core.LeadToCashService Und gibt zurück Konsolidierungsservice Implementierung von GetConsolidationService() . 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.

    Um zu erweitern und zu verwenden KonsolidierungServiceSNC API:
    1. Erforderlich. Erstellen Sie eine anwenderdefinierte Skripteinbindung, die sn_l2c_Core.ConsolidationService erweitert.
    2. 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'
      });
    3. 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.
    4. Geben Sie Ihren anwenderdefinierten ConsolidationService aus sn_l2c_Core.LeadToCashService zurück. LeadToCashService Ist 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'
      });
    5. 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.

    Tabelle : 1. Parameter
    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“ .
    Tabelle : 2. Rückgaben
    Typ Beschreibung
    Boolean Kennzeichnung, die angibt, ob eine Konsolidierung für den ausgewählten Entitätstyp möglich ist.
    Gültige Werte:
    • Wahr: Gruppiert Entitäten dieses Typs nach Hash und konsolidiert sie.
    • Falsch: Konsolidiert keine Entitäten dieses Typs.

    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"));
    Ausgabe:
    Can consolidate lineItems = true
    Can consolidate characteristics = false

    ConsolidationService – 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.

    Tabelle : 3. Parameter
    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.
    Tabelle : 4. Rückgaben
    Typ Beschreibung
    Boolean Kennzeichnung, die angibt, ob die beiden JSONs zu einem konsolidiert werden können.
    Gültige Werte:
    • Wahr: Beide JSONs können über zusammengeführt werden KonsolidierungJSONs() .
    • Falsch: Beide JSONs bleiben getrennt.

    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'
    
    });
    Ausgabe:
    false

    ConsolidationService – 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.

    Tabelle : 5. Parameter
    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“ .
    Tabelle : 6. Rückgaben
    Typ Beschreibung
    Boolean Kennzeichnung, die angibt, ob Entitäten dieses Typs aus Quelle und Ziel zusammengeführt werden können.
    Gültige Werte:
    • Wahr: Das System verkettet Quell-Arrays dieses Typs im entsprechenden Array des Ziels.
    • Falsch: Das System führt Quell-Arrays dieses Typs nicht mit dem Ziel zusammen.

    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"));
    Ausgabe:
    Can merge lineItems = true
    Can merge characteristics = false

    ConsolidationService – 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.

    Tabelle : 7. Parameter
    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": [Array]
    }
    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.
    "items": [
      {
      "attributes": {Object},
      "characteristics": [Array],
      "coveredProducts": [Array],
      "sys_id": "String",
      "table": "String"
      }
    ]
    sourceJSON.items.attributes Objekt Schlüssel-Wert-Paare, die die Entitätsattribute darstellen. Jedes Attribut ist ein Objekt mit einer Werteigenschaft.
    "attributes": {
      "end_date": {"value": "String"},
      "product_offering": {"value": "String"},
      "quantity": {"value": "String"},
      "start_date": {"value": "String"}
    }

    Beispiel: { "Product_Offering": { "Value": "Xr48..." }, "Menge": { "Wert": "5" }

    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.
    "characteristics": [
      {
        "attributes": {Object},
        "sys_id": "String",
        "table": "String"
       }
    ]
    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.
    "attributes": {
       "characteristic": {Object},
       "value": {Object}
    }
    sourceJSON.items.characteristics.attributes.characteristic Objekt Schlüssel-Wert-Paar, das das dem Attribut zugeordnete Merkmal darstellt. characteristicIst ein Objekt mit einer Werteigenschaft.
    "characteristic": {
        "value": "String"
    }
    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.
    "value": {
       "value": "String"
    }
    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.
    coveredProducts: [
     {
      "sys_id": {Object},
      "table": "String",
      "attributes": {Object}
     }
    ]
    sourceJSON.items.coveredProducts.sys_id Objekt SYS_ID des abgedeckten Produktdatensatzes.
    sys_id: { 
      value: "String"
    }
    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.
    attributes: {
                sold_product: { value: "String" },
                contract: { value: "String" },
                service_contract_line: { value: "String" },
                entitlement: { value: "String" },
                install_base: { value: "String" },
                covering_sold_product: { value: "String" },
                date_added: { value: "String" },
                date_removed: { value: "String" }
      }
    sourceJSON.items.coveredProducts.attributes.sold_product Objekt Datensatz für verkauftes Produkt, der diesem abgedeckten Produkt zugeordnet ist.
    "sold_product": {
      "value": "String"
    }
    sourceJSON.items.coveredProducts.attributes.contract Objekt Übergeordneter Vertragsdatensatz, unter dem die Abdeckung definiert ist.
    "contract": {
      "value": "String"
    }
    sourceJSON.items.coveredProducts.attributes.service_contract_line Objekt Bestimmtes Servicevertragspositionselement, das mit diesem abgedeckten Produkt verknüpft ist.
    "service_contract_line": {
      "value": "String"
    }
    sourceJSON.items.coveredProducts.attributes.entitlement Objekt Berechtigungsdatensatz, der die Abdeckungsbedingungen steuert.
    "entitlement": {
      "value": "String"
    }
    sourceJSON.items.coveredProducts.attributes.install_base Objekt Installationsbasisdatensatz, der das bereitgestellte Asset darstellt.
    "install_base": {
      "value": "String"
    }
    sourceJSON.items.coveredProducts.attributes.covering_sold_product Objekt Verkauftes Produkt, das Abdeckung für diesen Eintrag bereitstellt.
    "covering_sold_product": {
      "value": "String"
    }
    sourceJSON.items.coveredProducts.attributes.date_added Objekt ISO 8601-Datumszeichenfolge, die angibt, wann das Produkt der Abdeckung hinzugefügt wurde.
    "date_added": {
      "value": "String"
    }
    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.
    "date_removed": {
      "value": "String"
    }
    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).
    "lineItems": [
     {
       "attributes": {Object},
       "characteristics": [Array],
       "coveredProducts": [Array],
       "sys_id": "String",
       "table": "String"
      }
    ]
    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.
    "attributes": {
      "characteristic": {Object},
      "value": {Object}
    }
    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.
    "characteristics": [{
       "attributes": {Object},
       "sys_id": "String",
       "table": "String"
    }]
    sourceJSON.items.lineItems.coveredProducts Array von abgedeckten Produktentitäten-JSONs, die dem Einzelposten zugeordnet sind. Folgt der gleichen Struktur wie sourceJSON.items.coveredProducts.
    coveredProducts: [
     {
      "sys_id": {Object},
      "table": "String",
      "attributes": {Object}
     }
    ]
    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": {Object},
      "entitlement_characteristic": {Object},
      "sys_id": "String",
      "table": "String,
      "line_item": {Object}
      }
    }
    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).
    "attributes": {
      "end_date": {"value": "String"},
      "product_offering": {"value": "String"},
      "quantity": {"value": "String"},
      "start_date": {"value": "String"}
    }

    Beispiel: { "Product_Offering": { "Value": "Xr48..." }, "Menge": { "Wert": "5" }

    TargetJSON.lineItems Objekt-Array Optional. Array von JSONs der untergeordneten Positionselemententität im Ziel. Folgt derselben Objektstruktur wie sourceJSON.items.lineItems.
    "lineItems": {
        "sys_id": "String",
        "table": "String",
        "attributes": {Object},
        "characteristics": {Object}
      }
    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.
    "attributes": {
      "characteristic": {Object},
      "value": {Object}
    }
    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.
    "characteristic": {
      "value": "String"
    }
    TargetJSON.lineItems.coveredProducts Array von abgedeckten Produktentitäten-JSONs, die dem Einzelposten zugeordnet sind. Folgt der gleichen Struktur wie sourceJSON.items.coveredProducts.
    "coveredProducts": [Array]
    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
    Tabelle : 8. Rückgaben
    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.

    Dieses Beispiel instanziiert LeadToCashService Direkt aus Gründen der Einfachheit, aber in der Produktion sollte Ihre anwenderdefinierte Unterklasse über den Erweiterungspunkt registriert und über PrimitiveUtil aufgerufen werden.
    Hinweis:
    MyConsolidationService ist eine anwenderdefinierte Skripteinbindung, die durch Erweiterung von ConsolidationService erstellt werden muss. Die Logik für die überschreibbaren Methoden ( EnableConsolidation(), getHashConfig(), canConsolidateEntity(), canMergeEntity(), canConsolidateJSONs(), überschriebene AttributeValues() ) Muss in „MyConsolidationService“ hinzugefügt werden. „MyLeadToCashService“ erweitert „LeadToCashService“ und gibt „MyConsolidationService“ von zurück GetConsolidationService() .
    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.

    Tabelle : 9. Parameter
    Name Typ Beschreibung
    Keine
    Tabelle : 10. Rückgaben
    Typ Beschreibung
    Boolean Kennzeichnung, die angibt, ob der Service die Konsolidierung erfolgreich aktiviert hat.
    Gültige Werte:
    • Wahr: Service ist für die Konsolidierung aktiviert.
    • Falsch: Service ist nicht für die Konsolidierung aktiviert.

    Standardwert: false

    Das folgende Beispiel zeigt, wie Sie überschreiben EnableConsolidation() In einem anwenderdefinierten ConsolidationService.
    Hinweis:
    MyConsolidationService ist eine anwenderdefinierte Skripteinbindung, die durch Erweiterung von ConsolidationService erstellt werden muss.
    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);
    Ausgabe:
    Consolidation enabled = true

    ConsolidationService – 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.

    Tabelle : 11. Parameter
    Name Typ Beschreibung
    Keine
    Tabelle : 12. Rückgaben
    Typ Beschreibung
    Objekt Ein JSON-Objekt, das Tabellennamen ihrer Hash-Konfiguration zuordnet. Jeder Tabelleneintrag enthält:
    1. Attribute (Array von Zeichenfolgen): Attributfeldnamen, deren Werte im Hash enthalten sind.
    2. ChildContextTypes (Array von Zeichenfolgen): Optional. Namen der untergeordneten Tabelle, deren Hash-Werte rekursiv im übergeordneten Hash enthalten sind.

    Erwartetes Rückgabeformat: { "Table_Name": { "Attribute": ["field1", "field2"], "childContextTypes": ["Child_table_Name"] }

    Wenn die Hash-Konfiguration für eine Tabelle ein leeres Objekt ist {} , Alle Entitäten dieses Typs werden in einer einzigen Entität konsolidiert.

    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));
    Ausgabe:
    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.

    Tabelle : 13. Parameter
    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.
    Tabelle : 14. Rückgaben
    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“.

    Tabelle : 15. Parameter
    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.
    Tabelle : 16. Rückgaben
    Typ Beschreibung
    Ungültig Diese Methode gibt keinen Wert zurück. Ändern Sie consolidatedJSONObjekt direkt.
    Das folgende Beispiel zeigt, wie Sie überschreiben Überschriebene AttributeValues() Um Mengen zu summieren und Datumsbereiche bei der Konsolidierung von Einzelposten zu berechnen.
    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() .

    Tabelle : 17. Parameter
    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.
    Tabelle : 18. Rückgaben
    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.

    Tabelle : 19. Parameter
    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.
    Tabelle : 20. Rückgaben
    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'
    });