NowAttachmentServiceklasse: IOS
Die NowAttachmentService Die Klasse bietet Funktionen, mit denen Sie Anhänge hochladen und abfragen können, die Datensätzen in einer Tabelle auf zugeordnet sind ServiceNow Instanz.
Sie können mit jeder Anforderung eine einzelne Datei hochladen oder abrufen. NowAttachmentService Beachtet 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 | NowServiceConfiguration | Konfigurationseinstellungen, die bei der Initialisierung des Service bereitgestellt wurden. |
NowAttachmentService: Asynchrone Auslöse des Anhangs (für sysId: Zeichenfolge, validateAttachment: Boolescher Wert)
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.
Falsch . Sie können den Anhang bei Bedarf später validieren, indem Sie aufrufen Anhang.validieren() Funktion.| Name | Typ | Beschreibung |
|---|---|---|
| Für sysId | Zeichenfolge | SYS_ID des abzurufenden Anhangs. |
| ValidierteAnhang | Boolean | Kennzeichnung, die angibt, ob der Anhang validiert werden soll. Gültige Werte:
Standardwert: wahr |
| Typ | Beschreibung |
|---|---|
| Jetzt Anhang | 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, validateAttachment: Boolescher Wert, Abschluss: @Escaping (Result<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. Nach Abschluss wird der übergebene Abschlusshandler ausgeführt.
Falsch . Sie können den Anhang bei Bedarf später validieren, indem Sie aufrufen Anhang.validieren() Funktion.| Name | Typ | Beschreibung |
|---|---|---|
| Für sysId | Zeichenfolge | SYS_ID des abzurufenden Anhangs. |
| ValidierteAnhang | Boolean | Kennzeichnung, die angibt, ob der Anhang validiert werden soll. Gültige Werte:
Standardwert: wahr |
| Abschluss | @Escaping (Ergebnis< Jetzt Anhang , NowDataError>) | Abschlusshandler, der nach dem Abrufen des Anhangs ausgeführt werden soll. Rückgabewerte für den Abschlusshandler:
|
| 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, validateAttachment: 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.
Falsch . Bei Bedarf können Sie den Anhang zu einem späteren Zeitpunkt validieren, indem Sie aufrufen Anhang.validieren() Funktion.| Name | Typ | Beschreibung |
|---|---|---|
| Für sysId | Zeichenfolge | SYS_ID des abzurufenden Anhangs. |
| ValidierteAnhang | Boolean | Kennzeichnung, die angibt, ob der Anhang validiert werden soll. Gültige Werte:
Standardwert: wahr |
| Typ | Beschreibung |
|---|---|
| AnyPublisher< Jetzt Anhang , NowDataError> | Erfolg: Jetzt Anhang – 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: AnhangMetadata(Filter: Filter, Limit: INT) asynchrone Auslöse
Ruft die Metadaten für alle Anhänge ab, die die angegebenen Kriterien erfüllen.
| Name | Typ | Beschreibung |
|---|---|---|
| Filter | Filter | Optional. Abfragezeichenfolge, die zum Filtern der Anhänge verwendet werden soll, deren Metadaten zurückgegeben werden sollen. Standard: Nil: Gibt Metadaten für alle verfügbaren Anhänge zurück. Berücksichtigt limitParameter. |
| limit | Ganzzahl | Optional. Maximale Anzahl der Metadaten der Anhangdatei, die zurückgegeben werden sollen. Standard: Nil: Gibt alle Metadaten zurück, die den entsprechen filterParameterspezifikationen. |
| 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, Grenzwert: 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, die zum Filtern der Anhänge verwendet werden soll, deren Metadaten zurückgegeben werden sollen. Standard: Nil: Gibt Metadaten für alle verfügbaren Anhänge zurück. Berücksichtigt limitParameter. |
| limit | Ganzzahl | Optional. Maximale Anzahl der Metadaten der Anhangdatei, die zurückgegeben werden sollen. Standard: Nil: Gibt alle Metadaten zurück, die den entsprechen filterParameterspezifikationen. |
| Abschluss | @Escaping (Ergebnis<[ NowAttachmentMetadata ], NowDataError>) | Abschlusshandler, der nach dem Abrufen der Metadaten ausgeführt werden soll. Rückgabewerte für den Abschlusshandler:
|
| 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 – attachmentMetadata(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, die zum Filtern der Anhänge verwendet werden soll, deren Metadaten zurückgegeben werden sollen. Standard: Nil: Gibt Metadaten für alle verfügbaren Anhänge zurück. Berücksichtigt limitParameter. |
| limit | Ganzzahl | Optional. Maximale Anzahl der Metadaten der Anhangdatei, die zurückgegeben werden sollen. Standard: Nil: Gibt alle Metadaten zurück, die den entsprechen filterParameterspezifikationen. |
| 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: AnhangMetadata (für sysId: Zeichenfolge) asynchrone Auslöse
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 (Result<NowAttachmentMetadata, NowDataError>))
Ruft die Metadaten für den Anhang ab, der der angegebenen sys_ID zugeordnet ist, und führt dann den Abschlusshandler 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>) | Abschlusshandler, der nach dem Abrufen der Metadaten ausgeführt werden soll. Rückgabewerte für den Abschlusshandler:
|
| 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, Grenzwert: INT)
Ruft die Metadaten für alle Anhänge ab, die die angegebenen Kriterien erfüllen, und gibt ein Paginator-Objekt zur Iteration durch die Seiten der zurückgegebenen Metadaten zurück.
| Name | Typ | Beschreibung |
|---|---|---|
| Filter | Filter | Optional. Abfragezeichenfolge, die zum Filtern der Anhänge verwendet werden soll, deren Metadaten zurückgegeben werden sollen. Standard: Nil: Gibt Metadaten für alle verfügbaren Anhänge zurück. Berücksichtigt limitParameter. |
| limit | Ganzzahl | Optional. Maximale Anzahl der Metadaten der Anhangdatei, die zurückgegeben werden sollen. Standard: Nil: Gibt alle Metadaten zurück, die den entsprechen filterParameterspezifikationen. |
| 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öse von DELETE(sysId: String)
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: @Escape (Result<Void, NowDataError>))
Löscht den Anhang mit der angegebenen sys_ID und führt dann den übergebenen Abschlusshandler aus, nachdem der Anhang gelöscht wurde.
| Name | Typ | Beschreibung |
|---|---|---|
| sysId | Zeichenfolge | SYS_ID des zu löschenden Anhangs. |
| Abschluss | @Escaping (Result<Void, NowDataError>) | Abschlusshandler, der ausgeführt werden soll, nachdem der Anhang gelöscht wurde. Rückgabewerte für den Abschlusshandler:
|
| 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 |
|---|---|
| AnyPublisher<Void, NowDataError> | Erfolg: Nichts zurückgegeben 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(Konfiguration: NowServiceConfiguration, coreServiceProvider: NowCoreServiceProviding)
Initialisiert eine neue NowAttachmentService-Instanz.
| Name | Typ | Beschreibung |
|---|---|---|
| konfigurieren | NowServiceConfiguration | Konfigurationsinformationen, die zur ordnungsgemäßen Initialisierung des Service erforderlich sind. |
| CoreServiceProvider | Now CoreServiceProviding | Optional. Objekt, das das NowCoreServiceProviding-Protokoll implementiert. Standard: Nil |
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 – Upload(Data: Data, Configuration: NowAttachmentUploadConfiguration, progressUpdate: @Escaping ProgressUpdate) asynchrone Auslöse
Lädt die Anhangsdaten hoch und hängt sie an einen Datensatz in einer Tabelle an, wie in der Upload-Konfiguration angegeben.
Die ProgressUpdate Rückruf bietet Informationen zum Upload-Fortschritt, die Sie dann verwenden können, um UI-Feedback zu geben.
| Name | Typ | Beschreibung |
|---|---|---|
| Daten | Daten | Anhang zum Hochladen. |
| konfigurieren | NowAttachmentUpload-Konfiguration | Konfigurationsinformationen, die die Upload-Parameter für den Anhang definieren, z. B.:
|
| FortschrittsUpdate | @Escaping ProgressUpdate | Abschlusshandler, 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 Abschlusshandler: 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(Data: Data, Configuration: NowAttachmentUploadConfiguration, progressUpdate: @Escaping ProgressUpdate, Abschluss: @Escaping (Result<NowAttachmentMetadata, NowDataError>))
Lädt die Anhangsdaten hoch und hängt sie an einen Datensatz in einer Tabelle an, wie in der Upload-Konfiguration angegeben.
Die ProgressUpdate Rückruf bietet Informationen zum Upload-Fortschritt, die Sie dann verwenden können, um UI-Feedback zu geben.
| Name | Typ | Beschreibung |
|---|---|---|
| Daten | Daten | Anhang zum Hochladen. |
| konfigurieren | NowAttachmentUpload-Konfiguration | Konfigurationsinformationen, die die Upload-Parameter für den Anhang definieren, z. B.:
|
| FortschrittsUpdate | @Escaping ProgressUpdate | Abschlusshandler, 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 Abschlusshandler: ProgressUpdate: Gibt den aktuellen Fortschritt des Uploads zurück.
|
| Abschluss | @Escaping (Ergebnis< NowAttachmentMetadata , NowDataError>) | Abschlusshandler, der nach dem Hochladen der Metadaten ausgeführt werden soll. Rückgabewerte für den Abschlusshandler:
|
| 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(Data: Data, Configuration: NowAttachmentUploadConfiguration, progressUpdate: @Escaping ProgressUpdate)
Lädt die Anhangsdaten hoch und hängt sie an einen Datensatz in einer Tabelle an, wie in der Upload-Konfiguration angegeben.
Die ProgressUpdate Rückruf bietet Informationen zum Upload-Fortschritt, die Sie dann verwenden können, um UI-Feedback zu geben.
| Name | Typ | Beschreibung |
|---|---|---|
| Daten | Daten | Anhang zum Hochladen. Die Datengröße und der Typ des Anhangs, den Sie hochladen können, werden von gesteuert ServiceNow Instanz. |
| konfigurieren | NowAttachmentUploadConfiguration | Konfigurationsinformationen, die die Upload-Parameter für den Anhang definieren, z. B.:
|
| FortschrittsUpdate | @Escaping ProgressUpdate | Abschlusshandler, der nach dem Abrufen des Anhangs ausgeführt werden soll. Rückgabewerte für den Abschlusshandler: ProgressUpdate: Gibt den aktuellen Fortschritt des Uploads zurück. Dies wird mehrmals aufgerufen, bis der Upload-Prozess abgeschlossen ist.
|
| 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.
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)
}