ConsolidationService - スコープ指定、Gobal

  • リリースバージョン: Australia
  • 更新日 2026年04月01日
  • 所要時間:49分
  • ConsolidationService API は、カスタムロジックを使用して複雑な階層ビジネスデータ (契約、見積、品目、エンタイトルメントなど) を結合および重複排除するためのメソッドを含むスクリプトインクルードです。

    この API は sn_l2c_core 名前空間に属しており、アクセスするには admin ロールと Lead to Cash Core (com.snc.l2c_core) プラグインが必要です。

    レコードの結合方法を正確に制御する必要がある場合は、 ConsolidationService API を使用します。この API は、次のような、UI では利用できない複雑な機能を提供します。
    • 複数の属性またはネストされた子エンティティ間で 2 つのレコードを同じにする理由を定義します。
    • 特定の条件が満たされたときに条件付きでレコードを結合します。
    • 数量の合計や日付範囲の計算など、連結中にカスタム計算を適用します。
    • 深くネストされた子構造を再帰的に重複排除 (統合) します。
    • フローと統合全体で同じ統合ロジックを一貫して再利用する。

    ConsolidationService は Lead to Cash Core プリミティブエンジンの一部であり、Lead to Cash コア 製品からアクセスします。

    事前準備

    ConsolidationService を実装する前に、次のことを確認してください。
    • インストールされている Lead to Cash Core プラグイン (com.snc.l2c_core) と admin ロール。
    • sn_l2c_coreを拡張するカスタムスクリプトインクルード。LeadToCashService を呼び出しgetConsolidationService() から ConsolidationService 実装を返します。これにより、統合ロジックがパイプラインに配線され、実行時に PrimitiveUtil によって解決されます。
    • 統合を含む L2C Core プリミティブを呼び出すためのエントリーポイントである PrimitiveUtil に精通していること。

    ConsolidationService は、 Lead to Cash コア (l2c) Core プリミティブエンジンの一部です。この API を実装する前に、この API がより広範な発動パイプラインにどのように適合するかを理解する必要があります。

    PrimitiveUtil は、統合を含むすべての L2C Core プリミティブ操作のランタイムエントリーポイントです。PrimitiveUtil は、 ConsolidationService を直接呼び出すのではなく、拡張ポイント メカニズムを使用して、サーバー側スクリプトからトリガーされるか、Lead-to-Cash Flow Designer プリミティブからトリガーされるかにかかわらず、実行時に正しいサービス実装を解決します。

    ConsolidationService ロジックをこのパイプラインに配線するには、sn_l2c_coreを拡張するカスタムスクリプトインクルードを作成する必要があります。LeadToCashService を呼び出し、getConsolidationService() から ConsolidationService 実装を返します。PrimitiveUtil は、実行時に拡張ポイントレジストリでカスタム LeadToCashService をチェックし、見つかった場合は呼び出します。カスタム実装が登録されていない場合、PrimitiveUtil はベースsn_l2c_coreにフォールバックします。自動的に LeadToCashService です。このフォールバックをコードで直接インスタンス化したり参照したりする必要はありません。

    ConsolidationServiceSNC API 拡張とワークフロー

    ConsolidationServiceSNC API のベースシステムは、不要な連結が無意識のうちに適用されないように、デフォルトでは無効になっています。統合アクションを有効にするには、カスタムロジックを作成し、オプションで ConsolidationServiceSNC スクリプトインクルードで提供されているメソッドを上書きする必要があります。

    ConsolidationServiceSNC API を拡張して使用するには:
    1. 必須。sn_l2c_coreを拡張するカスタムスクリプトインクルードを作成します。ConsolidationService。
    2. 必須。enableConsolidation() をオーバーライドして true を返します。このフラグにより、サービスでの統合を許可できます。スクリプト例:
      var MyConsolidationService = Class.create();
      MyConsolidationService.prototype = Object.extendsObject(
          sn_l2c_core.ConsolidationService,
      {
          enableConsolidation: function () {
              return true; // REQUIRED
          },
      
          type: 'MyConsolidationService'
      });
    3. 制御するエンティティに応じて、オプションで次の追加メソッドを任意の数で上書き (または有効) します。
      注:
      どのメソッドも上書きしない場合、 consolidate() は マージや統合を行わずにターゲット JSON をそのまま返します。
      メソッド アクション
      canConsolidateEntity(contextType) ターゲット内で統合する子アレイを選択します。
      canMergeEntity(contextType) ソースの子をターゲットに結合します。
      getHashConfig() エンティティをグループ化する方法 (ハッシュ) を指定します。
      canConsolidateJSONs(json1, json2) 2 つの JSON を結合するかどうかを決定します。
      overrideAttributeValues() 結合後、最終的な統合 JSON がワークフローを続行する前に、カスタムビジネスロジックを適用します。
      getPrimary(json1, json2) 連結中にプライマリレコードとして扱われる 2 つのエンティティのうちのどれを決定します。その属性値は、結合結果でデフォルトで保持されます。
      preProcess() データを計算するためのプリフック。
      postHierarchyConsolidation() 最終クリーンアップのポストフック。
    4. sn_l2c_coreからカスタム ConsolidationService を返します。LeadToCashService。LeadToCashService は、統合ロジックを Lead-to-Cash パイプラインに接続するエントリーポイントであり、統合が呼び出されるたびに実際に使用されます。スクリプト例:
      var MyLeadToCashService = Class.create();
      MyLeadToCashService.prototype = Object.extendsObject(
          sn_l2c_core.LeadToCashService,
      {
          getConsolidationService: function () {
              return new MyConsolidationService();
          },
      
          type: 'MyLeadToCashService'
      });
    5. サーバー側スクリプトから直接、または Lead-to-Cash Flow Designer プリミティブを介して間接的に LeadToCashService.consolidate() を呼び出して、連結を呼び出します。

    ConsolidationService:canConsolidateEntity(文字列 contextType)

    JSON 内で統合できる子エンティティタイプを指定するための上書き可能なメソッド。基本実装では、上書きされない場合、すべてのエンティティタイプに対して false が返されます。

    表 : 1. パラメーター
    名前 タイプ 説明
    contextType 文字列 子エンティティタイプを表すエンティティ JSON のアレイプロパティのキー名。例:「lineItems」、「characteristics」、「coveredProducts」。
    表 : 2. 返される内容
    タイプ 説明
    ブーリアン 選択したエンティティタイプで連結が可能かどうかを示すフラグ。
    有効な値:
    • true:このタイプのエンティティをハッシュでグループ化し、統合します。
    • false:このタイプのエンティティを統合しません。

    デフォルト値:false

    次の例は、 canConsolidateEntity() を上書きして、品目と対象製品の連結を有効にする方法を示しています。

    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 = false

    ConsolidationService:canConsolidateJSONs(オブジェクト json1, オブジェクト json2)

    同じハッシュを持つ 2 つのエンティティ JSON を統合できるかどうかを判断するための条件を追加する上書き可能なメソッド。基本実装は、上書きされない場合に false を返します。

    表 : 3. パラメーター
    名前 タイプ 説明
    json1 オブジェクト 比較する最初のエンティティ JSON。sys_id、テーブル、属性、および子アレイが含まれます。
    json2 オブジェクト 比較する 2 番目のエンティティ JSON。sys_id、テーブル、属性、および子アレイが含まれます。
    表 : 4. 返される内容
    タイプ 説明
    ブーリアン 2 つの JSON を 1 つに統合できるかどうかを示すフラグ。
    有効な値:
    • true: 両方の JSON は consolidateJSONs() を介してマージできます。
    • false:両方の JSON は分離されたままになります。

    デフォルト値:false

    この例では、 canConsolidateJSONs() を上書きして、同じ製品オファリングを持つ品目の連結を許可する方法を示します。

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

    ConsolidationService:canMergeEntity(文字列 contextType)

    ソース JSON からターゲット JSON に結合できる子エンティティタイプを指定するための上書き可能なメソッド。基本実装では、上書きされない場合、すべてのエンティティタイプに対して false が返されます。

    表 : 5. パラメーター
    名前 タイプ 説明
    contextType 文字列 子エンティティタイプを表すエンティティ JSON のアレイプロパティのキー名。例:「lineItems」、「characteristics」、「coveredProducts」。
    表 : 6. 返される内容
    タイプ 説明
    ブーリアン このタイプのエンティティをソースからターゲットに結合できるかどうかを示すフラグ。
    有効な値:
    • true:システムは、このタイプのソースアレイをターゲットの対応するアレイに連結します。
    • false:システムはこのタイプのソースアレイをターゲットに結合しません。

    デフォルト値:false

    次の例は、 canMergeEntity() を上書きして、品目と対象製品の結合を有効にする方法を示しています。

    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 = false

    ConsolidationService - consolidate(オブジェクト sourceJSON, オブジェクト targetJSON, オブジェクト additionalParams)

    ソースエンティティ JSON をターゲットエンティティ JSON に結合し、ハッシュベースのグループ化とペアワイズ統合ロジックに基づいて、結合された結果内の子エンティティを統合します。

    consolidate() メソッドは、JSON を統合するための主要なエントリーポイントとして機能します。このメソッドは、 items アレイを介して、単一の JSON と複数の JSON の両方をソース入力として処理します。

    表 : 7. パラメーター
    名前 タイプ 説明
    additionalParams オブジェクト オプション。統合メソッドに渡される追加の設定パラメーター。このインスタンスに this.additionalParams として格納され、すべての上書き可能なメソッドでアクセスできます。実装クラスが必要とするカスタムのキーと値のペアを含めることができます。
    ソース JSON オブジェクト LeadtoCashCore - スコープ対象 createInstance() メソッドまたは effect() メソッドの JSON 出力を受け取ります。単一のエンティティ JSON オブジェクトにすることも、複数のエンティティ JSON のアイテムアレイを含む JSON オブジェクトにすることもできます。

    sourceJSON に items 配列が含まれていない場合、メソッドはそれを単一のエンティティとして扱い、自動的に配列にラップします。ターゲット統合のみが必要な場合は、null を渡すか、このパラメーターを省略します。

    "sourceJSON": {
        "items": [Array]
    }
    sourceJSON.items オブジェクトのアレイ オプション。ターゲットに結合するエンティティ JSON のアレイ。各アイテムは、その属性と子アレイを持つエンティティを表します。このプロパティが存在する場合、 items ソースエンティティのリストとして直接使用されます。
    "items": [
      {
      "attributes": {Object},
      "characteristics": [Array],
      "coveredProducts": [Array],
      "sys_id": "String",
      "table": "String"
      }
    ]
    sourceJSON.items.attributes オブジェクト エンティティ属性を表すキーと値のペア。各属性は値プロパティを持つオブジェクトです。
    "attributes": {
      "end_date": {"value": "String"},
      "product_offering": {"value": "String"},
      "quantity": {"value": "String"},
      "start_date": {"value": "String"}
    }

    例: { "product_offering": { "value": "xr48..." }, "quantity": { "value": "5" } }

    sourceJSON.items.attributes.end_date 文字列 属性の終了日。

    形式:GlideDate 値 (例:2026-01-01)

    sourceJSON.items.attributes.product_offering 文字列 属性に関連付けられた製品オファリングの名前。製品オファリング [sn_prd_pm_product_offering] テーブルにあります。
    sourceJSON.items.attributes.quantity 文字列 属性を基準にして購入された製品アイテムの数。
    sourceJSON.items.attributes.start_date 文字列 属性の開始日。

    形式:GlideDate 値 (例:2026-01-01)

    sourceJSON.items.characteristics オブジェクトのアレイ オプション。特性エンティティ JSON のアレイ。
    "characteristics": [
      {
        "attributes": {Object},
        "sys_id": "String",
        "table": "String"
       }
    ]
    sourceJSON.items.characteristics.attributes オブジェクト アイテム特性に関連付けられた属性。各子プロパティは、属性を表すキーと値のペアです。属性は値プロパティを持つオブジェクトです。
    "attributes": {
       "characteristic": {Object},
       "value": {Object}
    }
    sourceJSON.items.characteristics.attributes.characteristic オブジェクト 属性に関連付けられた特性を表すキーと値のペア。 characteristic は値プロパティを持つオブジェクトです。
    "characteristic": {
        "value": "String"
    }
    sourceJSON.items.characteristics.attributes.value オブジェクト 親特性に関連付けられた属性値を表すキーと値のペア。 value は値プロパティを持つオブジェクトです。
    "value": {
       "value": "String"
    }
    sourceJSON.items.characteristics.sys_id 文字列 アイテムに関連付けられた特性のSys_id。
    sourceJSON.items.characteristics.table 文字列 アイテムに関連付けられた特性のテーブルの場所。
    sourceJSON.items.coveredProducts オブジェクトのアレイ オプション。対象製品エンティティ JSON のアレイ。
    coveredProducts: [
     {
      "sys_id": {Object},
      "table": "String",
      "attributes": {Object}
     }
    ]
    sourceJSON.items.coveredProducts.sys_id オブジェクト 対象製品レコードのSys_id。
    sys_id: { 
      value: "String"
    }
    sourceJSON.items.coveredProducts.table 文字列 対象製品レコードを含むテーブル名。たとえば、 sn_install_base_m2m_contract_sold_product などです。
    sourceJSON.items.coveredProducts.attributes オブジェクト 対象製品の属性。フィールドはレコードによって異なる場合があります。
    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 オブジェクト この対象製品に関連付けられた販売済み製品レコード。
    "sold_product": {
      "value": "String"
    }
    sourceJSON.items.coveredProducts.attributes.contract オブジェクト 補償が定義されている親契約レコード。
    "contract": {
      "value": "String"
    }
    sourceJSON.items.coveredProducts.attributes.service_contract_line オブジェクト この対象製品にリンクされた特定のサービス契約品目。
    "service_contract_line": {
      "value": "String"
    }
    sourceJSON.items.coveredProducts.attributes.entitlement オブジェクト 補償条件を規定するエンタイトルメントレコード。
    "entitlement": {
      "value": "String"
    }
    sourceJSON.items.coveredProducts.attributes.install_base オブジェクト 展開された資産を表すインストールベースレコード。
    "install_base": {
      "value": "String"
    }
    sourceJSON.items.coveredProducts.attributes.covering_sold_product オブジェクト このエントリの対象となる販売済み製品。
    "covering_sold_product": {
      "value": "String"
    }
    sourceJSON.items.coveredProducts.attributes.date_added オブジェクト 製品がいつ補償に追加されたかを示す ISO 8601 日付文字列。
    "date_added": {
      "value": "String"
    }
    sourceJSON.items.coveredProducts.attributes.date_removed オブジェクト 製品がいつ補償から除外されたかを示す ISO 8601 日付文字列。現在アクティブな場合は null または空です。
    "date_removed": {
      "value": "String"
    }
    sourceJSON.items.lineItems オブジェクトのアレイ オプション。子品目エンティティ JSON のアレイ。各子は同じ構造 (sys_id、テーブル、属性、およびネストされた子) に従います。
    "lineItems": [
     {
       "attributes": {Object},
       "characteristics": [Array],
       "coveredProducts": [Array],
       "sys_id": "String",
       "table": "String"
      }
    ]
    sourceJSON.items.lineItems.attributes オブジェクト エンティティ属性を表すキーと値のペア。各属性は値プロパティを持つオブジェクトです。sourceJSON.items.attributesと同じ構造に従います。
    "attributes": {
      "characteristic": {Object},
      "value": {Object}
    }
    sourceJSON.items.lineItems.characteristic オブジェクト 品目の特性を表すキーと値のペア。特性は値プロパティを持つオブジェクトです。sourceJSON.items.characteristicsと同じ構造に従います。
    "characteristics": [{
       "attributes": {Object},
       "sys_id": "String",
       "table": "String"
    }]
    sourceJSON.items.lineItems.coveredProducts 品目に関連付けられた対象製品エンティティ JSON のアレイ。sourceJSON.items.coveredProductsと同じ構造に従います。
    coveredProducts: [
     {
      "sys_id": {Object},
      "table": "String",
      "attributes": {Object}
     }
    ]
    sourceJSON.items.lineItems.sys_id エンティティ JSON 品目のSys_id。
    sourceJSON.items.lineItems.table エンティティ JSON 品目のテーブルの場所。
    sourceJSON.items.sys_id 文字列 ソースエンティティレコードのSys_id。
    sourceJSON.items.table 文字列 ソースエンティティのテーブル名。例: sn_pss_core_service_contract_line
    targetJSON オブジェクト 必須。ソース JSON を統合するターゲットエンティティ JSON。null または空にすることはできません。ソースエンティティと同じオブジェクト構造に従います (sourceJSON パラメーター)。
    targetJSON={
      "attributes": {Object},
      "entitlement_characteristic": {Object},
      "sys_id": "String",
      "table": "String,
      "line_item": {Object}
      }
    }
    targetJSON.attributes オブジェクト ターゲットエンティティ属性を表すキーと値のペア。各属性は値プロパティを持つオブジェクトです。ソース属性 (sourceJSON.items.attributes パラメーター) と同じオブジェクト構造に従います。
    "attributes": {
      "end_date": {"value": "String"},
      "product_offering": {"value": "String"},
      "quantity": {"value": "String"},
      "start_date": {"value": "String"}
    }

    例: { "product_offering": { "value": "xr48..." }, "quantity": { "value": "5" } }

    targetJSON.lineItems オブジェクトのアレイ オプション。ターゲット上の子品目エンティティ JSON のアレイ。sourceJSON.items.lineItemsと同じオブジェクト構造に従います。
    "lineItems": {
        "sys_id": "String",
        "table": "String",
        "attributes": {Object},
        "characteristics": {Object}
      }
    targetJSON.lineItems.attributes オブジェクト エンティティ属性を表すキーと値のペア。各属性は値プロパティを持つオブジェクトです。sourceJSON.items.attributesと同じ構造に従います。
    "attributes": {
      "characteristic": {Object},
      "value": {Object}
    }
    targetJSON.lineItems.characteristics オブジェクト 品目の特性を表すキーと値のペア。特性は値プロパティを持つオブジェクトです。sourceJSON.items.characteristicsと同じ構造に従います。
    "characteristic": {
      "value": "String"
    }
    targetJSON.lineItems.coveredProducts 品目に関連付けられた対象製品エンティティ JSON のアレイ。sourceJSON.items.coveredProductsと同じ構造に従います。
    "coveredProducts": [Array]
    targetJSON.lineItems.sys_id エンティティ JSON 品目のSys_id。
    targetJSON.lineItems.table エンティティ JSON 品目のテーブルの場所。
    targetJSON.sys_id 文字列 ターゲットエンティティレコードのSys_id。
    targetJSON.table 文字列 ターゲットエンティティのテーブル名。例: sn_pss_core_service_contract
    表 : 8. 返される内容
    タイプ 説明
    オブジェクト 統合された JSON 結果。結合および統合されたエンティティ JSON には、ターゲットおよび結合/統合された子アレイのすべての属性が含まれています。

    統合が無効になっている場合、または sourceJSON が無効な場合は、targetJSON を返します。

    targetJSON が null または空の場合は null を返します。

    次の例は、LeadToCashService を介して統合メソッドを呼び出す方法を示しています。品目を含むソースエンティティ JSON をターゲットエンティティ JSON に統合します。同じ製品オファリングを持つ品目が統合されます。

    この例では、簡単にするために LeadToCashService を直接インスタンス化しますが、本番環境での使用では、カスタムサブクラスを拡張ポイントを介して登録し、PrimitiveUtil を介して呼び出す必要があります。
    注:
    MyConsolidationService は、ConsolidationService を拡張して作成する必要があるカスタムスクリプトインクルードです。オーバーライド可能なメソッド (enableConsolidation()、getHashConfig()、canConsolidateEntity()、canMergeEntity()、canConsolidateJSONs()、overrideAttributeValues()) のロジックを MyConsolidationService 内に追加する必要があります。MyLeadToCashService は LeadToCashService を拡張し、 getConsolidationService() から MyConsolidationService を返します。
    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));

    出力:

    {
      "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": []
        }
      ]
    }

    次の例は、null sourceJSON を使用して consolidate メソッドを呼び出す方法を示しています。この場合、targetJSON 内の子エンティティのみが統合されます。これは、結合する必要がある重複品目がターゲットに既に含まれている場合に便利です。

    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));

    出力:

    {
      "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()

    このサービスインスタンスに対して統合を有効にするかどうかを制御する上書き可能なメソッド。基本実装は、上書きされない場合に false を返します。統合を有効にするには、実装クラスでこのメソッドをオーバーライドして true を返す必要があります。

    表 : 9. パラメーター
    名前 タイプ 説明
    なし
    表 : 10. 返される内容
    タイプ 説明
    ブール サービスが統合を正常に有効にしたかどうかを示すフラグ。
    有効な値:
    • true:サービスの統合は有効です。
    • false:サービスは統合に対して有効になっていません。

    デフォルト値:false

    次の例は、カスタムConsolidationServiceで enableConsolidation() をオーバーライドする方法を示しています。
    注:
    MyConsolidationService は、ConsolidationService を拡張して作成する必要があるカスタムスクリプトインクルードです。
    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 = true

    統合サービス:getHashConfig()

    連結前にエンティティをグループ化するためのハッシュ構成を返す上書き可能なメソッド。この設定では、各エンティティの MD5 ハッシュを生成する属性と子コンテキストタイプを指定します。同じハッシュを持つエンティティは、ペアごとの統合のためにグループ化されます。基本実装は、上書きされていない場合、空のオブジェクトを返します。

    表 : 11. パラメーター
    名前 タイプ 説明
    なし
    表 : 12. 返される内容
    タイプ 説明
    オブジェクト テーブル名をハッシュ構成にマッピングする JSON オブジェクト。各テーブルエントリには次のものが含まれます。
    1. attributes (文字列のアレイ):値がハッシュに含まれる属性フィールド名。
    2. childContextTypes (文字列の配列):オプション。ハッシュ値が親ハッシュに再帰的に含まれる子テーブル名。

    想定される戻り値の形式: { "table_name": { "attributes": ["field1", "field2"], "childContextTypes": ["child_table_name"] } }

    テーブルのハッシュ構成が空のオブジェクト {} の場合、そのタイプのすべてのエンティティは単一のエンティティに統合されます。

    テーブルのハッシュ構成が見つからない場合 (未定義または null)、エラーがログに記録され、エンティティは変更されずに返されます。基本実装は、上書きされていない場合、空のオブジェクトを返します。

    次の例は、 getHashConfig() を上書きして、契約品目とエンタイトルメント特性のハッシュ属性を定義する方法を示しています。

    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(オブジェクト json1, オブジェクト json2)

    2 つの JSON が統合されているときにプライマリ JSON を決定する上書き可能なメソッド。上書きされていない属性の場合、プライマリ JSON の属性値が統合結果で使用されます。基本実装では、上書きされていない場合は json1 が返されます。

    表 : 13. パラメーター
    名前 タイプ 説明
    json1 オブジェクト 統合する最初のエンティティ JSON。sys_id、テーブル、属性、および子アレイが含まれます。
    json2 オブジェクト 統合する 2 番目のエンティティ JSON。sys_id、テーブル、属性、および子アレイが含まれます。
    表 : 14. 返される内容
    タイプ 説明
    オブジェクト 選択したプライマリ JSON。この JSON の属性が、統合結果のデフォルト値になります。json1 または json2 のいずれかである必要があります。基本実装では、上書きされていない場合は json1 が返されます。

    次の例は、 getPrimary() を上書きして、開始日が早いエンティティをプライマリとして選択する方法を示しています。

    // 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);

    出力:

    // 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 consolidatedJSON)

    統合 JSON の属性を更新するために、2 つの JSON が統合された後に呼び出される上書き可能なメソッド。基本実装は、上書きされなければ操作されません。

    一般的なユースケースには、数量の合計、日付範囲の計算 (最も早い開始/最も遅い終了)、期間の再計算、consolidated_fromの追跡などがあります。

    表 : 15. パラメーター
    名前 タイプ 説明
    json1 オブジェクト 統合された最初のエンティティ JSON。これはプライマリ JSON です ( getPrimary() で決定)。連結前の元の属性が含まれています。
    json2 オブジェクト 統合された 2 番目のエンティティ JSON。これはセカンダリ JSON です。連結前の元の属性が含まれています。
    統合済み JSON オブジェクト 結合後の結果 JSON このオブジェクトの属性を直接変更して、カスタムロジックを適用します。最初は、結合された子アレイを含むプライマリ JSON の属性のディープコピーが含まれています。
    表 : 16. 返される内容
    タイプ 説明
    なし このメソッドは値を返しません。consolidatedJSONオブジェクトを直接変更します。
    次の例は、明細品目を連結するときに、 overrideAttributeValues() を上書きして数量を合計し、日付範囲を計算する方法を示しています。
    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(オブジェクト consolidatedJSON)

    階層の統合が完了した後に統合された JSON に最終的な変更を適用する上書き可能なメソッド。基本実装は、上書きされなければ操作されません。

    システムは、 consolidate() メソッドの最終的な統合結果と、 processHashGroup() 内の各結果エンティティでこのメソッドを呼び出します。

    表 : 17. パラメーター
    名前 タイプ 説明
    統合済み JSON オブジェクト すべての結合と統合が完了した後、完全に処理された統合 JSON オブジェクト。このオブジェクトを直接変更して、最終的な変換を適用します。
    表 : 18. 返される内容
    タイプ 説明
    なし このメソッドは値を返しません。consolidatedJSONオブジェクトを直接変更します。

    次の例は、 postHierarchyConsolidation() をオーバーライドして、統合エンティティにフラグを設定する方法を示しています。

    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 - preProcess(オブジェクト sourceJSON, オブジェクト targetJSON, オブジェクト additionalParams)

    一括マップ作成やルックアップデータのキャッシュなどのカスタム前処理タスクを実行するために、結合と統合の前に呼び出される上書き可能なメソッド。

    計算結果を この オブジェクトに保存します ( 例:this.targetHeaderId = "sample_sys_id")。このメソッドは値を返しません。

    表 : 19. パラメーター
    名前 タイプ 説明
    ソースターゲット オブジェクト 統合する sourceJSON の出力。LeadtoCashCore - スコープ対象 createInstance() メソッドまたは effect() メソッドの JSON 出力を受け取ります。単一のエンティティ JSON オブジェクトにすることも、複数のエンティティ JSON のアイテムアレイを含む JSON オブジェクトにすることもできます。null または空にすることができます。
    targetJSON オブジェクト 必須。統合用のターゲットエンティティ JSON。
    additionalParams オブジェクト オプション。発信者から渡された追加データ。
    表 : 20. 返される内容
    タイプ 説明
    なし このメソッドは値を返しません。後続の統合ステップで使用するために、 この オブジェクトの計算結果を保存します。

    次の例は、 preProcess() をオーバーライドして、統合中に使用するターゲットヘッダー ID をキャッシュする方法を示しています。

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