ServiceNow FluentServiceNow SDK を使用してコードでアプリケーションメタデータを定義する

  • リリースバージョン: Zurich
  • 更新日 2025年07月31日
  • 所要時間:9分
  • ServiceNow SDK および コードでアプリケーションメタデータを定義するServiceNow Fluent

    始める前に

    必要なロール:admin

    このタスクについて

    ServiceNow Fluent は、アプリケーションを構成するメタデータファイル [sys_metadata] を定義するための TypeScript に基づくドメイン固有言語 (DSL) であり、テーブル、ロール、ACL、ビジネスルール、自動テストフレームワーク (ATF) テストなど、さまざまなタイプのメタデータの API が含まれています。 ServiceNow Fluent API と例の詳細については、「ServiceNow Fluent API リファレンス」を参照してください。

    手順

    1. Visual Studio Code で、スコープ対象のアプリケーションのディレクトリを開きます。
    2. src/fluent ディレクトリに、拡張子が .now.ts のファイルを追加します。
      アプリケーションメタデータは、1 つのファイルまたは任意の数の .now.ts ファイルで定義し、fluent ディレクトリ内のディレクトリにファイルを整理できます。
      ヒント:
      fluent ディレクトリでは、index.now.ts という名前のサンプルファイルを参照できます。
    3. .now.ts ファイルで、ServiceNow Fluent API のオブジェクトを使用して、アプリケーションのメタデータを定義します。
      たとえば、アプリケーションでテーブル [sys_db_object] を作成するには、テーブル API を使用します。次の例では、必要なプロパティと値を持つ Table オブジェクトを使用して、To Do リスト用のシンプルなテーブルを作成しています。
      export const x_snc_example_to_do = Table({
          name: 'x_snc_example_to_do',
          schema: {
              deadline: DateColumn({ label: 'Deadline' }),
              state: StringColumn({
                  label: 'State',
                  choices: {
                      ready: { label: 'Ready' },
                      completed: { label: 'Completed' },
                      inProgress: { label: 'In Progress' },
                  },
              }),
              task: StringColumn({ label: 'Task', maxLength: 120 }),
          },
      })
      注:
      レコード API を使用して、専用 API を持たないアプリケーションメタデータを定義できます。
    4. @servicenow/sdk/core から API に必要なインポートを追加します。
      たとえば、日付列と文字列列を持つテーブルを定義するには、使用する対応するオブジェクトをテーブル API からインポートします。
      import { Table, DateColumn, StringColumn } from '@servicenow/sdk/core'
    5. オプション: ビジネスルールなどのサーバー側スクリプトを使用する ServiceNow Fluent API の場合は、JavaScript モジュールからコードをインポートして、オブジェクトのスクリプトプロパティから呼び出します。
      この例では、スクリプトプロパティから参照できる showStateUpdate 関数をインポートします。
      import { showStateUpdate } from '../server/script.js'
    6. 変更内容を保存します。
    7. オプション: アプリケーションをビルドしてインストールし、ソースコードをアプリケーションメタデータにコンパイルして、変更をインスタンスで使用できるようにします。詳細については、「でのアプリケーションのとインストールの展開ServiceNow SDK」を参照してください。
    ヒント:
    コード コメントで次のディレクティブを使用すると、コードを管理できます。
    • @fluent-ignore:次のコード行で ServiceNow Fluent 診断警告とエラーを抑制します。
    • @fluent-disable-sync: ServiceNow Fluent オブジェクトへの変更の同期をオフにします。呼び出し式の前に使用します ( たとえば、Record({ ... })) そのオブジェクトとその子オブジェクトの同期をオフにします。このディレクティブは、ソースコードの外部でオブジェクトに加えられた変更を無視し、同期時に更新しないようにする場合にのみ使用します。
    • @fluent-disable-sync-for-file: ServiceNow Fluent ファイル (.now.ts) への変更の同期をオフにします。ファイルの 1 行目で使用して、ファイル内のすべてのコードの同期をオフにします。このディレクティブは、ソースコードの外部でファイルに加えられた変更を無視し、同期時に更新しないようにする場合にのみ使用します。

    ServiceNow Fluent を使用してソースコードでアプリケーションメタデータを定義する

    拡張子が .now.ts のファイルで、ServiceNow Fluent API のオブジェクトを使用して、アプリケーションのメタデータを定義します。また、@servicenow/sdk/core からの API に、必要なインポートも含める必要があります。BusinessRule オブジェクトなどのサーバー側スクリプトを持つオブジェクトの場合は、JavaScript モジュールからコードをインポートして使用できます。

    ヒント:
    構文 Now.include('path/to/file') を使用してプロパティからファイルを参照することで、ServiceNow Fluent API で別のファイルのコンテンツを使用できます。JavaScript、HTML、CSS などをサポートするフィールドを持つレコードの場合、コンテンツをインラインで含めるのではなく別のファイルを参照すると、適切な構文をハイライト表示することでさまざまなファイルタイプの開発が容易になります。Now.include ユーティリティは双方向同期をサポートしているため、他のServiceNow AI Platformユーザーインターフェイスからのフィールドへの変更は参照先ファイルのソースコードに同期され、コードへの変更はインスタンス全体のメタデータに同期されます。
    次の例には、アプリケーションのテーブル、クライアントスクリプト、およびビジネスルールの定義が含まれています。クライアントスクリプトは、client-script.jsファイルのスクリプトを使用します。ビジネスルールは、script.js JavaScript モジュールの関数を使用します。
    import '@servicenow/sdk/global'
    import { BusinessRule, ClientScript, DateColumn, StringColumn, Table } from '@servicenow/sdk/core'
    import { showStateUpdate } from '../server/script.js'
    
    //creates todo table, with three columns (deadline, status and task)
    export const x_snc_example_to_do = Table({
        name: 'x_snc_example_to_do',
        schema: {
            deadline: DateColumn({ label: 'Deadline' }),
            state: StringColumn({
                label: 'State',
                choices: {
                    ready: { label: 'Ready' },
                    completed: { label: 'Completed' },
                    inProgress: { label: 'In Progress' },
                },
            }),
            task: StringColumn({ label: 'Task', maxLength: 120 }),
        },
    })
    
    //creates a client script that pops up 'Table loaded successfully!!' message everytime todo record is loaded
    ClientScript({
        $id: Now.ID['cs0'],
        name: 'my_client_script',
        table: 'x_snc_example_to_do',
        active: true,
        appliesExtended: false,
        global: true,
        uiType: 'all',
        description: 'Custom client script generated by Now SDK',
        isolateScript: false,
        type: 'onLoad',
        script: Now.include('../client/client-script.js'),
    })
    
    //creates a business rule that pops up state change message whenever a todo record is updated
    BusinessRule({
        $id: Now.ID['br0'],
        action: ['update'],
        table: 'x_snc_example_to_do',
        script: showStateUpdate,
        name: 'LogStateChange',
        order: 100,
        when: 'after',
        active: true,
    })
    ClientScript オブジェクトから参照されるクライアントスクリプト:
    function onLoad() {
        g_form.addInfoMessage("Table loaded successfully!!")
    }
    BusinessRule オブジェクトから参照される JavaScript モジュール:
    import { gs } from '@servicenow/glide'
    
    export function showStateUpdate(current, previous) { 
        const currentState = current.getValue('state')
        const previousState = previous.getValue('state')
    
        gs.addInfoMessage(`state updated from "${previousState}" to "${currentState}"`)
    }

    アプリケーションをビルドしてインストールした後、このソースコードはインスタンスに次のアプリケーションメタデータファイルを生成します。

    図 : 1. ServiceNow Fluent コードから生成されたアプリケーションメタデータ
    コード例から生成されたアプリケーションファイル。