オプション:スコープ対象、グローバル

  • リリースバージョン: Australia
  • 更新日 2026年03月12日
  • 所要時間:13分
  • オプションの API は、GlideQueryStream、または GlideRecord API によって返された単一のレコードを、存在しない場合でも操作します。null または未定義のクエリ結果を処理することで、エラーが発生する可能性が低いスクリプトを記述します。

    オプションのオブジェクトは、次の方法で取得できます。

    これらのメソッドは静的であり、クラスのインスタンスを必要としません。

    これらの静的メソッドは、単一の値を返す任意の API ( GlideRecord など) で使用できます。

    スコープ対象またはグローバルサーバーサイドスクリプトで オプション の API を使用します。この API には GlideQuery [com.sn_glidequery] プラグインが必要です。

    実装

    この API は、 GlideQuery API および Stream API と連携します。 メソッドの呼び出しが連鎖するビルダーパターンで、各メソッドは前のメソッドの返された結果に基づいて構築されます。メソッドを使用してクエリーの属性を定義します。メソッドは、ターミナルメソッド (クエリ結果を返すメソッド) を呼び出すまで実行されません。これにより、クエリを実行する前にクエリの要件を定義できます。

    クエリーが単一のレコードを返す場合、システムは結果をオプションのオブジェクトにラップします。クエリーがレコードのストリームを返す場合、システムは結果を Stream オブジェクトにラップします。これらのオブジェクトを使用すると、各 API の一連のメソッドを使用して結果を管理できます。

    たとえば、このスクリプトはタスク テーブルに対してクエリを実行し、レコードを優先度別にグループ化して、合計再アサイン回数が 4 回を超える各優先度を返します。

    var query = new global.GlideQuery('task')
        .where('active', true) //Returns new GlideQuery object with a "where" clause.
        .groupBy('priority') //Returns new GlideQuery object with a "group by" clause.
        .aggregate('sum', 'reassignment_count') //Returns new GlideQuery object with a "sum(reassignment_count)" clause.
        .having('sum', 'reassignment_count', '>', 4) //Returns new GlideQuery object with a "having reassignment_count > 4" clause.
        .select() //Returns a stream of records wrapped in a Stream object.  
        .forEach(function (priority){ //Terminal method in the Stream class that executes the query and returns the result. 
          gs.info("Priority " + priority.group.priority + ": " + priority.sum.reassignment_count + " reassignments");
        });
    出力:
    Priority 1: 11 reassignments
    Priority 3: 6 reassignments
    Priority 5: 5 reassignments

    ターミナルメソッド

    パフォーマンス上の理由から、クエリはターミナルメソッドを呼び出した場合にのみデータをフェッチします。以下は 、Optional クラスのターミナルメソッドです。

    オプション:空 (文字列の理由)

    空のオプションオブジェクトを返します。このメソッドを Else 句で使用して、結果を返さない可能性があるクエリを処理します。

    注:
    このメソッドは静的です。このメソッドを使用するためにクラスのインスタンスは必要ありません。
    表 : 1. パラメーター
    名前 タイプ 説明
    理由 文字列 オプション。空の Optional オブジェクトで Optional.get() が呼び出されたときにログに表示される理由。
    表 : 2. 返される内容
    タイプ 説明
    オプション 単一のレコードを操作するために使用されるオブジェクト。

    この例では、クエリーが結果を返さない場合に空のオプションオブジェクトを生成する方法を示します。

    var now_GR = new GlideRecord('task');
    now_GR.addQuery('approval', 'not requested'); 
    now_GR.query();
    var optional;
    if (now_GR.next()) {
    optional = Optional.of(now_GR.getUniqueValue());
    } else {
        optional = Optional.empty("no results");
    }
    
    gs.info(optional.get());

    出力:

    NiceError: [2020-08-26T23:23:37.402Z]: get() called on empty Optional: no results

    オプション:filter(関数述語)

    述語関数 (単一の値を受け取り、true または false を返す関数) を Optional オブジェクト内のレコードに適用します。この関数が true を返す場合、メソッドはオプションのレコードを変更せずに返します。関数が false を返す場合は、空の Optional オブジェクトを返します。

    表 : 3. パラメーター
    名前 タイプ 説明
    述語 関数 Optional オブジェクト内の値に適用する述語関数。ブール値を返す必要があります。
    表 : 4. 返される内容
    タイプ 説明
    オプション 単一のレコードを操作するために使用されるオブジェクト。

    この例では、オプションの結果にフィルター関数を適用する方法を示します。

    var filteredQuery = new global.GlideQuery('sys_user')
        .getBy({ sys_id: 'f682abf03710200044e0bfc8bcbe5d38' }, ['phone'])
        .filter(function (user) {
            return phoneRegex.test(user.phone);
        });

    オプション:flatMap(関数 fn)

    Optional オブジェクトを返す関数をクエリーの結果に適用します。このメソッドを使用して、最初のクエリの結果を使用して 2 番目のクエリを実行します。

    表 : 5. パラメーター
    名前 タイプ 説明
    fn 関数 オプションのオブジェクトを返したクエリの結果に適用する関数 。
    表 : 6. 返される内容
    タイプ 説明
    オプション 単一のレコードを操作するために使用されるオブジェクト。

    この例では、前のクエリの結果に基づいてユーザーテーブルのクエリを実行する方法を示します。

    new global.GlideQuery('alm_asset')
        .whereNotNull('owned_by')
        .selectOne('owned_by')
        .flatMap(function (asset) {
            return new global.GlideQuery('sys_user')
                .getBy({ sys_id: asset.owned_by }, ['first_name', 'last_name', 'company.name'])
        })
        .ifPresent(GQ.jsonDebug);

    出力:

    {
      "sys_id": "46d59205a9fe198101d603f5de37bfa3",
      "first_name": "John",
      "last_name": "Bohnhamn",
      "company": {
        "name": "ACME North America"
      }
    }

    オプション:get()

    オプションオブジェクト内のレコードを返すか、クエリがレコードを返さない場合はエラーをスローします。

    表 : 7. パラメーター
    名前 タイプ 説明
    なし
    表 : 8. 返される内容
    タイプ 説明
    任意 オプションオブジェクト内のレコード。値が null または未定義の場合、システムはエラーをスローします。

    この例は、単一のレコードの値を取得する方法を示しています。

    var value = new global.GlideQuery('sys_user')
        .selectOne('first_name') //Returns the result of the query inside an Optional object
        .get(); //Calls Optional.get() on the Optional object
    
    gs.info(JSON.stringify(value));

    出力:

    {
       "first_name":"fred",
       "sys_id":"005d500b536073005e0addeeff7b12f4"
    }

    オプション:ifPresent(関数 fn)

    オプションオブジェクト内のレコードに関数を適用します。オプションのオブジェクトにレコードが含まれていない場合、関数は実行されません。

    表 : 9. パラメーター
    名前 タイプ 説明
    fn 関数 オプションオブジェクト内のレコードに適用する機能。
    表 : 10. 返される内容
    タイプ 説明
    なし

    この例では、値が存在する場合に出力する方法を示します。

    var user = new global.GlideQuery('sys_user')
        .where('sys_id', 'f682abf03710200044e0bfc8bcbe5d38')
        .selectOne('zip')
        .ifPresent(function (user) {
          gs.info('Zip Code: ' + user.zip);
        });

    オプション:isEmpty()

    オプションのオブジェクトが空の場合は true を返します。

    表 : 11. パラメーター
    名前 タイプ 説明
    なし
    表 : 12. 返される内容
    タイプ 説明
    ブーリアン

    クエリの結果に値が含まれているかどうかを示すフラグ。

    有効な値:
    • true:クエリは null または未定義を返します。
    • false:クエリは値を返します。

    この例では、クエリの結果が空かどうかを確認する方法を示します。

    var checkEmpty = new global.GlideQuery('sys_user')
        .where('last_name', 'Barker')
        .selectOne()
        .isEmpty();
    
    gs.info(checkEmpty);

    出力:

    true

    オプション:isPresent()

    オプションのオブジェクトに値が含まれているかどうかを確認します。

    表 : 13. パラメーター
    名前 タイプ 説明
    なし
    表 : 14. 返される内容
    タイプ 説明
    ブーリアン

    クエリの結果に値が含まれているかどうかを示すフラグ。

    有効な値:
    • true:クエリは値を返します。
    • false:クエリは null または未定義を返します。

    この例では、クエリーが結果を返すかどうかを確認する方法を示します。

    var checkPresent = new global.GlideQuery('sys_user')    
       .where('last_name', 'Luddy')
       .selectOne('first_name')
       .isPresent();
    
    gs.info(checkPresent);

    出力:

    true

    オプション:lazy(関数:lazyGetFn)

    新しいオプションオブジェクトを返します。オブジェクトには、レコードを含むのではなく、コードで要求された場合にのみ呼び出されるレコードを取得する関数が含まれています。

    このメソッドを使用して、必要になるまで値の取得を遅らせます。これは、遅いソースから値を要求し、コードの速度を不必要に低下させたくない場合は、実行できます。それ以外の場合は、 GlideQuery API と Stream API を使用してオプションのオブジェクトを返すことができます。

    注:
    このメソッドは静的です。このメソッドを使用するためにクラスのインスタンスは必要ありません。
    表 : 15. パラメーター
    名前 タイプ 説明
    lazyGetFn 関数 クエリの結果として単一のレコードを返す関数。例を次に示します。
    var userGr = new GlideRecord('sys_user');
    表 : 16. 返される内容
    タイプ 説明
    オプション Optional<result> の形式のクエリ結果を含むオブジェクト。

    この例では、GlideRecord クエリに基づいてオプションのオブジェクトを取得する方法を示します。

    var userOptional = global.Optional.lazy(function () {
        var userGr = new GlideRecord('sys_user');
        userGr.setLimit(1);
        userGr.query();
        return userGr.next() ? userGr.getUniqueValue() : null;
    });
    
    gs.info(userOptional);

    出力:

    Optional<005d500b536073005e0addeeff7b12f4>

    オプション:map(関数 fn)

    クエリーの結果に関数を適用します。

    表 : 17. パラメーター
    名前 タイプ 説明
    fn 関数 クエリの結果に適用する関数。
    表 : 18. 返される内容
    タイプ 説明
    オプション Optional<result> の形式で関数によって更新されたクエリの結果を含むオブジェクト。

    この例では、値を大文字に変換してクエリーの結果に変換する関数を適用する方法を示します。

    var value = new global.GlideQuery('sys_user')
        .whereNotNull('first_name')
        .selectOne('first_name')
        .map(function (user) {
    	       return user.first_name.toUpperCase();
        });
    
    gs.info(value);

    出力:

    Optional<ABEL>

    オプション:of(任意の値)

    指定された値をオプションのオブジェクトにラップします。たとえば、GlideRecord クエリの結果を Optional オブジェクトでラップして、関連するメソッドを使用できます。

    注:
    このメソッドは静的です。このメソッドを使用するためにクラスのインスタンスは必要ありません。
    表 : 19. パラメーター
    名前 タイプ 説明
    value 任意 オプションのオブジェクト内の値。
    表 : 20. 返される内容
    タイプ 説明
    オプション Optional<value> の形式で渡された値を含むオブジェクト。

    この例では、GlideRecord クエリに基づいてオプションのオブジェクトを生成する方法を示します。

    var now_GR = new GlideRecord('task');
    now_GR.addQuery('approval', 'not requested'); 
    now_GR.query();
    var optional;
    if (now_GR.next()) {
    optional = Optional.of(now_GR.getUniqueValue());
    } else {
        optional = Optional.empty("no results");
    }
    
    gs.info(optional.get());

    出力:

    00c269162d761010f87708b56757cbb3

    オプション:orElse(任意の defaultValue)

    クエリが結果を返さない場合は、オプションのオブジェクト内にデフォルト値を追加します。

    表 : 21. パラメーター
    名前 タイプ 説明
    defaultValue 任意 クエリが結果を返さない場合は、オプションのオブジェクト内の値。
    表 : 22. 返される内容
    タイプ 説明
    任意 クエリが結果を返さない場合は、オプションのオブジェクト内の値。

    この例は、クエリが正しくない場合でも値を返す方法を示しています。

    var user = new global.GlideQuery('sys_user')
        .get('1234', ['first_name', 'last_name'])
        .orElse({ first_name: 'Default', last_name: 'User' });
    
    gs.info(JSON.stringify(user))

    出力:

    {
       "first_name":"Default",
       "last_name":"User"
    }