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
.