---
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/tX5D0Zp6IegF0zw5815ttg#service-order-open-api "サービス注文オープン API は、サービス注文を行うための標準化されたメカニズムを有効にするエンドポイントを提供します。") を拡張してさまざまなカスタマイズを行う方法について説明します。

## サービスオーダーオープン API の拡張 {#ariaid-title2}

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

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

サービスオーダーオープン API を拡張して、次のカスタマイズを行います。

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

サービス注文の作成に要求本文のパラメーターが必要かどうかを変更するには、ServiceOrderExtensionOOB スクリプトインクルードに含まれる関数 `getServiceOrderSchema()` を上書きします。

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

    // ServiceOrderProcessor

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

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

       type: 'ServiceOrderProcessor'
    });

### 要求本文の検証 {#extend-service-order-api__section_m3r_1hs_nrb}

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

* `validatePostRequest()` - TMFServiceOrderAPIUtil の `processPostOrder()` によって呼び出されます。
* `validateServiceObj()` - TMFServiceOrderAPIUtil の `processPostOrder()` によって呼び出されます。
* `validateRelatedPartyObj()` - TMFServiceOrderAPIUtil の `processPostOrder()` によって呼び出されます。
* `validateGetRequest()` - TMFServiceOrderGetAPIUtil の `processGetOrder()` によって呼び出されます。

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

    // ServiceOrderProcessor

    var ServiceOrderProcessor = Class.create();
    ServiceOrderProcessor.prototype = Object.extendsObject(ServiceOrderExtensionOOB, {
        // 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.serviceOrderItem)) {
                details.push(new TMFCommonOrderAPIUtil().getErrorDetailsObj(TMFOrderAPIConstants.MESSAGES.MISSING_ORDER_ITEM, '/'));
                return false;
            }
            return true;
        },

        type: 'ServiceOrderProcessor'
    });

### 追加の REST 操作 {#extend-service-order-api__section_sy1_2hs_nrb}

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

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

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

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

* `transformPostOrderResponse()`
* `transformGetOrderResponse()`
* `transformServiceObj()`
* `transformRelatedPartyCustomerLineItem()`
* `transformOrderItemRelationship()`
* `transformGetOrdLineItmResponse()`
* `transformServiceCharacteristics()`
* `transformServiceSpecification()`
{#extend-service-order-api__ul_qqk_zfz_wpb}

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

    // ServiceOrderProcessor

    var ServiceOrderProcessor = Class.create();
    ServiceOrderProcessor.prototype = Object.extendsObject(ServiceOrderExtensionOOB, {
        // 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: 'ServiceOrderProcessor'
    });


