NowGraphQLService クラス - iOS

  • リリースバージョン: Xanadu
  • 更新日 2024年08月01日
  • 所要時間:7分
  • NowGraphQLService クラスには、GraphQL REST API を介して ServiceNow インスタンス上のデータに対して GraphQL クエリを使用して要求を行うことができる関数が用意されています。

    表 : 1. プロパティ
    名前 タイプ Description (説明)
    構成 NowServiceConfiguration サービスが初期化されたときに指定された構成設定。

    NowGraphQLService - execute(query: GraphQLQuery) async throws

    指定された GraphQL クエリを実行します。

    表 : 2. パラメーター
    名前 タイプ 説明
    クエリ 文字列 実行する GraphQL クエリ。
    表 : 3. 返される内容
    タイプ 説明
    Data (データ) メソッドが成功したときに返されます。指定されたクエリから生成されたクエリデータ。
    NowDataError メソッドが失敗したときにスローされます。
    • accessToken(アクセストークンプロバイダーエラー)
      • AccessTokenProviderError:アクセストークンプロバイダーのエラーコードまたはメッセージ。
        • アクセストークン取得に失敗しました
        • userSessionError(_エラー:エラー)

      アクセストークンにエラーがある場合にスローされます。

    • attachmentValidation

      添付ファイルが検証に失敗したときにスローされます。

    • badResponse(statusCode: HTTPStatusCode)
      • HTTPStatusCode:インスタンスから受信したステータスコード。

      要求が予期しない応答を返した場合にスローされます

    • cannotDecodeModel(デコードエラー)
      • DecodingError:デコードエラーが検出されました。

      Codable モデルを JSON からデコードできない場合にスローされます。

    • cannotDecodeProperty(タイプ:任意、差出人:文字列)
      • type:文字列からデコードするラップされた型。
      • from:指定されたタイプにデコードする文字列。

      文字列でラップされた値を JSON からデコードできない場合にスローされます。

    • cannotEncodeModel(エンコーディングエラー)
      • EncodingError:エンコードエラーが検出されました。

      Codable モデルを JSON にエンコードできない場合にスローされます。

    • cannotParseResponse

      インスタンスからの応答を予期される形式に解析できない場合にスローされます。

    • 無効な URL

      URL を形成できない場合にスローされます。たとえば、文字列に URL で無効な文字が含まれているか、空の文字列である場合などです。

    • missingAttachmentMetadata

      添付ファイルのメタデータヘッダーがない場合にスローされます。

    • missingServiceConfiguration

      予期されるサービス構成がない場合にスローされます。

    • missingSysID

      予期されるsys_idパラメーターがない場合にスローされます。

    • network(NetworkServiceError)
      • genericError(文字列)
      • operationCanceled
      • serviceDisabled
      • serverError(エラー)
      • systemError(エラー)

      ネットワークサービスでエラーが発生した場合にスローされます。

    次のコード例は、このメソッドを呼び出す方法を示しています。

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

    NowGraphQLService - execute(query: GraphQLQuery, completion: @escaping (Result<Data, NowDataError>))

    指定された GraphQL クエリを実行します。

    表 : 4. パラメーター
    名前 タイプ 説明
    クエリ 文字列 実行する GraphQL クエリ。
    完了 @escaping (結果<データ、NowDataError>) クエリの完了後に実行する完了ハンドラー。
    戻り値:
    • 成功:クエリデータを返します。
    • エラー:NowDataError
    表 : 5. 返される内容
    タイプ 説明
    なし

    gqlService.execute(GraphQLQuery(query: myQuery)) { result in 
      switch result { 
      case .success(let data): 
        // use data 
      case .failure(let error): 
        // handle error 
      } 
    }

    NowGraphQLService - init(configuration: NowServiceConfiguration, coreServiceProvider: NowCoreServiceProviding)

    指定されたパラメーターに基づいて NowGraphQLService を作成します。

    表 : 6. パラメーター
    名前 タイプ Description (説明)
    構成 NowServiceConfiguration サービスを初期化するときに使用する設定パラメーター (サービスと統合するアプリケーションのバンドル ID や、NowGraphQLService がアクセスする ServiceNow インスタンスの URL など)。
    coreServiceProvider NowCoreServiceOffering オプション。コアサービスプロバイダー。
    注:
    現在、このパラメーターはオプションとして表示されていますが、必須です。

    デフォルト:nil

    NowGraphQLService - publisher (クエリ用:GraphQLQuery)

    GraphQL データを要求するパブリッシャーを作成します。

    注:
    このメソッドは廃止されました。代わりに、メソッドの async/await 実装を使用する必要があります。
    表 : 7. パラメーター
    名前 タイプ Description (説明)
    クエリの場合 GraphQLQuery 実行する GraphQL クエリ文字列。
    表 : 8. 返される内容
    タイプ Description (説明)
    AnyPublisher<Data、NowDataError> 成功:GraphQL データセット。

    失敗:NowDataError

    次のコード例は、この関数を呼び出す方法を示しています。

    private func fetchArticles() -> AnyPublisher<[Article], ArticleListError> {
      guard let graphQLService = graphQLService else {
        return Fail(error: .invalidGraphQLService).eraseToAnyPublisher()
      }
            
      return graphQLService.publisher(for: GraphQLQuery(query: recentlyPublishedQuery))
        .mapError({ dataError -> ArticleListError in
          .fetchError(dataError)
        })
        .flatMap(dataToArticleList)
        .eraseToAnyPublisher()
    }