wiki/work/fsight/archive/ReplyQuestionsStudy.md

110 lines
9.6 KiB
Markdown

# Ответ на вопросы по обучению FMP.
## Рекомендация по ознакомлению с документацией.
Актуальную документацию можно получить [здесь](https://fmp-maven.fsight.cloud/ru/fsight/fmp/doc/). Выберите соответствующую версию.
## Логи переменных
```text
127 /** ----- не видно ничего в логе переменных */
128 val X = fmp.file.depth(1).build() // Создать FMPFile.
129 Log.d("3333", " fmpDirSettings(fmp) depth = ${X.depth}")
```
Не очень понимаю вопрос. `X.depth = null`?
## Инициализация FMPFile.
```text
139 /** --- везде билдер вызывать нужно?? */
```
У вас при создании файла отсутствует какая-либо его конфигурация. Постоянно билдер вызывать не нужно, но нужно указать все требуемые параметры для файла или директории, с которой ведётся работа. Например, у нас на сервере есть файл в точке монтирования `mount` по пути `test/file.md`. Его инициализация будет выглядеть вот так:
```kotlin
val file = fmp.file
.mount("mount")
.remote("test/file.md")
.local("${fmp.user.storage}/file.md")
.build()
```
После этого этот файл можно использовать сколь угодно раз для различных операций над ним - загрузка, удаление итд. Для простотра файлов в директории, как в Вашем примере, можно сделать вот так:
```kotlin
val dir = fmp.file
.mount("mount")
.remote("test")
.directory(true)
.build()
val files = dir.ls().result // Тут будет список всех файлов в хранилище mount по пути ./test/
```
## Запросы к серверу.
```text
140 /** --- это не запрос к серверу? если нет, то просто сюда сохранить файл надо сначала?
```
Все методы (функции) фреймворка так или иначе ресурсоёмкие операции. А так как это клиент для серверного приложения, то большая часть этих функций - это запросы к серверу. Этот метод не исключение - он выполняет запрос к серверу на получение информации о содержимом директории. "Быстрые" запросы фреймворка относятся только к свойствам объектов (всё что не функции), например `user.storage` или `file.remote`.
## Локальное хранилище.
```text
154 /** ---- local_storage нет на сервере, но операции проходят */
155 /** ---- local_storage - это корень? */
156 /** ---- local_storage даже не создать отдельно на сервере,
157 * но я с ним как-то работаю... как? и
158 * как работать с этим параметром в контексте того что на сервере? */
```
`local_storage` - название точки монтирования Локального хранилища на сервере FMP. Это не совсем "корень". Для лучшего понимания стоит ознакомиться с тем, как работают файловые системы в UNIX системах. Если грубо, то точка монтирования - это устройство или сервис, подключенный как директория. И `local_storage` - это название этой "директории". Т.е. в зависимости от названия точки монтирования мы можем работать с разными фактическими хранилищами файлов: будь то локальный накопитель или подключенное к серверу локальное хранилище. В случае с `local_storage` - это всегда существующая точка монтирования, которая хранит файлы внутри самого сервера FMP. Т.е. когда мы пишем что-то в `local_storage`, то мы пишем это внутрь самого FMP, а не внешнего сервиса. По умолчанию он должен быть внутри любой среды под названием "Локальное хранилище" в интерфейсе администратора платформы. Если его почему-то нет в проекте, то стоит уточнить у администратора платформы. Он доступен всегда и везде и общий для всех сред, поэтому операции по нему успешно проходят.
## Загрузка файлов.
```text
169 /** ---- Куда сохраняется файл? Пишет что сохранено. */
```
Насчёт сохранения - туда, куда Вы указываете в параметре для `.local(path)`. Если Вы указываете (как в Вашем примере) путь `${fmp.user.cache}`, то будет храниться в личной директории пользователя. Сама директория с данными фреймворка и всех пользователей хранится там, где было указано при инициализации в `FMP.Builder.storage(path)`. Полный путь до локального файла можно получить через `file.local`.
## Результат работы метода удаления локального файла.
```text
192 /** ---- delFileInInternalCash deleted_cache = true - получаю постоянно это значение
```
В общем случае `status` означает, что метод отработал до конца без ошибок. В случае с удалением файла - метод отработал без ошибок (есть права на чтение, нет ошибок файловой системы итд), поэтому он равен `true`. В документации метода на работу метода написано следующее:
> True если файл удалён, false если не найден или не удалён.
Это относится к свойству `result`, т.к. `result` это результат работы метода. В Вашем случае, если кэша файла не было, то он будет равен `false`.
## Поиск файлов.
```text
215 /** ?? зачем тут ремоут указывать и точка мантирования???
```
Метод `search()` выполняет поиск файлов на сервере, а не в кэше устройства. В целом модель `FMPFile` является моделью для файла *на сервере* с некоторыми методами для работы с локальным кэшем.
## Поиск по Regex.
```text
230 /** ---- ".pages\\|.pages$" - список так не находится
```
Подозреваю, что что-то не так с регулярным выражением. Попробуйте более простую форму: `.*pages$`.
## Получение списка файлов БД на устройстве.
```text
274 /** Как получить полный список всех баз в мобилке?? */
```
Кэш ресурсов хранится по пути `fmp.user.cache`. Не уверен, что это полезная информация, но файлы БД можно найти там.
## Создание модели ресурса.
```text
291 /** ?? Где спрятана База данных ?? как табл к ней привязывается ? */
292 /** Не может создать ресурс */
```
Путь к базе данных ресурса можно получить через его свойство `resource.database`. Для создания ресурса обязательно указание его названия:
```kotlin
val resource = fmp.resource
.name("my_resource")
.build()
```
Таблица привязывается к ресурсу, когда при инициализации таблицы Вы указываете ресурс. В Вашем примере корректно:
```kotlin
return fmp.table
.name(name)
.resource(resource)
.build()
```
## Работа с БД при использовании FMPQuery.
```text
348 // /** ??? как прикрутить БД??? database */348 // /** ??? как прикрутить БД??? database */
```
К счастью, "прикручивать" ничего не нужно. Всё пишется в БД соответствующих ресурсов. Например, если вы делаете `from(table)`, то данные запишутся в `table.resource.database`.