---
sourceDocument: Xanadu API リファレンス
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/ja-JP/xanadu/api-reference

 Release :

    - xanadu

ft:locale :

    - ja-JP

ft:publication_title :

    - Xanadu API リファレンス

ft:clusterId :

    - crapiref

bundleId :

    - crapiref

workflow :

    - Creator


---

# 製品注文オープン API 開発者ガイド

# 製品注文オープン API 開発者ガイド {#ariaid-title1}

* リリースバージョン: Xanadu
* 
* 更新日 2024年08月01日
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 所要時間：9分

製品注文オープン API を使用して、製品の注文情報を作成、更新、取得します。

この開発者ガイドでは、[製品注文オープン API](https://servicenow-prod.fluidtopics.net/cx4murX9aSa~aYKGRtC4zQ#tmf622_product_ordering-api "Product Order Open API は、製品注文を行うための標準化されたメカニズムを有効にするエンドポイントを提供します。") を拡張してさまざまなカスタマイズを行う方法について説明します。

## 製品注文オープン API の拡張 {#ariaid-title2}

製品注文オープン API は、スクリプトインクルードを編集することによって拡張できます。  
これらのスクリプトインクルードは、変更の結果を理解した上でのみ編集する必要があります。

* TMFProductOrderAPIUtil：POST 要求を処理する関数が含まれています。
* TMFProductOrderGetAPIUtil：GET 要求を処理する関数が含まれています。
* ProductOrderExtensionOOB:TMFProductOrderAPIUtil と TMFProductOrderGetAPIUtil の関数をサポートするヘルパー関数が含まれています。
* ProductOrderProcessor：空のスクリプトインクルードファイル。このファイルを使用して、 ProductOrderExtensionOOB からオーバーライドする関数を定義します。
{#extend-product-order-api__ul_d5h_lhr_wpb}

製品注文オープン API を拡張して、次のカスタマイズを行います。

### 必要なパラメーター {#extend-product-order-api__section_nmk_lbt_prb}

製品注文の作成に必須または不要な要求本文パラメーターを変更するには、ProductOrderExtensionOOB スクリプトインクルードに含まれる関数 `getProductOrderSchema()` を上書きします。

関数 `getProductOrderSchema()` は、 TMFOrderAPIConstants スクリプトインクルードからスキーマを読み取ります。TMFOrderAPIConstants は保護されており、編集できないため、スキーマを更新することはできません。代わりに、別のファイルから新しいスキーマを読み取る必要があります。`getProductOrderSchema()` をオーバーライドして、新しいスキーマを読み取ることができます。`getProductOrderSchema()` をオーバーライドするには、ProductOrderProcessor スクリプトインクルードに同じ名前の関数を記述します。ProductOrderProcessor の新しい関数は TMFProductOrderAPIUtil によって呼び出され、ProductOrderExtensionOOB のデフォルトの `getProductOrderSchema()` 関数を置き換えます。  
この例では、 `getProductOrderSchema()` は、新しい定数ファイルで定義されているカスタムスキーマを返します。

    // ProductOrderProcessor

    var ProductOrderProcessor = Class.create();
    ProductOrderProcessor.prototype = Object.extendsObject(ProductOrderExtensionOOB, {
       // Define overriding functions here
       // Function name and parameters must be identical to the function it overrides

       getProductOrderSchema: function() {
          //Define your own custom schema in a new constant file
          return JSON.parse(Constants.SCHEMA.CREATE_PRODUCT_ORDER);
       },

       type: 'ProductOrderProcessor'
    });

### 要求本文の検証 {#extend-product-order-api__section_hr2_pbt_prb}

要求本文で追加の検証を実行するには、 ProductOrderExtensionOOB 関数をオーバーライドします。ProductOrderExtensionOOB には、既定で `true` を返す次の 4 つのヘルパー関数が含まれています。

* `validatePostRequest()` - TMFProductOrderAPIUtil の `processCreateOrder()` によって呼び出されます。
* `validateProductObj()` - TMFProductOrderAPIUtil の `processCreateOrder()` によって呼び出されます。
* `validateRelatedPartyObj()` - TMFProductOrderAPIUtil の `processCreateOrder()` によって呼び出されます。
* `validateGetRequest()` - TMFProductOrderGetAPIUtil の `processGetOrder()` によって呼び出されます。

{#extend-product-order-api__ul_khg_llx_wpb}ヘルパー関数が `false` を返すと、API の操作が停止します。カスタム検証を適用するには、ProductOrderProcessor で同じ名前とパラメーターを持つ関数を作成して、ProductOrderExtensionOOB ヘルパー関数をオーバーライドします。これらの新しい ProductOrderProcessor 関数は、デフォルトの ProductOrderExtensionOOB ヘルパー関数を置き換えるために、TMFProductOrderAPIUtil と TMFProductOrderGetAPIUtil によって呼び出されます。  
この例では、 ProductOrderProcessor の関数が ProductOrderExtensionOOB の既定の関数をオーバーライドして、 productOrderItem 属性の検証を実行します。

    // ProductOrderProcessor

    var ProductOrderProcessor = Class.create();
    ProductOrderProcessor.prototype = Object.extendsObject(ProductOrderExtensionOOB, {
        // Define overriding functions here
        // Function name and parameters must be identical to the function it overrides

        validatePostRequest: function(orderObject, details) {
            // Returning false terminates the POST request
            // Make sure to push error message in details array in case of error
            if (gs.nil(orderObject.productOrderItem)) {
                details.push(new TMFCommonOrderAPIUtil().getErrorDetailsObj(TMFOrderAPIConstants.MESSAGES.MISSING_ORDER_ITEM, '/'));
                return false;
            }
            return true;
        },

        type: 'ProductOrderProcessor'
    });

### 追加の REST 操作 {#extend-product-order-api__section_uqn_rbt_prb}

既存の GET および POST 操作以外に追加の操作を作成するには、Product Order Open API 用の[追加のスクリプト化された REST リソースを作成します](https://servicenow-prod.fluidtopics.net/p9L5Hh8xdmuQoy12wNRUgw "Scripted REST API リソースを作成して、HTTP メソッド、処理スクリプトを定義し、親サービスの設定を上書きします。")。新しいスクリプト化済み REST リソースのロジックは、既存の操作と一致する必要があります。新しいスクリプトインクルードで新しい操作の関数を定義します。

### フィールドマッピング {#extend-product-order-api__section_bs3_tbt_prb}

レコードを作成する際には、API は要求本文パラメーターをレコードのフィールドにマッピングします。レコードを取得する際には、API はレコードのフィールドを応答オブジェクトの属性にマッピングします。  
ProductOrderExtensionOOB には、POST 要求本文を GlideRecord にマップする次の関数が含まれています。

* `transformOrderGr()`
* `transformOrdLineItemGr()`
* `getLineItemPrice()`
* `transformPriceOrderTypeAndState()`
* `transformCustLineItmContact()`
* `transformOrderItemChar()`
{#extend-product-order-api__ul_krb_r4x_wpb}  
ProductOrderExtensionOOB には、GlideRecord を GET または POST 要求の応答オブジェクトにマップするための次の関数が含まれています。

* `transformPostOrderResponse()`
* `transformGetOrderResponse()`
* `transformProductObj()`
* `transformRelatedPartyCustomerLineItem()`
* `transformOrderItemRelationship()`
* `transformGetOrdLineItmResponse()`
* `transformProductCharacteristics()`
* `transformProductSpecification()`

{#extend-product-order-api__ul_qqk_zfz_wpb}フィールドマッピングをカスタマイズすると、他のフィールドのデータを追加・取得したり、デフォルトのフィールドのマッピングを変更したりすることが可能です。フィールドマッピングをカスタマイズするには、ProductOrderProcessor で同じ名前とパラメーターを持つ関数を作成して、ProductOrderExtensionOOB マッピング関数を上書きします。これらの新しい ProductOrderProcessor 関数は、デフォルトの ProductOrderExtensionOOB マッピング関数を置き換えるために、TMFProductOrderAPIUtil と TMFProductOrderGetAPIUtil によって使用されます。  
この例では、 ProductOrderProcessor の 2 つの関数が ProductOrderExtensionOOB の既定の関数をオーバーライドして、 external_id フィールドと sys_id フィールドのマッピングを作成します。

    // ProductOrderProcessor

    var ProductOrderProcessor = Class.create();
    ProductOrderProcessor.prototype = Object.extendsObject(ProductOrderExtensionOOB, {
        // Define overriding functions here
        // Function name and parameters must be identical to the function it overrides

        transformOrderGr: function(requestObject, orderGr) {
            orderGr.external_id = requestObject.externalId;
            return orderGr;
        },

        transformPostOrderResponse: function(orderObject, orderGr) {
            orderObject.id = orderGr.getValue('sys_id');
            return orderObject;
        },

        type: 'ProductOrderProcessor'
    });


