インスタンス内の ServiceNow テーブルデータを操作する

  • リリースバージョン: Washingtondc
  • 更新日 2024年02月01日
  • 読む8読むのに数分
  • を使用すると Mobile SDK 、インスタンスに存在する ServiceNow テーブルのデータを操作できます。このデータは、ServiceNowREST インターフェイスを直接呼び出す NowTableService() API を使用して REST テーブル API を介して、または REST GraphQL API に対して指定された GraphQL クエリを実行する NowGraphQLService() API を介して操作できます。

    1 回の呼び出しで複数のテーブルからデータを返す場合は、 NowGraphQLService() API を使用する必要があります。他の ServiceNow REST API とやり取りする必要がある場合は、を参照してください インスタンスで ServiceNow パブリック REST API を操作する

    NowGraphQLService を使用したテーブルの操作ServiceNow

    NowGraphQLService クラスは、ログインしたユーザーが適切な権限を持っている場合に、インスタンス内のServiceNow指定されたテーブルで GraphQL クエリを構築して実行できるようにするメソッドを提供します。GraphQL クエリ内のすべての CRUD 操作を定義できます。

    NowGraphQLService は、完了ハンドラーを返すことで、クエリの結果のフェッチをサポートしています。
    func execute(_ query: GraphQLQuery, completion: @escaping (Result<Data, NowDataError>) → Void)
    非同期/待機経由:
    func execute(_ query: GraphQLQuery) async throws -> Data
    または、 コンバイン パブリッシャ(現在は非推奨):
    func publisher(for query: GraphQlQuery) → AnyPublisher<Data, NowDataError>
    
    次の例は、NowData フレームワークをインポートし、インスタンス内のテーブル ServiceNow とのやり取りに使用できる NowGraphQLService オブジェクトを初期化する方法を示しています。
    // Import the NowData framework
    import NowData
    
    // Initialize a NowGraphQLService
    // The makeGraphQLService completion handler returns a result that wraps 
    // the NowGraphQLService upon success or error. 
    
    private func initializeGraphQLService(instanceUrl: URL) {
      makeGraphQLService(instanceUrl: instanceUrl) { [weak self] result in
        switch result {
        case .success(let service):
          self?.graphQLService = service
        case .failure(let error):
          debugPrint("Creating GraphQL service failed with error: \(error.localizedDescription)")
          self?.graphQLService = nil
        }
      }
    }
    この例は、最近公開された KB 記事をフェッチして公開する非同期関数を作成する方法を示しています。
    private func fetchArticles() async throws -> [Article] { 
        guard let graphQLService = graphQLService else { 
            throw ArticleListError.invalidGraphQLService 
        }         
    
        do {
            let data = try await graphQLService.execute(GraphQLQuery(query: recentlyPublishedQuery))
            let articles = try dataToArticleList(data)
        } catch let error as NowDataError {
            throw ArticleListError.fetchError(error)
        } catch {
            throw error
        }
    } 
      
    private let recentlyPublishedQuery = 
    """ 
    
    {
      GlideRecord_Query {
        kb_knowledge(queryConditions: "active=true^ORDERBYpublishedDESC" pagination: { limit: 10, offset: 0 }) {
          _results { 
            sys_id {
              value
            },
            number {
              displayValue
            },
            short_description {
              displayValue
            },
            author {
              displayValue
            }
            published {
              displayValue
            }
          }
        }
      }
    }
    """

    NowTableService を使用したテーブルの操作ServiceNow

    NowTableService クラスは、インスタンス上ServiceNowに存在するテーブルのレコードに対して CRUD 操作を実行するためのメソッドを提供します。このインターフェイスを介して、ログインしているユーザーが許可されているテーブル ServiceNow 内の任意のレコードに直接アクセスできます。NowTableService は、参照フィールドのドット連結をサポートしています。たとえば、テーブルにユーザーテーブルへの参照が含まれている場合、ドット連結の値 user.name ユーザーの名前を返します。

    要求されたデータを返すと、該当するすべてのアクセス制御リスト (ACL) がデータに適用されます。その結果、予想よりも結果が少なくなったり、認証されたユーザーが指定されたテーブルへのアクセス権を持っていない場合は認証エラーが発生する可能性があります。

    ほとんどの NowTableService メソッドには、結果データを返すための 3 つの実装が用意されています。1 つは async/await を使用し、もう 1 つは列挙体を使用して Result 完了ハンドラーを呼び出し、もう 1 つは現在 非推奨の Combine 発行元を返します。

    たとえば、すべての createRecord() メソッドは、指定されたテーブルに構築されたレコードを挿入しますが、

    NowTableService - createRecord(with fields: [FieldName: FieldValue], in tableName: String, writeOptions: FieldWriteOptions, configuration: FieldReadConfiguration, completion: @escaping (Result&lt;Data, NowDataError>)

    メソッドは、列挙体を使用して Result 完了ハンドラーを呼び出します ( .success の場合は、関連付けられた値として結果が含まれます)。

    [変更管理 - リスク アセスメント] プラグインが有効化されているときは、「

    NowTableService - createRecord(withfields: [FieldName: FieldValue], in tableName: String, writeOptions: FieldWriteOptions? = nil, configuration: FieldReadConfiguration? = nil) 非同期スロー

    メソッドは async/await 関数を実行します。一方、

    NowTableService - createRecord(withfields: [FieldName: FieldValue], in tableName: String, writeOptions: FieldWriteOptions? = nil, configuration: FieldReadConfiguration? = nil)

    メソッドは Combine パブリッシャーを返しますが、現在は廃止されています。

    さらに、 NowTableService には、生データを返すメソッドとコード化可能なモデルを返す CRUD メソッドの 2 つの異なる実装が用意されています。たとえば、update() メソッドと updateRecord() メソッドはどちらも指定されたテーブルの指定されたレコードを更新しますが、update() メソッドはコード化可能なモデルを返し、updateRecord() メソッドは生データを返します。場合によっては、厳密に型指定された Codable 構造体が生データフィールドのコレクションよりも柔軟性が高いため、Codable メソッドが望ましい場合があります。

    次の例は、 NowData フレームワークをインポートし、インスタンステーブルの操作 ServiceNow に使用できる NowTableService オブジェクトを初期化する方法を示しています。
    // Import the NowData framework
    import NowData
    
    // Initialize a NowTableService
    // The makeTableService completion handler returns a result that wraps 
    // the NowTableService upon success or error. 
    
    makeTableService(instanceUrl: instanceUrl) { [weak self] result in
      guard let self = self else { return }
      
      switch result {
      case .success(let tableService):
        debugPrint("Successfully created a table service \(tableService)")
        self.tableService = tableService
      case .failure(let error):
        debugPrint("Creating table service failed with error: \(error.localizedDescription)")
      }
    }

    利用可能な NowTableService メソッドを使用するその他のコード例については、API ドキュメントを参照してください NowTableService クラス:iOS