NowAttachmentService-Klasse – iOS
Die Klasse NowAttachmentService bietet Funktionen zum Hochladen und Abfragen von Anhängen, die Datensätzen in einer Tabelle in einer Instanz ServiceNow zugeordnet sind.
Sie können mit jeder Anforderung eine einzelne Datei hochladen oder abrufen. NowAttachmentService berücksichtigt alle Systembeschränkungen für hochgeladene Dateien, z. B. maximale Dateigröße und zulässige Anhangstypen. Sie können diese Einstellungen mit den Instanzeigenschaften com.glide.attachment.max_size, standardmäßig 1024 MB und glide.attachment.extensions steuern.
| Name | Typ | Beschreibung |
|---|---|---|
| konfigurieren | NowServiceKonfiguration | Konfigurationseinstellungen, die bei der Initialisierung des Service angegeben wurden. |
NowAttachmentService: asynchrone Würfe „attachment(for sysId: String, validAttachment: Boolesch)“.
Ruft den Anhang mit der angegebenen sys_id ab und validiert den Anhang, indem der berechnete Hash des Anhangs mit der erwarteten SHA256-Prüfsumme verglichen wird.
falsesetzen. Sie können den Anhang bei Bedarf zu einem späteren Zeitpunkt validieren, indem Sie die Funktion Attachment.validate() aufrufen.| Name | Typ | Beschreibung |
|---|---|---|
| für sysId | Zeichenfolge | Sys_id des abzurufenden Anhangs. |
| validAttachment | Boolean | Kennzeichnung, die angibt, ob der Anhang validiert werden soll. Gültige Werte:
Standardwert: true |
| Typ | Beschreibung |
|---|---|
| NowAttachment | Wird zurückgegeben, wenn die Methode erfolgreich ist. Angegebener Anhang. |
| NowDataError | Wird ausgelöst, wenn die Methode fehlschlägt.
|
Die folgenden Codebeispiele zeigen, wie diese Methode aufgerufen wird.
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 – Anhang (für sysId: Zeichenfolge, validAttachment: Boolesch, Abschluss: @escaping (Ergebnis<NowAttachment, NowDataError> ))
Ruft den Anhang mit der angegebenen sys_id ab und validiert den Anhang, indem der berechnete Hash des Anhangs mit der erwarteten SHA256-Prüfsumme verglichen wird. Anschließend wird der übergebene Abschluss-Handler ausgeführt.
falsesetzen. Sie können den Anhang bei Bedarf zu einem späteren Zeitpunkt validieren, indem Sie die Funktion Attachment.validate() aufrufen.| Name | Typ | Beschreibung |
|---|---|---|
| für sysId | Zeichenfolge | Sys_id des abzurufenden Anhangs. |
| validAttachment | Boolean | Kennzeichnung, die angibt, ob der Anhang validiert werden soll. Gültige Werte:
Standardwert: true |
| Abschluss | @escaping (Ergebnis<NowAttachment, NowDataError>) | Abschluss-Handler, der nach dem Abrufen des Anhangs ausgeführt werden soll. Rückgabewerte für Abschluss-Handler:
|
| Typ | Beschreibung |
|---|---|
| Keine |
Das folgende Codebeispiel zeigt, wie diese Funktion aufgerufen wird.
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 – Anhang (für sysId: Zeichenfolge, validAttachment: boolescher Wert)
Ruft den Anhang mit der angegebenen sys_id ab und validiert den Anhang, indem der berechnete Hash des Anhangs mit dem erwarteten Hash verglichen wird.
falsesetzen. Bei Bedarf können Sie den Anhang zu einem späteren Zeitpunkt validieren, indem Sie die Funktion Attachment.validate() aufrufen.| Name | Typ | Beschreibung |
|---|---|---|
| für sysId | Zeichenfolge | Sys_id des abzurufenden Anhangs. |
| validAttachment | Boolean | Kennzeichnung, die angibt, ob der Anhang validiert werden soll. Gültige Werte:
Standardwert: true |
| Typ | Beschreibung |
|---|---|
| Beliebiger Herausgeber<NowAttachment, NowDataError> | Erfolg: NowAttachment – Enthält den angegebenen Anhang. Fehler: NowDataError
|
Das folgende Codebeispiel zeigt, wie diese Funktion aufgerufen wird.
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 – asynchrone Würfe von „attachmentMetadata(filter: Filter, limit: Int)“.
Ruft die Metadaten für alle Anhänge ab, die die angegebenen Kriterien erfüllen.
| Name | Typ | Beschreibung |
|---|---|---|
| filter | Filter | Optional. Abfragezeichenfolge zum Filtern der Anhänge, deren Metadaten zurückgegeben werden sollen. Standard: nil – Gibt Metadaten für alle verfügbaren Anhänge zurück. Berücksichtigt den Parameter limit. |
| limit | Ganzzahl | Optional. Maximale Anzahl der zurückzugebenden Metadaten der Anhangdatei. Standard: nil: Gibt alle Metadaten zurück, die die Parameterspezifikationen für filter erfüllen. |
| Typ | Beschreibung |
|---|---|
| [NowAttachmentMetadata] | Wird zurückgegeben, wenn die Methode erfolgreich ist. Array, das die Metadaten für die übereinstimmenden Anhänge enthält. |
| NowDataError | Wird ausgelöst, wenn die Methode fehlschlägt.
|
Die folgenden Codebeispiele zeigen, wie diese Methode aufgerufen wird.
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, Abschluss: @escaping (Ergebnis<[[NowAttachmentMetadata], NowDataError>))
Ruft die Metadaten für alle Anhänge ab, die die angegebenen Kriterien erfüllen.
| Name | Typ | Beschreibung |
|---|---|---|
| filter | Filter | Optional. Abfragezeichenfolge zum Filtern der Anhänge, deren Metadaten zurückgegeben werden sollen. Standard: nil – Gibt Metadaten für alle verfügbaren Anhänge zurück. Berücksichtigt den Parameter limit. |
| limit | Ganzzahl | Optional. Maximale Anzahl der zurückzugebenden Metadaten der Anhangdatei. Standard: nil: Gibt alle Metadaten zurück, die die Parameterspezifikationen für filter erfüllen. |
| Abschluss | @escaping (Ergebnis<[NowAttachmentMetadata], NowDataError>) | Abschluss-Handler, der nach dem Abrufen der Metadaten ausgeführt werden soll. Rückgabewerte für Abschluss-Handler:
|
| Typ | Beschreibung |
|---|---|
| Keine |
Das folgende Codebeispiel zeigt, wie diese Funktion aufgerufen wird.
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 – Anhang Metadaten (Filter: Filter, Grenzwert: Int)
Ruft die Metadaten für alle Anhänge ab, die die angegebenen Kriterien erfüllen.
| Name | Typ | Beschreibung |
|---|---|---|
| filter | Filter | Optional. Abfragezeichenfolge zum Filtern der Anhänge, deren Metadaten zurückgegeben werden sollen. Standard: nil – Gibt Metadaten für alle verfügbaren Anhänge zurück. Berücksichtigt den Parameter limit. |
| limit | Ganzzahl | Optional. Maximale Anzahl der zurückzugebenden Metadaten der Anhangdatei. Standard: nil: Gibt alle Metadaten zurück, die die Parameterspezifikationen für filter erfüllen. |
| Typ | Beschreibung |
|---|---|
| AnyPublisher<[NowAttachmentMetadata], NowDataError> | Erfolg: NowAttachmentMetadata – Objekte, die die Metadaten für die übereinstimmenden Anhänge enthalten. Fehler: NowDataError
|
Das folgende Codebeispiel zeigt, wie diese Funktion aufgerufen wird.
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: asynchrone Würfe von „attachmentMetadata(for sysId: String)“.
Ruft die Metadaten für den Anhang ab, der der angegebenen sys_id zugeordnet ist.
| Name | Typ | Beschreibung |
|---|---|---|
| für sysId | Zeichenfolge | Sys_id des Anhangs, dessen Metadaten abgerufen werden sollen. |
| Typ | Beschreibung |
|---|---|
| NowAttachmentMetadata | Wird zurückgegeben, wenn die Methode erfolgreich ist. Metadaten für den angeforderten Anhang. |
| NowDataError | Wird ausgelöst, wenn die Methode fehlschlägt.
|
Die folgenden Codebeispiele zeigen, wie diese Methode aufgerufen wird.
do {
let metadata = try await attachmentService.attachmentMetadata(for: sysId)
// Metadata retrieval successful
} catch {
// Metadata retrieval failed, NowDataError thrown
}
NowAttachmentService - AttachmentMetadata (für sysId: Zeichenfolge, Abschluss: @escaping (Ergebnis<NowAttachmentMetadata, NowDataError> ))
Ruft die Metadaten für den Anhang ab, der der angegebenen sys_id zugeordnet ist, und führt dann den Abschluss-Handler aus, nachdem die Metadaten abgerufen wurden.
| Name | Typ | Beschreibung |
|---|---|---|
| für sysId | Zeichenfolge | Sys_id des Anhangs, dessen Metadaten abgerufen werden sollen. |
| Abschluss | @escaping (Ergebnis<NowAttachmentMetadata, NowDataError>) | Abschluss-Handler, der nach dem Abrufen der Metadaten ausgeführt werden soll. Rückgabewerte für den Abschluss-Handler:
|
| Typ | Beschreibung |
|---|---|
| Keine |
Das folgende Codebeispiel zeigt, wie diese Funktion aufgerufen wird.
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“ (für sysId: Zeichenfolge)
Ruft die Metadaten für den Anhang ab, der der angegebenen sys_id zugeordnet ist.
| Name | Typ | Beschreibung |
|---|---|---|
| für sysId | Zeichenfolge | Sys_id des Anhangs, dessen Metadaten abgerufen werden sollen. |
| Typ | Beschreibung |
|---|---|
| AnyPublisher<[NowAttachmentMetadata], NowDataError> | Erfolg: NowAttachmentMetadata – Objekt, das die Metadaten für den angeforderten Anhang enthält. Fehler: NowDataError
|
Das folgende Codebeispiel zeigt, wie diese Funktion aufgerufen wird.
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)
Ruft die Metadaten für alle Anhänge ab, die die angegebenen Kriterien erfüllen, und gibt ein Paginator-Objekt zum Iterieren durch die Seiten der zurückgegebenen Metadaten zurück.
| Name | Typ | Beschreibung |
|---|---|---|
| filter | Filter | Optional. Abfragezeichenfolge zum Filtern der Anhänge, deren Metadaten zurückgegeben werden sollen. Standard: nil – Gibt Metadaten für alle verfügbaren Anhänge zurück. Berücksichtigt den Parameter limit. |
| limit | Ganzzahl | Optional. Maximale Anzahl der zurückzugebenden Metadaten der Anhangdatei. Standard: nil: Gibt alle Metadaten zurück, die die Parameterspezifikationen für filter erfüllen. |
| Typ | Beschreibung |
|---|---|
| Paginator<[NowAttachmentMetadata]> | Erfolg: Array von NowAttachmentMetadata-Objekten. Fehler: NowDataError-Objekt.
|
Das folgende Codebeispiel zeigt, wie diese Funktion aufgerufen wird.
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: asynchrone Auslösungen von delete(sysId: Zeichenfolge).
Löscht den Anhang mit der angegebenen sys_id.
| Name | Typ | Beschreibung |
|---|---|---|
| sysId | Zeichenfolge | Sys_id des zu löschenden Anhangs. |
| Typ | Beschreibung |
|---|---|
| Keine | Wenn die Methode erfolgreich war, wird nichts zurückgegeben. |
| NowDataError | Wird ausgelöst, wenn die Methode fehlschlägt.
|
Die folgenden Codebeispiele zeigen, wie diese Methode aufgerufen wird.
do {
try await attachmentService.delete(sysId: sysId)
// Deletion successful
} catch {
// Deletion failed, NowDataError thrown
}
NowAttachmentService – delete(sysId: Zeichenfolge, Abschluss: @escaping (Ergebnis<Void, NowDataError> ))
Löscht den Anhang mit der angegebenen sys_id und führt dann den übergebenen Abschluss-Handler aus, nachdem der Anhang gelöscht wurde.
| Name | Typ | Beschreibung |
|---|---|---|
| sysId | Zeichenfolge | Sys_id des zu löschenden Anhangs. |
| Abschluss | @escaping (Ergebnis<Void, NowDataError> ) | Abschluss-Handler, der ausgeführt werden soll, nachdem der Anhang gelöscht wurde. Rückgabewerte für den Abschluss-Handler:
|
| Typ | Beschreibung |
|---|---|
| Keine |
Das folgende Codebeispiel zeigt, wie diese Funktion aufgerufen wird.
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: Zeichenfolge)
Löscht den Anhang mit der angegebenen sys_id.
| Name | Typ | Beschreibung |
|---|---|---|
| sysId | Zeichenfolge | Sys_id des zu löschenden Anhangs. |
| Typ | Beschreibung |
|---|---|
| Beliebiger Herausgeber<Void, NowDataError> | Erfolg: Keine Rückgabe Fehler: NowDataError
|
Das folgende Codebeispiel zeigt, wie diese Funktion aufgerufen wird.
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: NowCoreServiceProvider)
Initialisiert eine neue NowAttachmentService-Instanz.
| Name | Typ | Beschreibung |
|---|---|---|
| konfigurieren | NowServiceKonfiguration | Konfigurationsinformationen, die zum ordnungsgemäßen Initialisieren des Service erforderlich sind. |
| coreServiceProvider | NowCoreServicebereitstellung | Optional. Objekt, das das NowCoreServiceProvidering-Protokoll implementiert. Standard: null |
Das folgende Codebeispiel zeigt, wie diese Funktion aufgerufen wird.
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: asynchrone Auslösungen für „upload(data: Data, Configuration: NowAttachmentUploadConfiguration, ProgressUpdate: @escaping ProgressUpdate)“
Lädt die Anhangdaten hoch und hängt sie an einen Datensatz in einer Tabelle an, wie in der Upload-Konfiguration angegeben.
Der ProgressUpdate -Rückruf enthält Informationen zum Upload-Fortschritt, die Sie dann verwenden können, um UI-Feedback zu geben.
| Name | Typ | Beschreibung |
|---|---|---|
| Daten | Daten | Hochzuladender Anhang. |
| konfigurieren | NowAttachmentUpload-Konfiguration | Konfigurationsinformationen, die die Upload-Parameter für den Anhang definieren, z. B.:
|
| ProgressUpdate | @escaping ProgressUpdate | Abschluss-Handler, der nach dem Abrufen des Anhangs ausgeführt werden soll. Dies wird mehrmals aufgerufen, bis der Upload-Prozess abgeschlossen ist. Rückgabewerte für den Abschluss-Handler: ProgressUpdate: Gibt den aktuellen Fortschritt des Uploads zurück.
|
| Typ | Beschreibung |
|---|---|
| NowAttachmentMetadata | Wird zurückgegeben, wenn die Methode erfolgreich ist. Objekt, das die hochgeladenen Metadaten enthält. |
| NowDataError | Wird ausgelöst, wenn die Methode fehlschlägt.
|
Die folgenden Codebeispiele zeigen, wie diese Methode aufgerufen wird.
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(Daten: Daten, Konfiguration: NowAttachmentUploadConfiguration, ProgressUpdate: @escaping ProgressUpdate, Abschluss: @escaping (Ergebnis<NowAttachmentMetadata, NowDataError> ))
Lädt die Anhangdaten hoch und hängt sie an einen Datensatz in einer Tabelle an, wie in der Upload-Konfiguration angegeben.
Der ProgressUpdate -Rückruf enthält Informationen zum Upload-Fortschritt, die Sie dann verwenden können, um UI-Feedback zu geben.
| Name | Typ | Beschreibung |
|---|---|---|
| Daten | Daten | Hochzuladender Anhang. |
| konfigurieren | NowAttachmentUpload-Konfiguration | Konfigurationsinformationen, die die Upload-Parameter für den Anhang definieren, z. B.:
|
| ProgressUpdate | @escaping ProgressUpdate | Abschluss-Handler, der nach dem Abrufen des Anhangs ausgeführt werden soll. Dies wird mehrmals aufgerufen, bis der Upload-Prozess abgeschlossen ist. Rückgabewerte für Abschluss-Handler: ProgressUpdate: Gibt den aktuellen Fortschritt des Uploads zurück.
|
| Abschluss | @escaping (Ergebnis<NowAttachmentMetadata, NowDataError>) | Abschluss-Handler, der nach dem Hochladen der Metadaten ausgeführt werden soll. Rückgabewerte für Abschluss-Handler:
|
| Typ | Beschreibung |
|---|---|
| Keine |
Das folgende Codebeispiel zeigt, wie diese Funktion aufgerufen wird.
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(Daten: Daten, Konfiguration: NowAttachmentUploadConfiguration, ProgressUpdate: @escaping ProgressUpdate)
Lädt die Anhangdaten hoch und hängt sie an einen Datensatz in einer Tabelle an, wie in der Upload-Konfiguration angegeben.
Der ProgressUpdate -Rückruf enthält Informationen zum Upload-Fortschritt, die Sie dann verwenden können, um UI-Feedback zu geben.
| Name | Typ | Beschreibung |
|---|---|---|
| Daten | Daten | Hochzuladender Anhang. Die Datengröße und der Typ des Anhangs, den Sie hochladen können, werden von Ihrer Instanz ServiceNow gesteuert. |
| konfigurieren | NowAttachmentUploadConfiguration | Konfigurationsinformationen, die die Upload-Parameter für den Anhang definieren, z. B.:
|
| ProgressUpdate | @escaping ProgressUpdate | Abschluss-Handler, der nach dem Abrufen des Anhangs ausgeführt werden soll. Rückgabewerte für den Abschluss-Handler: ProgressUpdate: Gibt den aktuellen Fortschritt des Uploads zurück. Dies wird mehrmals aufgerufen, bis der Upload-Prozess abgeschlossen ist.
|
| Typ | Beschreibung |
|---|---|
| Beliebiger Herausgeber<NowAttachmentMetadata, NowDataError> | Erfolg: NowAttachmentMetadata – Objekt, das die Metadaten für den angeforderten Anhang enthält. Fehler: NowDataError
|
Das folgende Codebeispiel zeigt, wie diese Funktion aufgerufen wird.
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)
}