wiki/work/fsight/archive/reply_questions_study.md

9.3 KiB

Ответ на вопросы по обучению FMP.

Логи переменных

127         /** ----- не видно ничего в логе переменных */
128          val X = fmp.file.depth(1).build() // Создать FMPFile.
129         Log.d("3333", " fmpDirSettings(fmp) depth = ${X.depth}")

Не очень понимаю вопрос. X.depth = null?

Инициализация FMPFile.

139         /** --- везде билдер вызывать нужно??  */

У вас при создании файла отсутствует какая-либо его конфигурация. Постоянно билдер вызывать не нужно, но нужно указать все требуемые параметры для файла или директории, с которой ведётся работа. Например, у нас на сервере есть файл в точке монтирования mount по пути test/file.md. Его инициализация будет выглядеть вот так:

val file = fmp.file
  .mount("mount")
  .remote("test/file.md")
  .local("${fmp.user.storage}/file.md")
  .build()

После этого этот файл можно использовать сколь угодно раз для различных операций над ним - загрузка, удаление итд. Для простотра файлов в директории, как в Вашем примере, можно сделать вот так:

val dir = fmp.file
  .mount("mount")
  .remote("test")
  .directory(true)
  .build()

val files = dir.ls().result // Тут будет список всех файлов в хранилище mount по пути ./test/

Запросы к серверу.

140         /** --- это не запрос к серверу? если нет, то просто сюда сохранить файл надо сначала?

Все методы (функции) фреймворка так или иначе ресурсоёмкие операции. А так как это клиент для серверного приложения, то большая часть этих функций - это запросы к серверу. Этот метод не исключение - он выполняет запрос к серверу на получение информации о содержимом директории. "Быстрые" запросы фреймворка относятся только к свойствам объектов (всё что не функции), например user.storage или file.remote.

Локальное хранилище.

154         /** ---- local_storage нет на сервере, но операции проходят */
155         /** ---- local_storage - это корень? */
156         /** ---- local_storage даже не создать отдельно на сервере,
157          * но я с ним как-то работаю... как? и
158          * как работать с этим параметром в контексте того что на сервере? */

local_storage - название точки монтирования Локального хранилища на сервере FMP. Это не совсем "корень". Для лучшего понимания стоит ознакомиться с тем, как работают файловые системы в UNIX системах. Если грубо, то точка монтирования - это устройство или сервис, подключенный как директория. И local_storage - это название этой "директории". Т.е. в зависимости от названия точки монтирования мы можем работать с разными фактическими хранилищами файлов: будь то локальный накопитель или подключенное к серверу локальное хранилище. В случае с local_storage - это всегда существующая точка монтирования, которая хранит файлы внутри самого сервера FMP. Т.е. когда мы пишем что-то в local_storage, то мы пишем это внутрь самого FMP, а не внешнего сервиса. По умолчанию он должен быть внутри любой среды под названием "Локальное хранилище" в интерфейсе администратора платформы. Если его почему-то нет в проекте, то стоит уточнить у администратора платформы. Он доступен всегда и везде и общий для всех сред, поэтому операции по нему успешно проходят.

Загрузка файлов.

169         /** ---- Куда сохраняется файл? Пишет что сохранено. */

Насчёт сохранения - туда, куда Вы указываете в параметре для .local(path). Если Вы указываете (как в Вашем примере) путь ${fmp.user.cache}, то будет храниться в личной директории пользователя. Сама директория с данными фреймворка и всех пользователей хранится там, где было указано при инициализации в FMP.Builder.storage(path). Полный путь до локального файла можно получить через file.local.

Результат работы метода удаления локального файла.

192         /** ---- delFileInInternalCash  deleted_cache = true - получаю постоянно это значение

В общем случае status означает, что метод отработал до конца без ошибок. В случае с удалением файла - метод отработал без ошибок (есть права на чтение, нет ошибок файловой системы итд), поэтому он равен true. В документации метода на работу метода написано следующее:

True если файл удалён, false если не найден или не удалён. Это относится к свойству result, т.к. result это результат работы метода. В Вашем случае, если кэша файла не было, то он будет равен false.

Поиск файлов.

215         /** ?? зачем тут ремоут указывать и точка мантирования???

Метод search() выполняет поиск файлов на сервере, а не в кэше устройства. В целом модель FMPFile является моделью для файла на сервере с некоторыми методами для работы с локальным кэшем.

Поиск по Regex.

230         /** ---- ".pages\\|.pages$" - список так не находится

Подозреваю, что что-то не так с регулярным выражением. Попробуйте более простую форму: .*pages$.

Получение списка файлов БД на устройстве.

274         /** Как получить полный список всех баз в мобилке?? */

Кэш ресурсов хранится по пути fmp.user.cache. Не уверен, что это полезная информация, но файлы БД можно найти там.

Создание модели ресурса.

291         /** ?? Где спрятана База данных ?? как табл к ней привязывается ? */
292         /** Не может создать ресурс  */ 

Путь к базе данных ресурса можно получить через его свойство resource.database. Для создания ресурса обязательно указание его названия:

val resource = fmp.resource
  .name("my_resource")
  .build()

Таблица привязывается к ресурсу, когда при инициализации таблицы Вы указываете ресурс. В Вашем примере корректно:

return fmp.table
    .name(name)
    .resource(resource)
    .build()

Работа с БД при использовании FMPQuery.

348 //        /** ???   как прикрутить БД??? database */348 //        /** ???   как прикрутить БД??? database */

К счастью, "прикручивать" ничего не нужно. Всё пишется в БД соответствующих ресурсов. Например, если вы делаете from(table), то данные запишутся в table.resource.database.