Triggers: Difference between revisions
No edit summary |
No edit summary |
||
Line 221: | Line 221: | ||
====Методы==== | ====Методы==== | ||
=====data(uri)===== | =====data(uri)===== | ||
Установить URI ссылающийся на данные. | :Установить URI ссылающийся на данные. | ||
Параметры:uri - URI, ссылающийся на данные, с которыми будет выполняться действие. Это может быть идентификатор контакта, путь к файлу, номер телефона и т.д. | :Параметры:uri - URI, ссылающийся на данные, с которыми будет выполняться действие. Это может быть идентификатор контакта, путь к файлу, номер телефона и т.д. | ||
=====mimeType(mime)===== | =====mimeType(mime)===== | ||
Установить MIME тип данных. | :Установить MIME тип данных. | ||
Параметры:mime - MIME тип данных с которыми будет выполняться действие. | :Параметры:mime - MIME тип данных с которыми будет выполняться действие. | ||
=====extra(key, value)===== | =====extra(key, value)===== | ||
Установить дополнительные данные в виде ключ-значение, которые необходимы для выполнения запрошенного действия. Точно так же, как некоторые действия используют определенные виды URI данных, некоторые действия используют определенные дополнительные данные. | :Установить дополнительные данные в виде ключ-значение, которые необходимы для выполнения запрошенного действия. Точно так же, как некоторые действия используют определенные виды URI данных, некоторые действия используют определенные дополнительные данные. | ||
Параметры: | :Параметры: | ||
=====extraLong(key, value)===== | |||
:Установить дополнительные данные в виде ключ-значение, где значение должно быть типом Long. | |||
=====send()===== | =====send()===== | ||
Отправить сообщение. | :Отправить сообщение. | ||
===Примеры=== | ===Примеры=== | ||
====Скрипт открывающий окно набора номера==== | ====Скрипт открывающий окно набора номера==== | ||
В библиотеке должно быть поле Phone, содержащие номер телефона. | |||
<source lang="javascript" line> | <source lang="javascript" line> | ||
i = intent("android.intent.action.DIAL") | i = intent("android.intent.action.DIAL") | ||
i.data( | i.data("tel:"+entry().field("Phone")) | ||
i.send() | i.send() | ||
</source> | </source> | ||
# Создаем объект обмена сообщениями Intent и указываем действие которое откроет окно набора номера android.intent.action.DIAL. | # Создаем объект обмена сообщениями Intent и указываем действие которое откроет окно набора номера - android.intent.action.DIAL. | ||
# В качестве данных требуется указать номер телефона в формате tel:номер. Номер телефона берем из поля записи Phone. | # В качестве данных требуется указать номер телефона в формате ''tel:номер''. Номер телефона берем из поля записи Phone. | ||
# Отправляем сообщение. | |||
====Скрипт открывающий приложение для отправки смс-сообщения==== | |||
Номер телефона будет определяться полем записи - Phone, а текст сообщения составляется из полей ContactName и Notes. | |||
<source lang="javascript" line> | |||
msg = “Dear, “ + entry().field(“ContactName”) + “\n” + entry().field(“Notes”) | |||
i = intent(“android.intent.action.SENDTO”) | |||
i.data(“smsto:”+entry().field(“Phone”)) | |||
i.extra(“sms_body” , msg) | |||
i.send() | |||
</source> | |||
# Составляем сообщение из значений полей ContactName и Notes | |||
# Создаем объект обмена сообщениями Intent и указываем действие которое откроет приложение для отправки сообщений- android.intent.action.SENDTO. | |||
# В качестве данных требуется указать номер телефона в формате ''smsto:номер''. Номер телефона берем из поля записи Phone. | |||
# Текст сообщение передаем в дополнительный параметр sms_body. | |||
# Отправляем сообщение. | |||
====Скрипт открывающий форму создания события в Гугл-Календаре.==== | |||
Время события и название события будут определяться полями записи. | |||
<source lang="javascript" line> | |||
i = intent(“android.intent.action.INSERT”) | |||
i.data(“content://com.android.calendar/events”) | |||
i.extra(“title” , entry().field(“Title”)) | |||
i.extra(“description” , entry().field(“Description”)) | |||
i.extraLong(“beginTime” , entry().field(“Begin”).getTime()) | |||
i.extraLong(“endTime” , entry().field(“End”).getTime()) | |||
i.send() | |||
</source> | |||
# Создаем объект обмена сообщениями Intent и указываем действие которое требуется выполнить, а именно создание объекта - android.intent.action.INSERT. | |||
# Для события android.intent.action.INSERT в data требуется передать базовый Uri создаваемого объекта. Событие в Google-календаре имеет базовый Uri - content://com.android.calendar/events. | |||
# Устанавливаем название события, которое берем из поля Title. | |||
# Устанавливаем описание события, которое берем из поля Description. | |||
# Устанавливаем время начала события, которое берем из поля Begin. Поле Begin должно иметь тип Date/Time. Дополнительный параметр beginTime должен иметь тип Long, поэтому используется метод extraLong. | |||
# Устанавливаем время окончания события, которое берем из поля End. Поле End должно иметь тип Date/Time. Дополнительный параметр endTime должен иметь тип Long, поэтому используется метод extraLong. | |||
# Отправляем сообщение. | # Отправляем сообщение. |
Revision as of 16:09, 10 September 2016
Триггер это скрипт, который запускается при определенных действиях или событиях. В качестве языка для написания скриптов используется JavaScript. Результатом выполнения скрипта может быть изменение или создание записи, выполнение http-запроса, создание файла, валидация данных и другие действия.
Создание триггера
Каждая библиотека может иметь несколько триггеров, чтобы открыть список триггеров зайдите в библиотеку, откройте меню и выберите пункт Триггеры.
Для создания триггера откройте список триггеров библиотеки и нажмите кнопку +. После этого необходимо выбрать момент запуска триггера и написать скрипт реализующий ваши потребности.
Момент запуска триггера
Момент запуска триггера определяется двумя параметрами:
- Действие
- это какая-либо выполняемая пользователем операция с записями.
- Фаза действия
- определяет более точный момент срабатывания триггера. Для каждого типа Действия доступны свои фазы.
Выполнение скрипта
Фаза в которую запускается триггер также определяет то, как будет выполняться скрипт - синхронно или асинхронно.
- Синхронное выполнение скрипта
- приложение приостановить взаимодействие с пользователем на время выполнения скрипта. Не рекомендуется в таких скриптах выполнять длительные операции.
- Асинхронное выполнение скрипта
- скрипт запускается в фоновом режиме, приложение не приостанавливает взаимодействие с пользователем. Обычно асинхронно выполняются скрипты в последних фазах действия.
Безопасность
Некоторые функции доступные из скриптов (операции с файлами, выполнение http-запросов, доступ к другим библиотекам) в целях безопасности требуют соответствующих разрешений. Эти разрешения пользователь должен установить вручную для каждой библиотеки отдельно.
Чтобы открыть диалог установки разрешений для скриптов - откройте список триггеров библиотеки и нажмите кнопку Щит на тулбаре. Установка разрешений должна выполняться на каждом устройстве отдельно. Выбранные разрешения не синхронизируются между устройствами.
Разрешения для скриптов
- Libraries
- Определяет какие библиотеки помимо родной будут доступны скрипту. Вы можете предоставить доступ ко всем библиотекам или выбрать определенные библиотеки. Данное разрешение требуется для функции libByName.
- Read files
- Предоставляет скрипту доступ на чтение файлов с запоминающего устройства. Данное разрешение требуется для функции file.
- Write files
- Предоставляет скрипту доступ на создание и изменение файлов в запоминающем устройстве. Данное разрешение требуется для функции file.
- Network
- Предоставляет скрипту право выполнять http запросы. Данное разрешение требуется для функции http.
Действия
Действие | Фаза | Выполнение |
---|---|---|
Создание записи | открытие формы создания | синхронное |
перед сохранением записи | синхронное | |
после сохранения записи | асинхронное | |
Изменение записи | открытие формы изменения записи | синхронное |
перед сохранением записи | синхронное | |
после сохранения записи | асинхронное | |
Удаление записи | перед удалением записи | синхронное |
после удаления записи | асинхронное | |
Открытие карточки записи | перед отображением окна | синхронное |
после отображения окна | асинхронное | |
Добавление записи в избранное | перед операцией | синхронное |
после операции | асинхронное | |
Удаление записи из избранного | перед операцией | синхронное |
после операции | асинхронное |
Библиотеки и записи
Глобальные Функции
entry()
- Получить запись в контексте которой происходит выполнение скрипта. Т.е. если скрипт выполняется на действие Изменение записи, то данная функция возвращает изменяемую запись.
- Функция доступа для всех действий и фаз выполнения, за исключением "Создание записи - открытие формы создания", для данного действия используйте функцию entryDefault.
- Результат: Объект Entry, текущая запись.
entryDefault()
- Получить объект для установки значений по умолчанию для еще не созданной записи. Функция доступна для действия Создание записи и фазы выполнения Открытие формы создания.
- Результат: Объект DefaultEntry.
lib()
- Получить библиотеку в контексте которой происходит выполнение скрипта.
- Результат: Объект Library, текущая библиотека.
libByName(name)
- Найти библиотеку по имени. В настройках безопасности должно быть установлено разрешение на использование получаемой библиотеки.
- Результат: Объект Library, найденная библиотека.
Объект Library
Через этот объект осуществляется доступ к записям библиотеки. Можно работать с текущей библиотекой - lib() или с любой другой библиотекой в базе данных - libByName(). Помимо функций получения записей данный объект предоставляет возможность создания новой записи.
Методы
entries()
- Получить все записи библиотеки.
- Результат: Array[Entry] Массив записей. Записи отсортированы по времени их создания - от новых к старым.
find(query)
- Поиск записей в библиотеки по значениям полей. Поиск аналогичен поиску через интерфейс программы.
- Параметры: query - строка поиска.
- Результат: Array[Entry] Массив найденных записей. Записи отсортированы по времени их создания - от новых к старым.
findByKey(name)
- Поиск записи в библиотеки по имени. Для библиотеки должен быть включен параметр Уникальные имена.
- Параметры: name - имя записи.
- Результат: Объект Entry.
create(values)
- Создание новой записи в библиотеке.
- Параметры: values - объект класса Object содержащий значения полей.
- Результат: Объект Entry, созданная запись.
Свойства
- title
- Название библиотеки.
Объект Entry
Этот объект является записью библиотеки и предоставляет возможность получать и устанавливать значения полей.
Методы
set(name , value)
- Установить значение поля. После вызова метода сразу же происходит запись значения в базу данных.
- Параметры: name - имя поля, value - значение поля.
field(name)
- Получить значение поля
- Параметры: name - имя поля
- Результат: значение поля, тип результата зависит от типа поля.
Свойства
- title
- Имя записи.
- description
- Описание записи.
- favorites
- Возвращает true - если запись находится в избранном
- deleted
- Возвращает true - если запись удалена (находится в корзине).
Объект DefaultEntry
Шаблон со значениями по умолчанию для создания новой записи.
Методы
set(name , value)
- Установить значение поля.
- Параметры: name - имя поля, value - значение поля.
Примеры
Функции работы с файлами
С помощью скриптов можно выполнять чтение или запись файлов расположенных во внутренней памяти устройства или на сд-карте. Все операции с файлами производятся через объект File, который получается через вызов метода file().
Для работы с файлами для библиотеки должно быть установлено разрешение - на чтение и/или на запись файлов.
file(name)
Открыть файл для операций чтения или записи.
- Параметр: name - имя и полный путь к файлу. Например, если файл расположен на sd-card, путь должен иметь вид /sdcard/example.txt.
- Результат: Объект File.
Объект File
Данный объект возвращается функцией file() и предоставляет доступ к запрошенному файлу. Если файл с указанным в функции file() именем ещё не существует, то но будет создан.
Методы
Свойства
Функции выполнения http запросов
С помощью скриптов можно выполнять http-запросы, что позволяет обмениваться информацией с веб-службами предоставляющими API. Также через http запросы вы можете интегрировать Memento со своей системой. Все операции с файлами производятся через объект Http, который получается через вызов глобального метода http().
Http запросы доступны при соблюдении двух условий:
- Выполнение скрипта должно быть асинхронным (фоновым), так как обработка запроса по сети может занимать много времени. Таким образом выполнять http-запросы можно только в последних фазах действий.
- В библиотеки должно быть установлено разрешение - Network.
Объект Http
Интерфейс выполнения http запросов.
Методы
get(url)
- Выполнить get запрос.
- Параметры: url - http адрес, должен начинаться с http или https
- Результат: HttpResult - объект содержащий результат выполнения http запроса.
Объект HttpResult
Результат выполнения http запроса
Свойства
- code
- http код ответа, если запрос выполнен успешно, то он обычно равен 200.
- body
- тело ответа в виде текста.
Примеры
Взаимодействие с системой
Глобальные Функции
message(text)
- Отобразить пользователю небольшое всплывающее сообщение.
- Параметры: text - текст для отображения.
cancel()
- Отменить операцию вызвавшую данный триггер. Многие действия возникают при каких либо операциях с записями (создание, модификация, удаление и .д.). Если фаза действия предшествует операции, то возможно отменить эту операцию с помощью данной функции. Например, применять эту функцию можно при проверки корректности вводимых данных перед сохранением записи.
system()
- Получить информацию о системе.
- Результат: Объект System с информацией о системе.
log(text)
- Вывести строку в лог-файл выполнения скрипта. Функция будет полезна для отладки скриптов.
- Параметры: Text - текст который будет выведен в лог.
intent(action)
- Создать объект обмена сообщениями - Intent. С помощью данного объекта можно передать данные другому приложению, или заставить другое приложение выполнить какое-либо действие.
Функция доступна только для Android.
- Параметры: action - Строка, определяющая стандартное действие, которое требуется выполнить (например, view (просмотр) или pick (выбор)).
- Результат: Intent - объект обмена сообщениями.
После получения объекта требуется добавить в него отправляемые данные и вызывать метод send(). В Android есть множество встроенных действий, список и описание которых вы можете найти здесь.
Объект System
Данный объект содержит информацию о системе.
Свойства
- os
- имя операционной системы на которой запущен скрипт.
Объект Intent
Объект обмена сообщениями. Объект создается с помощью вызова глобальной функции intent().
Методы
data(uri)
- Установить URI ссылающийся на данные.
- Параметры:uri - URI, ссылающийся на данные, с которыми будет выполняться действие. Это может быть идентификатор контакта, путь к файлу, номер телефона и т.д.
mimeType(mime)
- Установить MIME тип данных.
- Параметры:mime - MIME тип данных с которыми будет выполняться действие.
extra(key, value)
- Установить дополнительные данные в виде ключ-значение, которые необходимы для выполнения запрошенного действия. Точно так же, как некоторые действия используют определенные виды URI данных, некоторые действия используют определенные дополнительные данные.
- Параметры:
extraLong(key, value)
- Установить дополнительные данные в виде ключ-значение, где значение должно быть типом Long.
send()
- Отправить сообщение.
Примеры
Скрипт открывающий окно набора номера
В библиотеке должно быть поле Phone, содержащие номер телефона.
i = intent("android.intent.action.DIAL")
i.data("tel:"+entry().field("Phone"))
i.send()
- Создаем объект обмена сообщениями Intent и указываем действие которое откроет окно набора номера - android.intent.action.DIAL.
- В качестве данных требуется указать номер телефона в формате tel:номер. Номер телефона берем из поля записи Phone.
- Отправляем сообщение.
Скрипт открывающий приложение для отправки смс-сообщения
Номер телефона будет определяться полем записи - Phone, а текст сообщения составляется из полей ContactName и Notes.
msg = “Dear, “ + entry().field(“ContactName”) + “\n” + entry().field(“Notes”)
i = intent(“android.intent.action.SENDTO”)
i.data(“smsto:”+entry().field(“Phone”))
i.extra(“sms_body” , msg)
i.send()
- Составляем сообщение из значений полей ContactName и Notes
- Создаем объект обмена сообщениями Intent и указываем действие которое откроет приложение для отправки сообщений- android.intent.action.SENDTO.
- В качестве данных требуется указать номер телефона в формате smsto:номер. Номер телефона берем из поля записи Phone.
- Текст сообщение передаем в дополнительный параметр sms_body.
- Отправляем сообщение.
Скрипт открывающий форму создания события в Гугл-Календаре.
Время события и название события будут определяться полями записи.
i = intent(“android.intent.action.INSERT”)
i.data(“content://com.android.calendar/events”)
i.extra(“title” , entry().field(“Title”))
i.extra(“description” , entry().field(“Description”))
i.extraLong(“beginTime” , entry().field(“Begin”).getTime())
i.extraLong(“endTime” , entry().field(“End”).getTime())
i.send()
- Создаем объект обмена сообщениями Intent и указываем действие которое требуется выполнить, а именно создание объекта - android.intent.action.INSERT.
- Для события android.intent.action.INSERT в data требуется передать базовый Uri создаваемого объекта. Событие в Google-календаре имеет базовый Uri - content://com.android.calendar/events.
- Устанавливаем название события, которое берем из поля Title.
- Устанавливаем описание события, которое берем из поля Description.
- Устанавливаем время начала события, которое берем из поля Begin. Поле Begin должно иметь тип Date/Time. Дополнительный параметр beginTime должен иметь тип Long, поэтому используется метод extraLong.
- Устанавливаем время окончания события, которое берем из поля End. Поле End должно иметь тип Date/Time. Дополнительный параметр endTime должен иметь тип Long, поэтому используется метод extraLong.
- Отправляем сообщение.