선택적 범위, 전역

  • 릴리스 버전: Washingtondc
  • 업데이트 날짜 2024년 02월 01일
  • 읽기13분
  • 선택 사항 API는 GlideQuery, 스트림 또는 GlideRecord API에서 반환된 단일 기록이 존재하지 않더라도 해당 기록과 상호 작용합니다. null 또는 정의되지 않은 쿼리 결과를 처리하여 오류가 발생할 가능성이 적은 스크립트를 작성합니다.

    다음과 같은 방법으로 Optional 개체를 가져올 수 있습니다.

    이러한 메서드는 정적이며 클래스의 인스턴스가 필요하지 않습니다.

    GlideRecord와 같이 단일 값을 반환하는 모든 API에서 이러한 정적 메서드를 사용할 수 있습니다.

    범위가 지정된 스크립트 또는 전역 서버 측 스크립트에서 선택적 API를 사용합니다. 이 API에는 GlideQuery[com.sn_glidequery] 플러그인이 필요합니다.

    구현

    이 API는 다음의 GlideQuery스트림 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 클래스의 터미널 메서드입니다.

    선택 사항 - 비어 있음(문자열 이유)

    빈 Optional 개체를 반환합니다. Else 절에서 이 메서드를 사용하여 결과를 반환하지 않을 수 있는 쿼리를 처리할 수 있습니다.

    주:
    이 메서드는 정적입니다. 이 메서드를 사용하기 위해 클래스의 인스턴스가 필요하지는 않습니다.
    표 1. 매개변수
    이름 유형 설명
    이유 문자열 옵션입니다. 빈 Optional 객체에서 Optional.get() 이 호출될 때 로그에 표시되는 이유입니다.
    표 2. 반환
    유형 설명
    옵션 단일 기록과 상호작용하는 데 사용되는 객체입니다.

    이 예제에서는 쿼리가 결과를 반환하지 않을 때 빈 Optional 개체를 생성하는 방법을 보여 줍니다.

    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(Function predicate)

    단일 값을 취하고 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 개체를 반환하는 함수를 쿼리 결과에 적용합니다. 이 메서드를 사용하여 첫 번째 쿼리를 사용하여 두 번째 쿼리를 수행합니다.

    표 5. 매개변수
    이름 유형 설명
    Fn 함수 Optional 개체를 반환한 쿼리 결과에 적용할 함수입니다.
    표 6. 반환
    유형 설명
    옵션 단일 기록과 상호작용하는 데 사용되는 객체입니다.

    이 예에서는 이전 쿼리의 결과를 기반으로 User 테이블의 쿼리를 실행하는 방법을 보여 줍니다.

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

    Optional 개체 내의 레코드를 반환하거나, 쿼리가 레코드를 반환하지 않으면 오류를 throw합니다.

    표 7. 매개변수
    이름 유형 설명
    없음
    표 8. 반환
    유형 설명
    임의 Optional 개체 내의 레코드입니다. 값이 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 함수)

    Optional 개체 내의 레코드에 함수를 적용합니다. Optional 개체에 레코드가 포함되어 있지 않으면 함수가 실행되지 않습니다.

    표 9. 매개변수
    이름 유형 설명
    Fn 함수 Optional 개체 내의 레코드에 적용할 함수입니다.
    표 10. 반환
    유형 설명
    없음

    이 예제에서는 값이 있는 경우 값을 인쇄하는 방법을 보여 줍니다.

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

    선택 사항 - isEmpty()

    Optional 개체가 비어 있으면 true를 반환합니다.

    표 11. 매개변수
    이름 유형 설명
    없음
    표 12. 반환
    유형 설명
    부울

    쿼리 결과에 값이 포함되어 있는지 여부를 나타내는 플래그입니다.

    유효한 값은 다음과 같습니다.
    • true: 쿼리가 null 또는 정의되지 않은 값을 반환합니다.
    • false: 쿼리가 값을 반환합니다.

    이 예제에서는 쿼리 결과가 비어 있는지 여부를 확인하는 방법을 보여 줍니다.

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

    출력:

    true

    선택 사항 - isPresent()

    Optional 개체에 값이 포함되어 있는지 여부를 확인합니다.

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

    새 Optional 개체를 반환합니다. 레코드를 포함하는 대신 개체에는 코드에서 요청되는 경우에만 호출되는 레코드를 가져오는 함수가 포함되어 있습니다.

    이 메서드를 사용하여 필요할 때까지 값 가져오기를 지연합니다. 느린 소스에서 값을 요청하고 불필요하게 코드 속도를 늦추고 싶지 않은 경우 이 작업을 수행할 수 있습니다. 그렇지 않으면 GlideQueryStream API를 사용하여 선택적 객체를 반환할 수 있습니다.

    주:
    이 메서드는 정적입니다. 이 메서드를 사용하기 위해 클래스의 인스턴스가 필요하지는 않습니다.
    표 15. 매개변수
    이름 유형 설명
    게으른GetFn 함수 쿼리의 결과로 단일 기록을 반환하는 함수입니다. 예:
    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&lt;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(모든 값)

    Optional 개체에 지정된 값을 래핑합니다. 예를 들어 GlideRecord 쿼리 결과를 Optional 객체에 래핑하여 연결된 메서드를 사용할 수 있습니다.

    주:
    이 메서드는 정적입니다. 이 메서드를 사용하기 위해 클래스의 인스턴스가 필요하지는 않습니다.
    표 19. 매개변수
    이름 유형 설명
    임의 Optional 개체 내부의 값입니다.
    표 20. 반환
    유형 설명
    옵션 Optional&lt;value> 형식으로 전달된 값을 포함하는 객체입니다.

    이 예시에서는 GlideRecord 쿼리를 기반으로 Optional 객체를 생성하는 방법을 보여줍니다.

    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(Any defaultValue)

    쿼리가 결과를 반환하지 않는 경우 Optional 개체 내에 기본값을 추가합니다.

    표 21. 매개변수
    이름 유형 설명
    defaultValue 임의 쿼리가 아무 결과도 반환하지 않는 경우 Optional 개체 내의 값입니다.
    표 22. 반환
    유형 설명
    임의 쿼리가 아무 결과도 반환하지 않는 경우 Optional 개체 내의 값입니다.

    이 예제에서는 쿼리가 올바르지 않은 경우에도 값을 반환하는 방법을 보여 줍니다.

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