FMPResource

Описание

Класс FMPResource предназначен для описания ресурса.

class FMPResource

Свойства

Свойство Описание

downloadDelegate

Делегат, обрабатывающий события, специфичные для задач загрузки табличных данных.
var downloadDelegate: FMPResourceDownloadDelegate?
isDelta Использование метода deltaStream при запросе к серверу.
var isDelta: Bool { get }

isFiltered

Использование фильтрации по столбцам при запросе к серверу.
var isFiltered: Bool { get }

isLocalCached

Использование кэширования таблиц в локальной базе данных.
var isLocalCached: Bool { get }

name

Название ресурса.
var name: String { get }
params Входные параметры для запроса ресурса.
var params: RequestParameters? { get }

scheme

Информация о ресурсе, содержащемся в схеме ресурсов. При инициализации через FMPResource.Builder свойство будет принимать значение nil по умолчанию. После вызова метода updateScheme() или при получении объекта через метод getResources() класса FMPScheme свойство принимает значение, отличное от nil.
var scheme: Scheme? { get }

Методы

Метод Описание
copy() Получение экземпляра класса-строителя для копирования FMPResource. Возвращает экземпляр класса-строителя FMPResource.Builder.
func copy() -> FMPResource.Builder

download(transaction:filters:completion:)

Загрузка табличных данных ресурса в базу данных.
func download(transaction: FMPTransaction? = nil, filters: [FMPResource.Filter] = [], completion: @escaping (DownloadResult) -> Void)

Параметры:

  • transactions. Список транзакций, используемых при запросах;

  • filters. Cписок фильтров для загрузки. Используется, если свойство isFiltered принимает значение true;

  • completion. Замыкающее выражение, содержащее результат выполнения метода.

getTransactions(completion:)

Получение списка транзакций, связанных с ресурсом.
func getTransactions(completion: @escaping (TransactionsResult) -> Void)

Параметры:

  • completion. Замыкающее выражение, содержащее результат выполнения метода.

updateSheme()

Обновление текущей схемы ресурса из локальной базы данных в свойстве scheme.
func updateScheme() throws

Псевдонимы типов

Псевдоним типа Описание

DownloadResult

Результат запроса загрузки ресурса с сервера на устройство. Используется методом download(transaction:filters:completion:).
typealias DownloadResult = Result<Bool, Error>

RequestParameters

Тип входных параметров для запроса ресурса. Используется свойством params.
typealias RequestParameters = Data

TransactionsResult

Результат запроса на получение списка транзакций, связанных с ресурсом. Используется методом getTransactions(completion:).
typealias TransactionsResult = Result<[FMPTransaction], Error>

Примеры

Обновление информации о ресурсе, содержащемся в схеме ресурсов:

// Построим экземпляр класса FMPResource
let resource: FMPResource = fmp.resource.build()
 
// Обновим свойство scheme
do {
    try resource.updateScheme()
} catch let error {
    // Выведем код и описание ошибки
    print((error as? FMPError)?.code, (error as? FMPError)?.description)
}

Получение списка транзакций:

// Построим экземпляр класса FMPResource
let resource: FMPResource = fmp.resource.build()
 
// Получим список связанных с ресурсом транзакций
resource.getTransactions { (result) in
    switch result {
    case .success(let transactions):
        // Выведем список идентификаторов транзакций
        print(transactions.map { $0.id })
    case .failure(let error):
        // Выведем код и описание ошибки
        print((error as? FMPError)?.code, (error as? FMPError)?.description)
    }
}

Копирование экземпляра класса FMPResource:

// Построим экземпляр класса FMPResource
let resource: FMPResource = fmp.resource.build()
 
// Скопируем экземпляр класса FMPResource
let resourceCopy: FMPResource = resource.copy().build()

Загрузка табличных данных конкретного ресурса:

// Построим экземпляр класса FMPResource
let resource: FMPResource = fmp.resource.build()
  
// Загрузим табличные данные
resource.download { (result) in
    switch result {
    case .success(_):
        // Успешная загрузка данных
    case .failure(let error):
        // Выведем код и описание ошибки
        print((error as? FMPError)?.code, (error as? FMPError)?.description)
    }
}

Загрузка табличных данных конкретного ресурса с использованием транзакций и фильтрации:

// Построим экземпляр класса FMPResource
let resource: FMPResource = fmp.resource
    .isFiltered() // Для фильтрования данных при запросе данных с сервера
    .build()
  
// Построим экземпляр транзакции
let transaction = fmp.transaction
    .id(UUID().uuidString)
    .resource(resource)
    .build()
  
// Загрузим табличные данные с использованием транзакции и фильтра строк по значению value в столбце name
resource.download(transaction: transaction, filters: [.column("name", value: "value")]) { (result) in
    switch result {
    case .success(_):
        // Успешная загрузка данных
    case .failure(let error):
        // Выведем код и описание ошибки
        print((error as? FMPError)?.code, (error as? FMPError)?.description)
    }
}

Отслеживание прогресса загрузки табличных данных в базу данных:

// Обозначим класс, реализующий метод делегата FMPResourceDownloadDelegate
class ResourceDelegate: FMPResourceDownloadDelegate {  
    func resource(_ resource: FMPResource, downloadProgress: Double) {
        // Выведем название ресурса и прогресс его загрузки в процентах
        print("Прогресс загрузки ресурса \(resource.name): \(downloadProgress * 100)%")
    }
}
  
// Построим класс ResourceDelegate
let resourceDelegate = ResourceDelegate()
  
// Построим экземпляр класса FMPResource
let resource: FMPQuery = fmp.resource.build()
  
// Обозначим делегат
resource.downloadDelegate = resourceDelegate
  
// Загрузим данные указанных в запросе ресурсов
resource.download() { result in
    // Обработаем результат после полной загрузки. К этому моменту метод делегата может быть вызван несколько раз.
}

См. также:

Фреймворк FMPKit | Классы