NowAttachmentService クラス - iOS
NowAttachmentService クラスは、ServiceNowインスタンスのテーブル内のレコードに関連付けられている添付ファイルをアップロードしてクエリを実行できるようにする関数を提供します。
要求ごとに 1 つのファイルをアップロードまたは取得できます。NowAttachmentService は、最大ファイルサイズや許可されている添付ファイルタイプなど、アップロードされたファイルに対するシステム制限を尊重します。これらの設定は、インスタンスプロパティ com.glide.attachment.max_size (デフォルトでは 1024MB)、および glide.attachment.extensions を使用して制御できます。
| 名前 | タイプ | 説明 |
|---|---|---|
| 構成 | NowServiceConfiguration | サービスの初期化時に指定された構成設定。 |
NowAttachmentService - attachment(sysId:文字列、validateAttachment:ブールの場合) 非同期がスローします
指定されたsys_idの添付ファイルを取得し、添付ファイルの計算済みハッシュを予想される SHA256 チェックサムと比較して添付ファイルを検証します。
false に設定すると、検証ステップをスキップできます。必要に応じて、 Attachment.validate() 関数を呼び出すことで、後の段階で添付ファイルを検証できます。| 名前 | タイプ | 説明 |
|---|---|---|
| sysId 用 | 文字列 | 取得する添付ファイルのSys_id。 |
| validateAttachment | ブール | 添付ファイルを検証するかどうかを示すフラグ。 有効な値:
デフォルト:true |
| タイプ | 説明 |
|---|---|
| NowAttachment | メソッドが成功したときに返されます。指定された添付ファイル。 |
| NowDataError | メソッドが失敗したときにスローされます。
|
次のコード例は、このメソッドを呼び出す方法を示しています。
func downloadAttachment(sysId: String) async throws -> NowAttachment {
do {
let nowAttachment = try await attachmentService.attachment(for: sysId, validateAttachment: false)
return nowAttachment
} catch {
// Handle NowDataError
throw error
}
}
NowAttachmentService - attachment(sysId の場合:String, validateAttachment: Boolean, completion: @escaping (Result<NowAttachment, NowDataError>))
指定されたsys_idの添付ファイルを取得し、添付ファイルの計算済みハッシュを予想される SHA256 チェックサムと比較して添付ファイルを検証します。完了すると、渡された完了ハンドラーが実行されます。
false に設定すると、検証ステップをスキップできます。必要に応じて、 Attachment.validate() 関数を呼び出すことで、後の段階で添付ファイルを検証できます。| 名前 | タイプ | 説明 |
|---|---|---|
| sysId 用 | 文字列 | 取得する添付ファイルのSys_id。 |
| validateAttachment | ブール | 添付ファイルを検証するかどうかを示すフラグ。 有効な値:
デフォルト:true |
| 完了 | @escaping (Result<NowAttachment, NowDataError>) | 添付ファイルを取得した後に実行する補完ハンドラー。 補完ハンドラーの戻り値:
|
| タイプ | 説明 |
|---|---|
| なし |
次のコード例は、この関数を呼び出す方法を示しています。
let sysId = UUID().uuidString // UUID for the attachment
private func downloadAttachment(sysId: String) {
attachmentService.attachment(for: sysId, validateAttachment: false) { (result) in
switch result {
case .success(let attachment):
// Attachment retrieved successful, return attachment
case .failure(let error):
// Attachment retrieved failed, return NowDataError
}
}
}
NowAttachmentService - attachment(sysId の場合:文字列、validateAttachment:ブール)
指定されたsys_idの添付ファイルを取得し、添付ファイルの計算済みハッシュと予想されるハッシュを比較して添付ファイルを検証します。
false に設定すると、検証ステップをスキップできます。必要に応じて、後の段階で Attachment.validate() 関数を呼び出して添付ファイルを検証できます。| 名前 | タイプ | 説明 |
|---|---|---|
| sysId 用 | 文字列 | 取得する添付ファイルのSys_id。 |
| validateAttachment | ブール | 添付ファイルを検証するかどうかを示すフラグ。 有効な値:
デフォルト:true |
| タイプ | 説明 |
|---|---|
| AnyPublisher<NowAttachment、NowDataError> | 成功: NowAttachment :指定された添付ファイルが含まれます。 エラー:NowDataError
|
次のコード例は、この関数を呼び出す方法を示しています。
let sysId = UUID().uuidString // UUID for the attachment
private func downloadAttachment(sysId: String) {
let publisher = self.attachmentService.attachment(for: sysId, validateAttachment: false)
publisher
.receive(on: DispatchQueue.main)
.sink { [weak self] completion in
if case let .failure(error) = completion {
// Attachment retrieved failed, return NowDataError
}
} receiveValue: { [weak self] (attachment) in
// Attachment retrieved successful, return attachment
}
.store(in: &subscriptions)
}
NowAttachmentService - attachmentMetadata(filter: Filter, limit: Int) async throws
指定された基準を満たすすべての添付ファイルのメタデータを取得します。
| 名前 | タイプ | 説明 |
|---|---|---|
| フィルター | フィルター | オプション。メタデータを返す添付ファイルをフィルタリングするために使用するクエリ文字列。 デフォルト:nil - 利用可能なすべての添付ファイルのメタデータを返します。limitパラメーターが考慮されます。 |
| limit | 整数 | オプション。返す添付ファイルのメタデータの最大数。 デフォルト:nil - filter パラメーターの仕様を満たすすべてのメタデータを返します。 |
| タイプ | 説明 |
|---|---|
| [NowAttachmentMetadata] | メソッドが成功したときに返されます。一致する添付ファイルのメタデータを含むアレイ。 |
| NowDataError | メソッドが失敗したときにスローされます。
|
次のコード例は、このメソッドを呼び出す方法を示しています。
let filter = Filter(criteria: [], sortBy: [.desc("created")],
queryCategory: nil)
do {
let metadata = try await attachmentService.attachmentMetadata(filter: filter, limit: 10)
// Metadata retrieval successful
} catch {
// Metadata retrieval failed, NowDataError thrown
}
NowAttachmentService - attachmentMetadata(filter: Filter, limit: Int, completion: @escaping (Result<[NowAttachmentMetadata], NowDataError>))
指定された基準を満たすすべての添付ファイルのメタデータを取得します。
| 名前 | タイプ | 説明 |
|---|---|---|
| フィルター | フィルター | オプション。メタデータを返す添付ファイルをフィルタリングするために使用するクエリ文字列。 デフォルト:nil - 利用可能なすべての添付ファイルのメタデータを返します。limitパラメーターが考慮されます。 |
| limit | 整数 | オプション。返す添付ファイルのメタデータの最大数。 デフォルト:nil - filter パラメーターの仕様を満たすすべてのメタデータを返します。 |
| 完了 | @escaping (結果<[NowAttachmentMetadata], NowDataError>) | メタデータが取得された後に実行する補完ハンドラー。 補完ハンドラーの戻り値:
|
| タイプ | 説明 |
|---|---|
| なし |
次のコード例は、この関数を呼び出す方法を示しています。
let query = "active=true^short_descriptionLIKEbroken"
let filter = Filter(query: query)
attachmentService.attachmentMetadata(filter: filter, limit: limit) { (result) in
DispatchQueue.main.async { [weak self] in
switch result {
case .success(let response):
do {
let data = try JSONEncoder().encode(response)
// Retrieve metadata successfully, return data
} catch {
// Retrieve metadata failed, return error
}
case .failure(let error):
// Retrieve metadata failed, return NowDataError
}
}
}
NowAttachmentService - attachmentMetadata(filter: Filter, limit: Int)
指定された基準を満たすすべての添付ファイルのメタデータを取得します。
| 名前 | タイプ | 説明 |
|---|---|---|
| フィルター | フィルター | オプション。メタデータを返す添付ファイルをフィルタリングするために使用するクエリ文字列。 デフォルト:nil - 利用可能なすべての添付ファイルのメタデータを返します。limitパラメーターが考慮されます。 |
| limit | 整数 | オプション。返す添付ファイルのメタデータの最大数。 デフォルト:nil - filter パラメーターの仕様を満たすすべてのメタデータを返します。 |
| タイプ | 説明 |
|---|---|
| AnyPublisher<[NowAttachmentMetadata]、NowDataError> | 成功:NowAttachmentMetadata:一致する添付ファイルのメタデータを含むオブジェクト。 エラー:NowDataError
|
次のコード例は、この関数を呼び出す方法を示しています。
let query = "active=true^short_descriptionLIKEbroken"
let filter = Filter(query: query)
let publisher = self.attachmentService.attachmentMetadata(filter: filter)
publisher
.receive(on: DispatchQueue.main)
.encode(encoder: JSONEncoder())
.sink { [weak self] completion in
if case let .failure(error) = completion {
// Retrieve metadata failed, return NowDataError
} receiveValue: { [weak self] (data) in
// Retrieve metadata successfully, return data
}
.store(in: &subscriptions
NowAttachmentService - attachmentMetadata(sysId の場合:文字列) 非同期がスローします
指定されたsys_idに関連付けられている添付ファイルのメタデータを取得します。
| 名前 | タイプ | 説明 |
|---|---|---|
| sysId 用 | 文字列 | メタデータを取得する添付ファイルのSys_id。 |
| タイプ | 説明 |
|---|---|
| NowAttachmentMetadata | メソッドが成功したときに返されます。要求された添付ファイルのメタデータ。 |
| NowDataError | メソッドが失敗したときにスローされます。
|
次のコード例は、このメソッドを呼び出す方法を示しています。
do {
let metadata = try await attachmentService.attachmentMetadata(for: sysId)
// Metadata retrieval successful
} catch {
// Metadata retrieval failed, NowDataError thrown
}
NowAttachmentService - attachmentMetadata(sysId: String, completion: @escaping (Result<NowAttachmentMetadata, NowDataError>))
指定されたsys_idに関連付けられた添付ファイルのメタデータを取得し、メタデータが取得された後に補完ハンドラーを実行します。
| 名前 | タイプ | 説明 |
|---|---|---|
| sysId 用 | 文字列 | メタデータを取得する添付ファイルのSys_id。 |
| 完了 | @escaping (Result<NowAttachmentMetadata, NowDataError>) | メタデータが取得された後に実行する補完ハンドラー。 補完ハンドラーの戻り値:
|
| タイプ | 説明 |
|---|---|
| なし |
次のコード例は、この関数を呼び出す方法を示しています。
let sysId = UUID().uuidString // UUID for the attachment
attachmentService.attachmentMetadata(for: sysId) { (result) in
DispatchQueue.main.async { [weak self] in
switch result {
case .success(let response):
do {
let data = try JSONEncoder().encode(response)
// Retrieve metadata successfully, return data
} catch {
// Retrieve metadata failed, return error
}
case .failure(let error):
// Retrieve metadata failed, return NowDataError
}
}
}
NowAttachmentService - attachmentMetadata(sysId の場合:文字列)
指定されたsys_idに関連付けられている添付ファイルのメタデータを取得します。
| 名前 | タイプ | 説明 |
|---|---|---|
| sysId 用 | 文字列 | メタデータを取得する添付ファイルのSys_id。 |
| タイプ | 説明 |
|---|---|
| AnyPublisher<[NowAttachmentMetadata]、NowDataError> | 成功:NowAttachmentMetadata:要求された添付ファイルのメタデータを含むオブジェクト。 エラー:NowDataError
|
次のコード例は、この関数を呼び出す方法を示しています。
let sysId = UUID().uuidString // UUID for the attachment
let publisher = self.attachmentService.attachmentMetadata(for: sysId)
publisher
.receive(on: DispatchQueue.main)
.encode(encoder: JSONEncoder())
.sink { [weak self] completion in
if case let .failure(error) = completion {
// Retrieve metadata failed, return NowDataError
}
} receiveValue: { [weak self] (data) in
// Retrieve metadata successfully, return data
}
.store(in: &subscriptions)
NowAttachmentService - attachmentMetadataPaginator(filter: Filter, limit: Int)
指定された基準を満たすすべての添付ファイルのメタデータを取得し、返されたメタデータのページを反復処理するための Paginator オブジェクトを返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| フィルター | フィルター | オプション。メタデータを返す添付ファイルをフィルタリングするために使用するクエリ文字列。 デフォルト:nil - 利用可能なすべての添付ファイルのメタデータを返します。limitパラメーターが考慮されます。 |
| limit | 整数 | オプション。返す添付ファイルのメタデータの最大数。 デフォルト:nil - filter パラメーターの仕様を満たすすべてのメタデータを返します。 |
| タイプ | 説明 |
|---|---|
| Paginator<[NowAttachmentMetadata]> | 成功:NowAttachmentMetadata オブジェクトのアレイ。 失敗:NowDataError オブジェクト。
|
次のコード例は、この関数を呼び出す方法を示しています。
let paginator: Paginator<T> = makePaginator(query: query, fetchLimit: 1)
func makePaginator(query: String, fetchLimit: Int?) -> Paginator<[NowAttachmentMetadata]> {
attachmentsService.attachmentMetadataPaginator(filter: Filter(query: query), limit: fetchLimit)
}
NowAttachmentService - delete(sysId: String) 非同期がスローします
指定したsys_idの添付ファイルを削除します。
| 名前 | タイプ | 説明 |
|---|---|---|
| sysId | 文字列 | 削除する添付ファイルの sys_id。 |
| タイプ | 説明 |
|---|---|
| なし | メソッドが成功した場合は何も返されません。 |
| NowDataError | メソッドが失敗したときにスローされます。
|
次のコード例は、このメソッドを呼び出す方法を示しています。
do {
try await attachmentService.delete(sysId: sysId)
// Deletion successful
} catch {
// Deletion failed, NowDataError thrown
}
NowAttachmentService - delete(sysId: String, completion: @escaping (Result<Void, NowDataError>))
指定されたsys_idの添付ファイルを削除し、添付ファイルが削除された後に、渡された完了ハンドラーを実行します。
| 名前 | タイプ | 説明 |
|---|---|---|
| sysId | 文字列 | 削除する添付ファイルの sys_id。 |
| 完了 | @escaping (Result<Void, NowDataError>) | 添付ファイルが削除された後に実行する補完ハンドラー。 補完ハンドラーの戻り値:
|
| タイプ | 説明 |
|---|---|
| なし |
次のコード例は、この関数を呼び出す方法を示しています。
let sysId = UUID().uuidString // UUID for the attachment
attachmentService.delete(sysId: sysId) { (result) in
DispatchQueue.main.async { [weak self] in
switch result {
case .success:
// Attachment with sysId is deleted
case .failure(let error):
// Failed to delete, with NowDataError
}
}
}
NowAttachmentService - delete(sysId: String)
指定したsys_idの添付ファイルを削除します。
| 名前 | タイプ | 説明 |
|---|---|---|
| sysId | 文字列 | 削除する添付ファイルの sys_id。 |
| タイプ | 説明 |
|---|---|
| AnyPublisher<Void、NowDataError> | 成功:何も返されませんでした エラー:NowDataError
|
次のコード例は、この関数を呼び出す方法を示しています。
let publisher = attachmentService.delete(sysId: sysId)
publisher
.receive(on: DispatchQueue.main)
.sink { [weak self] completion in
switch completion {
case .finished:
// Attachment with sysId is deleted
case .failure(let error):
// Failed to delete, with NowDataError
}
} receiveValue: {
}
.store(in: &subscriptions)
NowAttachmentService - init(configuration: NowServiceConfiguration, coreServiceProvider: NowCoreServiceProviding)
新しい NowAttachmentService インスタンスを初期化します。
| 名前 | タイプ | 説明 |
|---|---|---|
| 構成 | NowServiceConfiguration | サービスを適切に初期化するために必要な構成情報。 |
| コアサービスプロバイダ | NowCoreServiceProviding | オプション。NowCoreServiceProviding プロトコルを実装するオブジェクト。 デフォルト:nil |
次のコード例は、この関数を呼び出す方法を示しています。
guard let coreService = NowSDK.core() else {
// Error with NowServiceError.sdkNotConfigured
return
}
guard
let instanceUrl = URL(string: "http://sample.service-now.com"),
let serviceConfig = NowSDK.makeServiceConfiguration(for: instanceUrl) else {
// Could not create service –
// NowServiceError.serviceConfigurationInvalid
return
}
let attachmentService = NowAttachmentService(configuration: serviceConfig, coreServiceProvider: coreService)
NowAttachmentService - upload(data: Data, configuration: NowAttachmentUploadConfiguration, progressUpdate: @escaping ProgressUpdate) async throws
添付ファイルデータをアップロードし、アップロード構成で指定されたテーブルのレコードに添付します。
ProgressUpdate コールバックは、UI フィードバックを提供するために使用できるアップロードの進行状況情報を提供します。
| 名前 | タイプ | 説明 |
|---|---|---|
| データ | データ | アップロードする添付ファイル。 |
| 構成 | NowAttachmentUpload 構成 | 次のような、添付ファイルのアップロードパラメーターを定義する構成情報。
|
| 進行状況の更新 | @escaping ProgressUpdate | 添付ファイルを取得した後に実行する補完ハンドラー。これは、アップロードプロセスが完了するまで複数回呼び出されます。 補完ハンドラーの戻り値: ProgressUpdate - アップロードの現在の進行状況を返します。
|
| タイプ | 説明 |
|---|---|
| NowAttachmentMetadata | メソッドが成功したときに返されます。アップロードされたメタデータを含むオブジェクト。 |
| NowDataError | メソッドが失敗したときにスローされます。
|
次のコード例は、このメソッドを呼び出す方法を示しています。
func uploadFile(for tableName: String, sysId: String, mimeType: String, encryptionContext: String?, data: Data, filename: String) async throws -> NowAttachmentMetadata {
let mimeType = MediaUtilities.mimeType(forFileName: filename)
let uploadConfig = NowAttachmentUploadConfiguration(tableName: tableName,
recordSysId: sysId,
fileName: filename,
contentType: mimeType,
encryptionContext: encryptionContext)
do {
let attachmentMetadata = try await attachmentService.upload(data: data, configuration: uploadConfig) { (_, _, _) in }
return attachmentMetadata
} catch {
// Handle NowDataError
throw error
}
}
NowAttachmentService - upload(data: Data, configuration: NowAttachmentUploadConfiguration, progressUpdate: @escaping ProgressUpdate, completion: @escaping (Result<NowAttachmentMetadata, NowDataError>))
添付ファイルデータをアップロードし、アップロード構成で指定されたテーブルのレコードに添付します。
ProgressUpdate コールバックは、UI フィードバックを提供するために使用できるアップロードの進行状況情報を提供します。
| 名前 | タイプ | 説明 |
|---|---|---|
| データ | データ | アップロードする添付ファイル。 |
| 構成 | NowAttachmentUpload 構成 | 次のような、添付ファイルのアップロードパラメーターを定義する構成情報。
|
| 進行状況の更新 | @escaping ProgressUpdate | 添付ファイルを取得した後に実行する補完ハンドラー。これは、アップロードプロセスが完了するまで複数回呼び出されます。 補完ハンドラーの戻り値: ProgressUpdate - アップロードの現在の進行状況を返します。
|
| 完了 | @escaping (Result<NowAttachmentMetadata, NowDataError>) | メタデータがアップロードされた後に実行する補完ハンドラー。 補完ハンドラーの戻り値:
|
| タイプ | 説明 |
|---|---|
| なし |
次のコード例は、この関数を呼び出す方法を示しています。
typealias ProgressUpdate = (_ bytesWritten: Int64, _ totalBytesWritten: Int64, _ totalBytesExpectedToWrite: Int64) -> Void
let image = UIImage(named: "photo.png")
let data = image.pngData()
let recordSysId = "" // Sys_id of the record on the SN instance
let config = NowAttachmentUploadConfiguration(
tableName: "tableName",
recordSysId: recordSysId,
fileName: "photo.png",
contentType: "image/png",
encryptionContext: nil)
private func uploadFile(
data: Data,
config: NowAttachmentUploadConfiguration,
progress: @escaping ProgressUpdate) {
attachmentService.upload(data: data, configuration: config, progressUpdate: progress) { (result) in
DispatchQueue.main.async { [weak self] in
switch result {
case .success(let response)
do {
let data = try JSONEncoder().encode(response)
// Upload file successfully, return data
} catch
// Upload file decode failed, return error
}
case .failure(let error):
// Upload file failed, return NowDataError
}
}
}
NowAttachmentService - upload(data: Data, configuration: NowAttachmentUploadConfiguration, progressUpdate: @escaping ProgressUpdate)
添付ファイルデータをアップロードし、アップロード構成で指定されたテーブルのレコードに添付します。
ProgressUpdate コールバックは、UI フィードバックを提供するために使用できるアップロードの進行状況情報を提供します。
| 名前 | タイプ | 説明 |
|---|---|---|
| データ | データ | アップロードする添付ファイル。アップロードできる添付ファイルのデータサイズとタイプは、 ServiceNow インスタンスによって制御されます。 |
| 構成 | NowAttachmentUploadConfiguration | 次のような、添付ファイルのアップロードパラメーターを定義する構成情報。
|
| 進行状況の更新 | @escaping ProgressUpdate | 添付ファイルを取得した後に実行する補完ハンドラー。 補完ハンドラーの戻り値: ProgressUpdate - アップロードの現在の進行状況を返します。これは、アップロードプロセスが完了するまで複数回呼び出されます。
|
| タイプ | 説明 |
|---|---|
| AnyPublisher<NowAttachmentMetadata、NowDataError> | 成功: NowAttachmentMetadata :要求された添付ファイルのメタデータを含むオブジェクト。 エラー:NowDataError
|
次のコード例は、この関数を呼び出す方法を示しています。
typealias ProgressUpdate = (_ bytesWritten: Int64, _ totalBytesWritten: Int64, _ totalBytesExpectedToWrite: Int64) -> Void
let image = UIImage(named: "photo.png")
let data = image.pngData()
let recordSysId = "" // Sys_id of the record on the SN instance
let config = NowAttachmentUploadConfiguration(
tableName: "tableName",
recordSysId: recordSysId,
fileName: "photo.png",
contentType: "image/png",
encryptionContext: nil)
private func uploadFile(data: Data,
config: NowAttachmentUploadConfiguration,
progress: @escaping ProgressUpdate) {
let publisher = attachmentService.upload(data: data, configuration: config, progressUpdate: progress)
publisher
.receive(on: DispatchQueue.main)
.encode(encoder: JSONEncoder())
.sink { [weak self] completion in
if case let .failure(error) = completion {
// Upload file failed, return NowDataError
}
} receiveValue: { [weak self] (data) in
// Upload file successfully, return data
}
.store(in: &subscriptions)
}