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


---

# スクリプトインクルード

# スクリプトインクルード {#ariaid-title1}

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

スクリプトインクルードは、サーバー上で実行される JavaScript の格納に使用されます。

スクリプトインクルードを作成して、サーバースクリプトで使用できるように JavaScript の関数およびクラスを格納します。各スクリプトインクルードは、オブジェクトクラスまたは関数のいずれかを定義します。

スクリプトインクルードは要求時にのみロードされるため、グローバルビジネスルールの代わりにスクリプトインクルードを使用することを検討してください。詳細については、「[クライアント呼び出し可能スクリプトインクルードのプライバシー設定](https://servicenow-prod.fluidtopics.net/drJ3LduSBiw2VQbIxOjicQ#c_ChangePrivacyAll "クライアント呼び出し可能スクリプトインクルード (CCSI) のプライバシー設定により、クライアント呼び出し可能スクリプトインクルードにアクセスできるユーザーが決定されます。")」と「[ディスカバリースクリプトインクルード](https://servicenow-prod.fluidtopics.net/drJ3LduSBiw2VQbIxOjicQ#c_UsingDiscoveryScriptIncludes "ディスカバリー スクリプトインクルードは、ディスカバリー タスクを実行するために使用できる JavaScript クラスを定義します。")」を参照してください。

スクリプトのその他の例については、「 [有用なスクリプト](https://servicenow-prod.fluidtopics.net/xOkPZBjFCi3mzFrYwE4P9A "コアシステムに含まれていない便利な機能を提供するスクリプト。")」を参照してください。

## スクリプトインクルードフォーム {#ariaid-title2}

スクリプトインクルードには、名前、説明、およびスクリプトがあります。また、それらがアクティブかどうか、およびクライアントスクリプトから呼び出すことができるかどうかも指定します。スクリプトインクルードフォームを使用して、既存のスクリプトインクルードを表示するか、新しいスクリプトインクルードを作成します。
スクリプトインクルードにアクセスするには、\[システム定義\] \> \[スクリプトインクルード\] に移動します。  
{#t_ScriptIncludeForm__table_ntx_fcg_tq__entry__2}

| フィールド | 説明 |
|-|-|
| 名前 | スクリプトインクルードの名前。クラスを定義する場合、これはクラスの名前、プロトタイプ、およびタイプと一致する必要があります。クラスレス (オンデマンド) スクリプトインクルードを使用する場合、名前は関数名と一致する必要があります。 |
| API 名 | 読み取り専用で自動入力される API 名。 |
| クライアント呼び出し可能 | スクリプトインクルードをクライアントスクリプト、リスト/レポートフィルター、参照修飾子として使用できるように、または URL の一部として指定できるようにします。選択すると、\[アクセス制御\] 関連リンクが使用可能になります。詳細については、「[クライアント呼び出し可能スクリプトインクルードのプライバシー設定](https://servicenow-prod.fluidtopics.net/drJ3LduSBiw2VQbIxOjicQ#c_ChangePrivacyAll "クライアント呼び出し可能スクリプトインクルード (CCSI) のプライバシー設定により、クライアント呼び出し可能スクリプトインクルードにアクセスできるユーザーが決定されます。")」を参照してください。 |
| アプリケーション | このスクリプトインクルードが存在するアプリケーション。 |
| アクセス可能 | このスクリプトインクルードにアクセスできるアプリケーションを設定します。 すべてのアプリケーションスコープ :   任意のアプリケーションスコープからアクセスできます。 このアプリケーションスコープのみ :   現在のアプリケーションスコープからのみアクセスできます。 {#t_ScriptIncludeForm__AccessibleFrom} |
| アクティブ | 選択すると、スクリプトインクルードが有効になります。アクティブなフィールドの選択を解除して、スクリプトインクルードを無効にします。 |
| 説明 | スクリプトインクルードに関する説明的なコンテンツを提供します。 |
| スクリプト | 他のスクリプトから呼び出されたときに実行するサーバーサイドスクリプトを定義します。 スクリプトは、単一の JavaScript クラスまたはグローバル関数を定義する必要があります。クラス名または関数名は \[名前\] フィールドと一致する必要があります。 |
| パッケージ | このスクリプトインクルードを含むパッケージ。 |
| 作成者 | このスクリプトインクルードを作成したユーザー。 |
| 更新者 | このスクリプトインクルードを最後に更新したユーザー。 |
| 保護ポリシー | スクリプトインクルードの保護レベルを設定します。 なし :   このダウンロードまたはインストールされたスクリプトインクルードの読み取りと編集をすべてのユーザーに許可します。 読み取り専用 :   このダウンロードまたはインストールされたスクリプトインクルードからの値の読み取りをすべてのユーザーに許可します。スクリプトインクルードをダウンロードまたはインストールするインスタンスのスクリプト値は、どのユーザーも変更できません。 保護 :   アプリケーション開発者に知的財産権保護を提供します。スクリプトインクルードをダウンロードした顧客は、スクリプトフィールドの内容を表示できません。スクリプトは、権限のないユーザーがプレーンテキストで表示することを防ぐために、メモリ内で暗号化されます。 |
| フォームビューの関連リスト： ||
| バージョン | スクリプトインクルードのすべてのバージョンを表示します。バージョンを比較したり以前のバージョンに戻したりするには、このリストを使用します。「[バージョン](https://www.servicenow.com/docs/access?context=c_Versions&version=xanadu&pubname=xanadu-application-development&ft:locale=en-US)」を参照してください。 |
| アクセス制御 | \[クライアント呼び出し可能\] チェックボックスがオンになっていて、かつ標準のスクリプトインクルードから非表示になっている場合に使用可能になります。パブリックアクセスが許可されていない場合に、CCSI を不正使用から保護するために使用します。 |
[表 : 1. スクリプトインクルードフォーム]

{#t_ScriptIncludeForm__table_ntx_fcg_tq}

## スクリプトインクルードの使用 {#ariaid-title3}

スクリプトインクルードは \[システム定義\] または \[システム UI\] の下にあります。既存のスクリプトインクルードをスクリプトから呼び出すことも、新しいスクリプトインクルードを作成することもできます。
まったく新しいスクリプトインクルードを作成するときには、既存のいずれかのスクリプトインクルードの形式に従うこともできます。この例では、スクリプトインクルードの名前は NewInclude であり、`myFunction` と呼ばれる 1 つの関数があります。スクリプトインクルードの名前が、クラスの名前、プロトタイプ、およびタイプと一致することが重要です。新しいスクリプトインクルードを作成して名前を付けると、クラスとプロトタイプが適切に設定されたコードスニペットが提供されます。  

    var NewInclude =Class.create();
     
    NewInclude.prototype={
      initialize :function(){},
     
      myFunction :function(){<Put function code here>},
     
      type :'NewInclude'};

次のように `myFunction` 行を使用できます。  

    var foo =new NewInclude();
    foo.myFunction();

## クライアント呼び出し可能スクリプトインクルード {#ariaid-title4}

クライアント呼び出し可能スクリプトインクルード (CCSI) は、クライアントスクリプト、リスト/レポートフィルター、参照修飾子、または URL の一部として指定された場合に、スクリプトインクルードを使用できるようにします。

### 始める前に

必要なロール：admin

### 手順

1. 移動先 システム定義スクリプトインクルード.
2. \[新規\] を選択するか、表示または編集する既存のスクリプトインクルードを選択します。  
   スクリプトインクルードの記述の詳細については、「[スクリプトインクルードの使用](https://servicenow-prod.fluidtopics.net/drJ3LduSBiw2VQbIxOjicQ#c_UseScriptIncludes "スクリプトインクルードは [システム定義] または [システム UI] の下にあります。既存のスクリプトインクルードをスクリプトから呼び出すことも、新しいスクリプトインクルードを作成することもできます。")」を参照してください。
3. フォームを完成させて、\[クライアント呼び出し可能\] チェックボックスを選択します。  
   ユーザーロールを選択するためのロールセレクターがポップアップし、アクセス制御エントリが自動的に作成されます。ユーザーロールを選択し、\[OK\] をクリックします。  
   注:  
   ロールセレクターウィンドウを無効にするには、glide.script.ccsi.enable_acl_create_ux を false に設定します。

   ロールベースのアクセス制御を持つ新しい CCSI レコードが作成されます。アクセス制御関連リンクは、\[クライアント呼び出し可能\] チェックボックスをオンにすると利用可能になります。
{#client-callable-script-includes__steps_m4d_llb_rtb}

### クライアント呼び出し可能スクリプトインクルードのプライバシー設定 {#ariaid-title5}

クライアント呼び出し可能スクリプトインクルード (CCSI) のプライバシー設定により、クライアント呼び出し可能スクリプトインクルードにアクセスできるユーザーが決定されます。

#### プライベートプライバシー設定 {#c_ChangePrivacyAll__section_x1t_fx3_ktb}

プライベートプライバシー設定は、公開ページにアクセスするゲストがクライアント呼び出し可能スクリプトインクルードにアクセスできないことを意味します。非公開スクリプトは、ログインしていないユーザーは実行できません。

#### 公開プライバシー設定 {#c_ChangePrivacyAll__section_cm3_3x3_ktb}

公開プライバシー設定は、適切な HTTP 要求を作成するログインしていないユーザーが、クライアントスクリプトを実行できることを意味します。クライアントスクリプトが機密情報を提供する場合、これによりセキュリティ上の問題が発生する可能性があります。  
次のスクリプトインクルードは、デフォルトでは公開のままです。これは、[UI ページを公開または非公開にする](https://www.servicenow.com/docs/access?context=t_MakeAPagePublic&version=xanadu&pubname=xanadu-platform-security&ft:locale=en-US)が、次のスクリプトインクルードにアクセスする必要があるためです。

* GlideSystemAjax
* SysMessageAjax
* KnowledgeMessagingAjax
* KnowledgeAjax
* PasswordResetAjax
{#c_ChangePrivacyAll__ul_qbw_12g_tq}

#### クライアント呼び出し可能スクリプトインクルードのプライバシーの設定 {#c_ChangePrivacyAll__section_ikm_xk4_jtb}

すべてのクライアント呼び出し可能スクリプトインクルードのプライバシー設定の変更

すべてのクライアント呼び出し可能スクリプトインクルードをさらに制御するために、アドミニストレーターは glide.script.ccsi.ispublic プロパティを追加できます。このプロパティは、すべてのクライアント呼び出し可能スクリプトインクルードを公開または非公開にすることで、その可視化を変更します。プロパティを以下のとおり構成します。  
{#c_ChangePrivacyAll__table_ndm_xfg_tq__entry__2}

| タイトル | プロパティ |
|-|-|
| 名前 | glide.script.ccsi.ispublic |
| タイプ | true \| false |
| 値 | false |
[表 : 2. プロパティの構成]

{#c_ChangePrivacyAll__table_ndm_xfg_tq}  
注:  
このプロパティの詳細については、「インスタンスセキュリティ強化設定」の「クライアント呼び出し可能スクリプトインクルードのプライバシー」を参照してください。

#### 単一のクライアント呼び出し可能スクリプトインクルードのプライバシー設定の変更 {#ariaid-title6}

isPublic() 関数を追加することにより、単一のクライアント呼び出し可能スクリプトインクルードのプライバシー設定を変更します。

isPublic() 設定は glide.script.ccsi.ispublic プロパティよりも優先されます。たとえば、このプロパティが false に設定されていて、すべてのクライアント呼び出し可能スクリプトインクルードが非公開で、かつスクリプトで isPublic() が true に設定されている場合、そのスクリプトは公開されます。

単一のクライアント呼び出し可能スクリプトインクルードのプライバシーを変更するには、次のメソッドをスクリプトインクルードに追加します。  

    isPublic:function(){return[true/false];},

NewInclude クライアントスクリプトを非公開にします。

    var NewInclude =Class.create();
     
    NewInclude.prototype={
       initialize:function(){},
     
       myFunction:function(){//Put function code here},
       isPublic:function(){return false;},
     
       type:'NewInclude'};

#### クライアント呼び出し可能スクリプトインクルードのセキュリティ {#ariaid-title7}

クライアント呼び出し可能スクリプトインクルード (CCSI) を不正使用から保護します。顧客アプリケーションで作成されたすべての CCSI レコードについて、セキュリティリスクを軽減するための推奨事項が表示されます。

CCSI を作成するときに、次のセキュリティ推奨事項がまだ構成されていない場合は、それらの推奨事項が表示されます。

* CCSI にパブリックアクセスがない場合は、アクセス制御を追加または定義します。
* スクリプトがデータベースにクエリを実行する場合は、GlideRecord API の代わりに GlideRecordSecure を使用してセキュリティを強化します。

  注:  
  セキュリティ推奨メッセージを無効にするには、sys_properties テーブルでプロパティ glide.script.ccsi.customer_scoped.security_msgs_enabled を false に設定します。デフォルト値は true になっています。

{#security-ccsi__ul_ohx_k1j_ktb}

セキュリティコンプライアンスの詳細については、「インスタンスセキュリティ強化設定」を参照してください。

## ディスカバリースクリプトインクルード {#ariaid-title8}

ディスカバリー スクリプトインクルードは、ディスカバリー タスクを実行するために使用できる JavaScript クラスを定義します。  
注:  
discovery_admin ロールを持つユーザーは、スクリプトインクルードを書き込むことができます。サーバー側およびクライアント側のスクリプティングのベストプラクティスに従って、セキュリティ上の問題を防止します。詳細については、ナレッジ記事「[KB0550828](https://support.servicenow.com/kb_view.do?sysparm_article=KB0550828)」を参照してください。

### GlideRecordUtil を使用した GlideRecord の操作

GlideRecordUtil は、ディスカバリー 実行時に、GlideRecord 操作に役立つメソッドを提供するユーティリティクラスです。使用可能なメソッドの説明については、「[GlideRecordUtil](https://servicenow-prod.fluidtopics.net/sbMpSd6G_l_SJmyvyXCidQ#c_GlideRecordUtilAPI "GlideRecordUtil スクリプトインクルードは、GlideRecord を操作するためのユーティリティクラスです。")」を参照してください。

### GlideRecord インスタンスの取得

指定された構成アイテムの、正しいクラスとテーブルの GlideRecord インスタンスを取得するには、getCIGR(sys_id) メソッドを使用します。たとえば次のコードは、CI の GlideRecord を取得します。その sys_id は 2dfd7c8437201000deeabfc8bcbe5d56 です。

    var now_GR = new GlideRecordUtil().getCIGR("2dfd7c8437201000deeabfc8bcbe5d56");

クラスタイプが未知の場合に階層テーブルを取得するには、getGR(base_table, sys_id) メソッドを使用します。たとえば、コンピュータークラス CI の GlideRecord を取得するには、コンピュータークラス、Windows サーバー、または Linux サーバークラスを区別することが必要になる場合があります。このメソッドを使用すると、GlideRecord が正しいクラスを持っていることが保証されます。異なるクラスには異なる属性があります。このユースケースでは、Windows サーバーは Linux サーバーとは異なる属性を持ちます。次の例は、正しいクラスの GlideRecord をその属性とともに取得する方法を示しています。

    var now_GR = new GlideRecordUtil().getGR( "cmdb_ci_computer", "2dfd7c8437201000deeabfc8bcbe5d56");

### GlideRecord のすべてのフィールドの取得

getFields(now_GR) メソッドは、指定された GlideRecord に存在するすべてのフィールドまたは属性の JavaScript オブジェクト (ハッシュマップなど) を返します。

    var now_GR = new GlideRecordUtil().getGR("cmdb_ci_computer", "2dfd7c8437201000deeabfc8bcbe5d56");
    var fields = new GlideRecordUtil().getFields(now_GR);
    gs.log(fields.join(" ")); // List all the fields that are in a computer CI

### GlideRecord オブジェクトフィールドの入力

populateFromGR(hashmap, gr,ignore) メソッドを使用すると、GlideRecord オブジェクトを取得して、そのフィールドと値を JavaScript オブジェクトに入力できます。3 番目の引数 (<var class="keyword varname">ignore</var>) は、特定のフィールドを除外できるようにするオプションの JavaScript オブジェクトです。たとえば、GlideRecord の sys_created_by または sys_updated_by フィールドを気にする必要がない場合があります。

    var objectToPopulate = { }; 
    var now_GR = new GlideRecordUtil().getGR("cmdb_ci_computer", "2dfd7c8437201000deeabfc8bcbe5d56"); 
    var ignore = {"sys_created_on": true, "sys_updated_by": true}; 
    new GlideRecordUtil().populateFromGR(objectToPopulate, now_GR, ignore); 
    // Now the objectToPopulate contains field/value pairs from the computer GlideRecord

mergeToGR(hashmap, gr,ignore) メソッドを使用すると、GlideRecord にフィールド/値のペアのオブジェクトを入力できます。ignore 引数は、指定されたフィールドの更新を停止します。次のコード例では、コンピューターレコードの name フィールドと os フィールドが更新されますが、sys_created_by フィールドは更新されません。

    var now_GR = new GlideRecordUtil().getGR("cmdb_ci_computer", "2dfd7c8437201000deeabfc8bcbe5d56"); 
    var obj = {"name": "xyz", "os": "windows 2000", "sys_created_by", "aleck.lin"};
    var ignore = {"sys_created_by": true}; 
    new GlideRecordUtil().mergeToGR(obj, gr, ignore);
    gr.update();

### テーブル階層の取得

getTables(table) メソッドは、次の例に示すように、テーブル階層のリストを返します。

    var tables = new GlideRecordUtil().getTables("cmdb_ci_linux_server");
    gs.log(tables.join(",")); 
    // The result would be "cmdb_ci, cmdb_ci_computer, cmdb_ci_server, cmdb_ci_linux_server".

### DiscoveryException と AutomationException の使用 {#ariaid-title9}

ディスカバリー センサーとセンサー関連のスクリプトを記述するときに、 DiscoveryException または AutomationException を使用して、ディスカバリー から例外が発生したことを示すことができます。  
DiscoveryException スクリプトインクルードは AutomationException を拡張し、それは GenericException クラスを拡張します。次の例では、DiscoveryException を使用して例外をスローします。

    function foo() { 
      if(//condition matches) throw new DiscoveryException("The message", "The cause"); }

最初の引数は例外のメッセージを受け取り、2 番目の引数 (オプション) は例外の原因を受け取ります。次の例に示すように、例外を捕捉してログに記録することもできます。

    try {
      foo(); 
    } 
    catch(e) { 
       if(e instanceof DiscoveryException)
         gs.log("A DiscoveryException occurred. It is " + e. getMessage() + " caused by " + e.getCause()); }

上記の例は、AutomationException にも適用されます。DiscoveryException は通常、特にディスカバリーに例外処理を提供するために使用され、AutomationException はオーケストレーションと ディスカバリー の両方に適用される例外処理に使用されます。

