07 Источники данных и операции

Источники данных и операции (Data Sources and Operations)

Источники данных (Sources of data)

Первый раздел выпадающего меню позволяет выбрать источники данных, которые в режиме работы будут выводить информацию из приложения или из внешнего мира.

Текущий пользователь (Current user)

Представляет собой информацию о пользователе, в данный момент использующем приложение. Пользователь может как находиться в системе, так и быть разавторизованным. В первом случае вы сможете получить доступ к его email и т.д. Во втором случае вы можете изменять объект пользователя, но после закрытия браузера вы не можете получить доступ к его информации.

Совершить поиск (Do a search for)

Данной функцией можно воспользоваться, чтобы совершить поиск по базе данных приложения. Задайте тип сущности, которую нужно найти (это может быть тип user или какой-либо еще, созданный вами), а также порядок формирования списка и ограничения. Ограничения можно накладывать на любое поле, например, чтобы имя содержало "peter", а адрес находился в пределах одной мили от "User's current position"/"Текущие координаты пользователя" и т.д.

Получить данные из внешнего API ( Get data from an external API )

Данная функция позволяет получить данные из внешнего мира с помощью одного из плагинов для Bubble. Например, Google Places может вернуть список мест в зависимости от адреса или слова, т.е. в зависимости от того, что вы ищете. Обычно, для работы API процедур нужны параметры. Их можно задать в Сдвигаемой панели (Slidable Palette). С помощью "Insert dynamic data" можно сделать эти параметры динамическими. Тип данных, возвращаемых плагином, зависит от самого плагина. Это может быть список мест, которые нужно отобразить на карте или в повторяющей группе, одна запись, которую нужно отобразить в группе или текстовом элементе и т.д.

Сущность родительской группы/Сущность текущей ячейки (Parent group's thing / Current cell's thing)

Это способ обратиться к "Parent element's value"/"Значению родительского элемента". Например, при использовании повторяющей группы, в которой отображается список пользователей, у каждой ячейки будет свой пользователь. И "Current cell's user" будет представлять данного пользователя. Типом данных будет тип содержимого контейнера.

Индекс текущей ячейки (Current cell's index)

Этот источник данных позволяет получить номер текущей ячейки повторяющей группы. У первой ячейки будет номер 1, у второй - 2 и т.д. Это полезно для отображения рангов или для изменения форматирования элементов в зависимости от этого номера.

Сущность текущей страницы (Current page thing)

Если у вашей страницы есть тип содержимого, этот источник данных поможет вам обратиться к содержимому. Например, при создании площадки для аренды жилья, у вас скорее всего будет страница с подробностями о каждой квартире. У такой страницы будет тип содержимого "Квартира"/"Apartment", а по ссылка будет открывать эту страницу и посылать на неё заданную "Квартиру"/"Apartment". С помощью этого источника данных можно обратиться к полю "Current page's apartment"/"Квартира текущей страницы". Тогда вы получите данные, относящиеся к этой квартире, такие как изображение, адрес и т.д.

Элемент (Element)

Этот источник данных позволяет обратиться к элементу и получить доступ к его состояниям, таким как "hovered"/"мышь наведена", "value"/"значение" и т.д. Например, так можно получить значение поля ввода.

Данный элемент (This element)

Этот источник данных позволяет получить доступ к элементу, редактируемому в данный момент. так вы можете обратиться к его состояниям.

Результат предыдущего шага ( Result of previous step )

Это способ обратиться к результату предыдущего шага/действия рабочего процесса. Например, при использовании действия "Create a new thing"/"Создать новую сущность" для создания сущности "Apartment"/"Квартира" последующие действия смогут обратиться к результату первого шага (result of step one) и использовать созданную сущность типа "Apartment".

Сущность текущего процесса (Current Workflow thing)

При использовании пользовательских рабочих процессов вам может понадобиться, чтобы процесс изменил посланный в него объект. Этим объектом будет "Current Workflow thing". Его типом будет тип используемого пользовательского рабочего процесса.

Получить данные из URL страницы (Get data from page URL)

Этот источник данных позволяет получить доступ к параметрам, переданным в URL страницы или пути. Например, URL текущей страницы: " yourdomain.com/yourpage?age=23". Настройте источник данных так, чтобы получит параметр "age". Тогда в режиме работы приложения данный источник вернет значение "23". Параметры чувствительны к регистру. Мы рекомендуем использовать нижний регистр и избегать специальных символов, пробелов и т.д. Если выберете "path"/"путь", то сможете получить "hello" из URL "yourdomain.com/yourpage/hello". Выберите тип данных, который должен быть у этого параметра, а затем используйте эти данные в Редакторе Bubble. Если вы выбрали тип данных, который является пользовательским типом данных или типом User, то значение параметра должно являться идентификатором (ID) сущности.

Предупреждение: данный функционал предназначен для опытных пользователей.

Сущность текущей опции (Current option/thing)

Некоторые элементы предоставляют доступ к текущей опции. Так, при использовании выпадающего меню с динамическими вариантами, например, списком пользователей, вам может понадобиться узнать, названия других опицй. Вы можете выбрать "Current option's email", чтобы получить выпадающее меню, содержащее список email`ов данного пользователя.

Параметры точки входа API (API Endpoint parameters)

Это различные параметры, к которым имеет доступ точка входа API (API endpoint). При работе с точкой входа API (API endpoint) задайте значения параметров на уровне События (Event). Выберите соответствующую запись в верхней части выпадающего меню, чтобы получить доступ к значению параметра.

Вычислить формулу (Calculate formula)

Этот источник данных выполняет сложные вычисления, такие как ссудные проценты и т.д. Свяжитесь с нами, если вам нужны дополнительные типы вычислений.

Данные страницы (Page data)

Эти источники данных позволяют получить доступ к информации о странице.

Домашняя страница сайта: {#Data.DataSources.PageData.Website%20Home}

Возвращает домашнюю страницу приложения. Если пользователь находится на странице "http://yourdomain.com/a_page", то функция вернет значение "http://yourdomain.com"

Данный URL:

Возвращает точный URL текущей страницы.

Текущий язык:

Возвращает текущий язык, используемый в приложении. Язык можно указать несколькими способами. Они расположены в порядке приоритета:

  • параметр lang: Например, можно указать &lang=english в адресной строке

  • Поле в текущем пользователе: Если вы установите поле в разделе Languages вкладки Settings и измените это поле у текущего пользователя, язык примет значение этого поля.

  • Основной язык приложения: Заданный в разделе Languages вкладки Settings.

В каждом из случаев, если возвращенное значение не входит в число доступных опций в выпадающем меню раздела Languages вкладки Settings, будет выбрана следующая опция.

Имя текущей страницы:

Возвращает имя текущей страницы. Используется в элементах многократного использования, чтобы у элемента была информация о том, на какой странице он используется.

Email администратора сайта:

Возвращает email администратора приложения. Без платного тарифа Bubble или домена будет возвращаться значение admin-no-reply@bubble.is. На платном тарифе Bubble и с доменом будет возвращаться email, заданный в разделе Domain вкладки Settings. Эта функция используется вместо внесения адреса вручную, т.к. он может со временем измениться, например при регистрации с платным тарифом Bubble.

Текущая дата/время:

Возвращает текущее время на компьютере пользователя. Имеет тип date.

Текущая геопозиция:

Возвращает текущую геопозицию пользователя, если она доступна. Браузер предложит пользователю предоставить к ней доступ. Имеет тип geographic address.

Ширина текущей страницы:

Возвращает ширину страницы в пикселях. Полезно при создании адаптивных страниц.

Позиция прокрутки текущей страницы:

Возвращает количество пикселей от верха страницы до текущего экрана.

Верен ли токен сброса пароля:

Возвращает значение yes/истина или no/ложь, если вы находитесь на странице reset_pw. Определяет, был ли данный токен до этого использован для сброса пароля пользователем. Каждый токен может быть использован только один раз.

Загружен первый экран страницы:

Первоначально возвращает no/false(ложь), а затем true(истина), когда видны все элементы первого экрана страницы (находящиеся на расстоянии высоты экрана браузера пользователя от верха страницы) и загружены все данные, необходимые для отображения этих элементов. Используется для того, чтобы выборочно скрыть что-либо до того, как страница будет готова к отрисовке, чтобы избежать появления странностей при загрузке.

Обратите внимание: Если элемент начинает с невидимого состояния, если параметр имеет значение false, то элемент не начнет загружаться до тех пор, пока параметр не станет true. Поэтому, скройте элемент, который долго загружается, поместите поверх него что-либо еще, например, элемент Shape (Прямоугольник)

Страница загружена (целиком)

Первоначально возвращает no/false(ложь), а затем true(истина), когда видны все элементы и загружены все данные, необходимые для отображения этих элементов. Используется для того, чтобы выборочно скрыть что-либо до того, как страница будет готова к отрисовке, чтобы избежать появления странностей при загрузке.

Обратите внимание: Если элемент начинает с невидимого состояния, если параметр имеет значение false, то элемент не начнет загружаться до тех пор, пока параметр не станет true. Поэтому, скройте элемент, который долго загружается, поместите поверх него что-либо еще, например, элемент Shape (Прямоугольник)

Версия разработчика

Возвращает yes/true, если приложение находится в версии Разработчика (Development mode)

Текст приложения (Application Text)

Если приложение должно работать с несколькими языками, задайте ID текстов и используйте их в Bubble. Затем, выберите язык в разделе Languages вкладки Settings. Например, при добавлении новой кнопки в меню настройки текста выберите "Insert dynamic data", а затем "App text (?)".

Несовместимый с полем ввода тип (Incompatible type for inputs)

Если в поле ввода находятся данные неподходящего типа, вы его сможете их выбрать в выпадающем меню. Например, вы хотите совершить поиск создателя сущности, которую вы ищете, и вам нужно, чтобы создатель соответствовал одному из пунктов выпадающего меню, в котором перечислены пользователи. Если у вас неправильно выставлен тип для элемента выпадающего меню, вы не сможете его выбрать. Это можно будет сделать, изменив тип элемента на уровне выпадающего меню.

Операции с данными и операции сравнения (Data operations and comparisons)

Общие операторы [Shared operators]

Эти операторы общие для всех типов данных.

... is ...

Проверяет две записи на равенство. Если равны, возвращает yes.

... is not ...

Проверяет две записи на равенство. Если не равны, возвращает yes.

... is empty

Проверяет, пуста ли запись, т.е. в ней нет содержимого

... is not empty

Проверяет, есть ли в записи содержимое.

Тип text (текст) [Text type]

... contains

Данная операция проверяет, есть ли в первой записи аргумент. Подстрока должна точно совпадать с последовательностью символов в первой строке.

... doesn't contain

Данная операция проверяет, что аргумент не содержится в первой записи.

:capitalized words

Возвращает текст так, что каждое слово начинается с заглавной буквы. Например, "this is bob" станет "This Is Bob".

:uppercase

Возвращает текст так, что все буквы будут заглавными. Например, "helLo" станет "HELLO".

:lowercase

Возвращает текст так, что все буквы будут строчными. Например, "helLo" станет "hello".

:formatted as ...

Форматирует текст специальным образом. Можно выбрать одну из опций: US Phone, URL Encoded и MD5 Hash.

:trimmed

Удаляет пробелы в начале и конце текста. Например, " аб " станет "аб".

:number of characters

Возвращает число символов в тексте.

:truncated to

Оставляет только Х первых символов текста.

:truncated from end to

Обрезает текст, начиная с конца и удаляя X символов

:extract...

Извлекает текст из текста. Например, извлекает домен из email адреса.

:find/replace...

Динамически определяет текст, который нужно найти и заменить. Возвращает новый текст. Операция происходит для всего текста.

:extract with Regex

Эта функция для опытных пользователей, которая извлекает записи из текста с использованием регулярного выражения. Например, если регулярное выражение: " @\S+", а текст "@one_name and @another_name", то функция вернет список текстов: "@one_name", "@another_name".

Тип number (число) [Number type]

:formatted as ...

Форматирует текст различными способами

Внимание: После того, как число форматировано, оно считается текстом и не может использоваться в вычислениях.

... > ...

Возвращает yes, если первое число больше второго

... ≥ ...

Возвращает yes, если первое число больше или равно второму

... < ...

Возвращает yes, если первое число меньше второго

... ≤ ...

Возвращает yes, если первое число меньше либо равно второму

... + ...

Суммирует первое и второе число

... - ...

Вычитает второе число из первого

... * ...

Умножает первое число на второе

... / ...

Делит первое число на второе

:rounded to

Округляет первое число до Х знаков после запятой. Например "0,234" будет "0,23" при аргументе "2", а "0,5" будет "1" при аргументе 0

:floor

Округляет число вниз до ближайшего целого. Например "1,234" будет "1", а "-2,3" будет "-3"

:ceiling

Округляет число вверх до ближайшего целого. Например "1,234" будет "2", а "-2,3" будет "-2"

... ^ ...

Возводит в степень. Первое число - основание, второе - степень. Например, "2^3" будет "8"

<- range ->

Генерирует интервал из двух чисел и возвращает его. Нижняя граница интервала - меньшее из чисел. верхняя граница - большее из чисел

... <- max -> ...

Возвращает наибольшее из двух чисел

... <- min -> ...

Возвращает наименьшее из двух чисел.

... <- modulo -> ...

Возвращает остаток от деления первого числа на второе. Например, "5 <- modulo -> 2" будет 1.

Подсказка: можно использовать, чтобы понять, число четное или нечетное.

Тип number range (числовой интервал) [Number range type]

Когда установлен тип интервал, slider input возвращает два числа.

:min

Возвращает начало диапазона (меньшее значение)

:max

Возвращает конец диапазона (большее значение)

:average

Возвращает центр диапазона, вычисляя среднее значение между началом и концом

contains range

Принимает на вход два интервала. Возвращает yes/да, если первый интервал содержит второй. Под "содержит" понимается то, что начало второго интервала больше или равно началу первого, а конец второго интервала меньше либо равен концу первого. Поэтому, если интервалы одинаковы, операция вернет yes/да.

contains

Принимает на вход интервал и число. Возвращает да, если интервал содержит число. Под "содержит" понимается, что число больше либо равно началу интервала и меньше либо равно концу интервала.

is contained by

Принимает на вход два интервала. Возвращает yes/да, если второй интервал содержит первый. Под "содержит" понимается то, что начало первого интервала больше или равно началу второго, а конец первого интервала меньше либо равен концу второго. Поэтому, если интервалы одинаковы, операция вернет yes/да.

overlaps with

Принимает на вход два интервала. Возвращает yes/да, если существует число, которое принадлежит обоим интервалам. Поэтому, если конец одного интервала является начало другого или наоборот, вернет yes/да.

is greater

Принимает на вход два интервала. Возвращает yes/да, если начало одного интервала строго больше конца другого.

is greater (point)

Принимает на вход интервал и число. Возвращает yes/да, если начало интервала строго больше числа.

is smaller

Принимает на вход два интервала. Возвращает yes/да, если конец одного интервала строго меньше начала другого.

is smaller (point)

Принимает на вход интервал и число. Возвращает yes/да, если конец интервала строго меньше числа.

Типа date (дата) [Date type]

Этот тип данных представляет точный момент времени (измеряемый до миллисекунд). При отображении дат мы переводим их в легкие для восприятие дату и время в часового пояса пользователя; для настройки её отображения вы можете воспользоваться функцией "formatted as ..." Если в одном часовом поясе пользователь сохраняет дату, а другой пользователь просматривает сохраненную дату, второй пользователь будет видеть её относительно своего часового пояса.

Часовой пояс пользователя сообщается его браузером. Большинство современных браузеров имеют такую функцию; если нет, мы постараемся сделать предположение о часовом поясе пользователя на основании его настроек времени. Во время работы рабочего процесса мы используем часовой пояс, в котором рабочий процесс был запущен. Для запланированных и рекурсивных рабочих процессов мы запоминаем часовой пояс, в котором они были созданы. (Таким образом, если пользователь запустил рабочий процесс A, в котором выполнение процесса B было запланировано через 2 дня, затем от летит на самолете в новый часовой пояс и запускает рабочий процесс C, то процессы A и B будут работать в прежнем часовом поясе, а процесс C - в новом). В ситуациях, когда не используется браузер, например при запуске рабочих процессов с помощью Bubble API, мы используем для вычислений время в стандарте UTC.

При выполнении математических операций с датами существуют два типа вычислений: в соответствии с календарем, при котором размер временных единиц зависит от таких понятий, как число дней в месяце или даты перевода часов, и абсолютные вычисления, при которых у складываемых и вычитаемых единиц времени фиксированное количество миллисекунд. Большинство функций работы с датами в Bubble основаны на календарных вычислениях. Например, если пользователь, находящийся в часовом поясе североамериканского восточного времени (ET) в Соединенных Штатах введет дату "11 марта 2018 01:00", а затем использует функцию "+(days)" с аргументом "1", то получит "12 марта 2018 01:00", хотя фактически, из-за перехода на летнее время это произойдет не через 24 часа, а через 23. Вычисления в соответствии с календарем всегда происходят в том часовом поясе, в котором находится пользователь, поэтому возможна ситуация, когда два пользователя, находящиеся в разных часовых поясах могут выполнить одни и те же вычисления с одинаковой начальной датой и получить разные результаты.

Основное исключение из этого правила - операции "+(seconds)" и "+(hours)", для которых используется абсолютное вычисление: при вызове их с аргументом "1" к начальному времени всегда добавится 1 или 3600 секунд соответственно. Обратите внимание, что операции "change hours to" и "change seconds to" вычисляются в соответствии с календарем. На абсолютные вычисления не влияют часовые пояса: если два пользователя в разных поясах вызовут функцию "+(seconds)" с одинаковой начальной датой и аргументом, то в результате получат один и тот же момент времени (хотя этот момент времени может по-разному отображаться у них на экране из-за разницы в часовых поясах).

При выполнении вычислений в соответствии с календарем дробные числа округляются до ближайшего целого, поэтому прибавление 0,9 дней будет соответствовать добавлению одного дня. Исключением является прибавление лет, при котором округление происходит до ближайшего числа месяцев. При выполнении абсолютных вычислений дроби округляются до ближайшей миллисекунды, поэтому прибавление 1,2005 секунд прибавит 1,201 секунд.

:formatted as ...

Форматирует дату.

Внимание: После форматирования даты она считается текстом и не может более участвовать в операциях с типом date.

<- range ->

Создает интервал из двух дат. Он будет представлять собой отрезок времени от момента первой даты до момента второй даты. Интервалы дат полезны для представления данных о доступном времени.

... +(seconds):

Создает новую дату, прибавляя заданное количество секунд к дате или вычитая количество секунд, если аргумент представляет собой отрицательное число. При этом выполняется абсолютное вычисление без учета календаря: мы всегда прибавляем 1 000 миллисекунд для каждой секунды.

... +(hours):

Создает новую дату, прибавляя заданное количество часов к дате или вычитая количество часов, если аргумент представляет собой отрицательное число. При этом выполняется абсолютное вычисление без учета календаря: мы всегда прибавляем 3 600 000 миллисекунд для каждого часа.

... +(days):

Создает новую дату, прибавляя заданное количество дней к дате или вычитая количество дней, если аргумент представляет собой отрицательное число. Операция выполняется в соответствии с календарем в часовом поясе пользователя. Например, если прибавление дня пересекает дату перевода часов с летнего на зимнее или обратно, данная функция может прибавить 23 часа вместо 24.

... +(months):

Создает новую дату, прибавляя заданное количество месяцев к дате или вычитая количество месяцев, если аргумент представляет собой отрицательное число. Операция выполняется в соответствии с календарем в часовом поясе пользователя. Если в итоговом месяце нет соответствующего числа дней из-за того, что он короче исходного месяца, мы будем использовать последний день месяца. Так, прибавив один месяц к 30 января мы получим 28 февраля (или 29 в високосный год).

... +(years):

Создает новую дату, прибавляя заданное количество лет к дате или вычитая количество лет, если аргумент представляет собой отрицательное число. Операция выполняется в соответствии с календарем в часовом поясе пользователя.

... change seconds to ...

Создает новую дату, заменяя значение секунд в часовом поясе пользователя. Например, "Среда 12 августа 2015 22:21:42" с аргументом "0" станет "Среда 12 августа 2015 22:21:00". Если вы попытаетесь изменить секунды на значение, большее 59, то увеличите и минуты. При любом изменении секунд значение миллисекунд установится в 0. Это сделано для того, чтобы при сравнении даты с тем же количеством секунд, минут, дней, месяцев и лет можно было сравнивать и получить равенство с другой датой.

... change minutes to ...

Создает новую дату, заменяя значение минут в часовом поясе пользователя. Например, "Среда 12 августа 2015 22:21:42" с аргументом "55" станет "Среда 12 августа 2015 22:55:42". Если вы попытаетесь изменить минуты на значение, большее 59, то увеличите и часы.

... change hours to ...

Создает новую дату, заменяя значение часов в часовом поясе пользователя. Например, "Среда 12 августа 2015 22:21:42" с аргументом "19" станет "Среда 12 августа 2015 19:21:42". Если вы попытаетесь изменить часы на значение, большее 23, то увеличите и дни.

... change date (day) to ...

Создает новую дату, заменяя значение дней в часовом поясе пользователя. Например, "Четверг 24 декабря 2015 13:35:38" с аргументом "6" станет "Понедельник 6 декабря 2015 13:35:38". Если вы попытаетесь изменить дату на значение, большее количества дней в текущем месяце, то перейдете в следующий месяц.

... change month to ...

Создает новую дату, заменяя значение месяца в часовом поясе пользователя. Например, "Четверг 24 декабря 2015 13:35:38" с аргументом "2" станет "Вторник 24 февраля 2015 13:35:38". Аргумент обозначает цифровое значение месяца, например, "1" - Январь, "2" - Февраль и т.д. Если вы попытаетесь изменить месяц на значение, большее 12, то перейдете в следующий год. Если в новом месяце меньше дней, чем в текущей дате, то результатом операции будет последний день нового месяца.

... change years to ...

Создает новую дату, заменяя значение года в часовом поясе пользователя. Например, "Среда 12 августа 2015 22:21:42" с аргументом "2013" станет "Среда 12 августа 2013 22:21:42".

... > ...

Возвращает значение "yes", если первая дата идет после второй.

... < ...

Возвращает значение "yes", если первая дата идет раньше второй.

... - ...

Вычитает вторую дату из первой и возвращает разницу в формате Time difference.

Extract from date

Извлекает из даты компонент, в соответствии с часовым поясом пользователя. Возвращает этот компонент в виде числа. Можно выбрать одну из следующих опций:

minute (минута: 0 - 59)

hour (час: 0 - 23, для 24 формата 24-hour clock)

day (день недели: Воскресенье = 0, Понедельник = 1, ... Суббота = 6)

date (день месяца: 1 - 31)

week (неделя года: 1 - 53. Для вычисления номера недели используется система ISO week date system , которая может отличаться от местного счета)

month (месяц: 1 (Январь) - 12 (Декабрь))

year (например, 2,018)

UNIX (в миллисекундах: число миллисекунд, прошедших с 1 Января 1970 00:00:00 UTC): Это тот же формат, который возвращает Javascript функция Date.now(), и именно так вычисляются даты внутри Bubble. Обратите внимание, что многие компьютерные системы измеряют UNIX формат в секундах: для перевода в секунды, разделите данное значение на 1000.

... <- max -> ...

Возвращает более позднюю из двух дат.

... <- min -> ...

Возвращает более раннюю из двух дат.

Тип временной интервал [Date range type]

Данный тип состоит из двух дат. Интервал - то, что находится между ними. Используется для создания расписаний, системы бронирования и т.д.

:start

Возвращает начало интервала (меньшее значение)

:end

Возвращает конец интервала (большее значение)

:center

Возвращает центр интервалаа, вычисляя среднее значение между началом и концом

contains range

Принимает на вход два интервала. Возвращает yes/да, если первый интервал содержит второй. Под "содержит" понимается то, что начало второго интервала больше или равно началу первого, а конец второго интервала меньше либо равен концу первого. Поэтому, если интервалы одинаковы, операция вернет yes/да.

contains

Принимает на вход интервал и дату. Возвращает да, если интервал содержит дату. Под "содержит" понимается, что дата больше либо равно началу интервала и меньше либо равно концу интервала.

is contained by

Принимает на вход два интервала. Возвращает yes/да, если второй интервал содержит первый. Под "содержит" понимается то, что начало первого интервала больше или равно началу второго, а конец первого интервала меньше либо равен концу второго. Поэтому, если интервалы одинаковы, операция вернет yes/да.

overlaps with

Принимает на вход два интервала. Возвращает yes/да, если существует дата, которая принадлежит обоим интервалам. Поэтому, если конец одного интервала является начало другого или наоборот, вернет yes/да.

is after

Принимает на вход два интервала. Возвращает yes/да, если начало одного интервала строго больше конца другого.

is after (point)

Принимает на вход интервал и дату. Возвращает yes/да, если начало интервала строго больше даты.

is before

Принимает на вход два интервала. Возвращает yes/да, если конец одного интервала строго меньше начала другого.

is before (point)

Принимает на вход интервал и дату. Возвращает yes/да, если конец интервала строго меньше даты.

Тип время между датами [Date interval type]

Этот тип представляет разницу между двумя датами. Выражено точным числом миллисекунд, а не календарными понятиями, такими как "один день". Сложение или вычитание данных с типом Date interval всегда выполняется с помощью абсолютных вычислений, а не в соответствии с календарем. См. выше тип Date, чтобы получить больше информации касаемо отличий абсолютных вычислений и вычислений в соответствии с календарем.

:format as days

Преобразует разницу в число дней. Вычисляется делением на 24 часа с последующим округлением до ближайшей десятой доли (так, 298 944 000 миллисекунд - это 3,5 дня)

:format as hours

Преобразует разницу в число часов. Вычисляется делением на один час (т.е, 3 600 000 миллисекунд ) с последующим округлением до ближайшей десятой доли.

:format as minutes

Преобразует разницу в число минут. Вычисляется делением на 60 000 миллисекунд с последующим округлением до ближайшего целого числа.

:format as seconds

Преобразует разницу в число секунд. Вычисляется делением на 1 000 миллисекунд с последующим округлением до ближайшей целого числа.

Булев тип [Boolean type]

is "yes"

Возвращает значение yes/да, если логическое выражение принимает значение "истина"

is "no"

Возвращает значение no/нет, если логическое выражение принимает значение "ложь"

... and ....

Возвращает результат логического И для двух выражений типа yes/no. Возвращает "yes", если оба выражения имеют значение "yes".

... or ....

Возвращает результат логического ИЛИ для двух выражений типа yes/no. Возвращает "yes", если хотя бы одно выражение имеет значение "yes".

...:formatted as text

Форматирует результат выражения "yes/no". Используется для того, чтобы изменить язык для "yes" и "no".

...:formatted as number

Форматирует результат yes/no в число для последующих вычислений. Обычно используется значение "1" для "yes" и "0" для "no", но вы можете использовать любые числа.

Тип файл [File type]

Этот тип представляет файл, т.е. ссылку на файл, загруженный на сервер.

...'s file name

Извлекает имя файла из ссылки. Например, для "//s3.amazonaws.com/appforest_uf/id/filename.pdf" вернет "filename.pdf".

...'s URL

Возвращает ссылку на файл.

: saved to S3

При сохранении файла сохраняется ссылка, которая его представляет. Если файл получен из внешнего API, то может храниться где угодно. Данная функция используется для того, чтобы сохранить файл на сервер Bubble для дальнейшего использования (например, в Imgix). Это может происходить только в тех рабочих процессах, которые сохраняют сущности.

:encoded in base64

Эта функция получает содержимое файла и кодирует его в base64. Эта кодировка является стандартной для передачи данных. Используется для загрузки файлов по API в тех случаях, когда согласно документации к API данные должны быть в формате base64.

Обратите внимание: на данный момент функция работает только внутри процессов процессах, осуществляемых на сервере. При его запуске в браузере результат будет пустым.

Тип изображение [Image type]

Этот тип представляет изображение, т.е. ссылку на изображение, загруженное на сервер.

...'s file name

Извлекает имя файла из ссылки. Например, для "//s3.amazonaws.com/appforest_uf/id/picture.png" вернет "picture.png".

...'s URL

Возвращает ссылку на файл.

: saved to S3

При сохранении файла сохраняется ссылка, которая его представляет. Если файл получен из внешнего API, то может храниться где угодно. Данная функция используется для того, чтобы сохранить файл на сервер Bubble для дальнейшего использования (например, в Imgix). Это может происходить только в тех рабочих процессах, которые сохраняют сущности.

:encoded in base64

Эта функция получает содержимое файла и кодирует его в base64. Эта кодировка является стандартной для передачи данных. Используется для загрузки файлов по API в тех случаях, когда согласно документации к API данные должны быть в формате base64.

Обратите внимание: на данный момент функция работает только внутри процессов процессах, осуществляемых на сервере. При его запуске в браузере результат будет пустым.

:processed with Imgix

Обрабатывает изображение с помощью Imgix. Например, автоматически обрезает изображение, чтобы оставить лицо, улучшает изображение, убирает эффект красных глаз, применяет фильтр sepia и т.д. Подробности см в документации к Imgix

Обратите внимание: Данная функция может обрабатывать только те изображения, которые находятся на сервере Bubble.

Географический адрес [Geographic Address]

Этот тип представляет собой адрес.

...'s formatted address

Возвращает текстовую версию адреса, которую можно выводить стандартным способом.

Внимание: после форматирования адрес считается текстом и не может использоваться в операциях с адресами

Возвращает ссылку, при клике на которую открывается окно Google карт с меткой в центре карты, которая соответствует данному адресу.

... distance from ...

Возвращает расстояние между двумя адресами либо в метрической, либо в Американской системе счисления.

:extract ...

Извлекает из адреса какую-либо часть. Это может быть страна, штат, улица и т.д.

...'s latitude

Возвращает широту адреса в виде числа.

...'s longitude

Возвращает долготу адреса в виде числа.

...'s time zone ID

Возвращает часовой пояс данного адреса в виде строки, согласно стандартному кодированию от Google. См. подробности здесь.

...'s time zone name

Возвращает название часового пояса данного адреса, например "Eastern Daylight Time". Этот параметр НЕ стоит использовать для форматирования часового пояса. Вместо него используйте ID.

...'s daylight saving time offset

Смещение при переводе часов на летнее время в секундах. Если в текущий момент время не переведено на летнее, то возвращается значение 0.

...'s offset from UTC (minutes)

Это смещение времени относительно UTC в данной местности. Не учитывает переход на летнее время.

Список сущностей [List of things]

Часто встречается необходимость работы со списками текстов, чисел, сущностей, пользователей и т.д. Для этого используются эти списки. На данный момент список ограничен 10 000 записей. При добавлении большего количества отобразится сообщение об ошибке.

... :count

Возвращает количество элементов списка.

... contains ...

Возвращает yes, если аргумент содержится в списке.

... doesn't contain ...

Возвращает yes, если аргумента нет в списке.

...:first item

Возвращает первый элемент списка.

...:last item

Возвращает последний элемент списка.

...:random item

Возвращает случайный элемент списка. Полная случайность не гарантируется. Результат может быть смещен в какую-то сторону, поэтому данная функция используется в основном для отображения.

...:item #

Возвращает #-ый элемент списка.

...:items until #

Возвращает подсписок от первого до #-ого элемента списка.

...:items from #

Возвращает подсписок от #-ого до последнего элемента списка.

... contains list ...

Возвращает yes, если первый список содержит все записи из второго списка.

... join with ...

Возвращает текстовую версию списка с разделителем, который был указан в аргументе функции. Если использовать разделитель "line_break", то каждая запись будет с новой строки.

... :sum

Суммирует элементы списка из чисел.

... :product

Перемножает элементы списка из чисел.

... :average

Возвращает среднее значение списка чисел.

... :median

Возвращает медиану списка чисел.

... :min

Возвращает минимальное значение из списка чисел.

... :max

Возвращает максимальное значение из списка чисел.

...:filtered

Фильтрует список согласно критерию . Эта операция работает аналогично поиску, но происходит после самого поиска, а также может быть использована для поля, если это поле - список сущностей. Ограничения при фильтрации работают так же, как и ограничения при поиске.

...:sorted

Сортирует список сущностей.

:ranked by...

Ранжирует список сущностей относительно того, как сильно они похожи или отличаются от целевого элемента. Этот элемент должен быть того же типа, что и элементы списка. Например, данная функция может использоваться при поиске пары в приложении для знакомств.

... merged with ...

Данная операция производит слияние двух списков. Возвращает новый список, содержащий элементы из обоих списков. Если элемент входит в оба списка, то в результирующем он встретится один раз.

... intersect with ...

Данная операция принимает на вход два списка сущностей и возвращает те записи, которые есть в обоих списках.

... :unique elements

Данная операция удаляет дубли из списка.

...:plus item

Данная операция добавляет элемент в список сущностей. Возвращает новый список, который содержит весь исходный список и новый элемент. Если в списке уже есть такая запись, она не будет добавлена.

...:minus item

Данная операция удаляет элемент из списка. Возвращает новый список, в котором есть все элементы исходного списка, но нет указанного элемента. Если элемент не входит в список, то он не будет удален.

...:make static

Данная операция преобразует список, составленный из динамических данных, таких как значение полей ввода с ограничениями для поиска и переводит их в список с текущими элементами. После преобразования в статический вид список не изменится, если будут изменены исходные значения.

Предупрежение: данная функция предназначена для опытных пользователей.

...group by

Пользовательские типы [Custom Types]

Эти типы данных определяются при создании структуры данных. Большинство этих операций также применяются к типу User.

Creator

Возвращает пользователя, создавшего текущую сущность. Если пользователь был неавторизован при создании сущности, то данное поле будет пустым.

Created Date

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

Modified Date

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

...'s unique id

Возвращает уникальный ID сущности в базе данных приложения Bubble. Каждая запись имеет уникальный ID. Его можно использовать при создании ссылок и т.д. Внимание: Эта функция для опытных пользователей и обычно не обязательна.

Данная функция генерирует ссылку на страницу приложения, чьим типом содержимого является тип текущей сущности. Клик по этой ссылке откроет такую страницу и передаст текущую сущность в поле current page's thing.

...:converted to list

Данная функция преобразует уникальный элемент в список, если вам нужно использовать другие списки или повторяющую группу.

Пользовательские поля [Custom Fields]

Field name

Введите имя для описания поля.

Field type

У поля должен быть тип. Это может быть number, text, yes/no, address и т.д. Также поле может быть уже созданного пользовательского типа и хранить сложный объект. Например, у квартиры будет поле типа booking, которое также будет пользовательским.

This field is a list (multiple entries)

Вам часто нужно будет работать со списками текстов, чисел, сущностей, пользователей и т.д. Галочка здесь позволит определить поле как список сущностей. На данный момент списки ограничены 10 000 записей. При попытке добавить больше отобразится сообщение об ошибке.

Default value

Значение по умолчанию - это способ задать значение поля, если для него ничего не было указано при создании сущности с помощью действия "Create new thing".

Тип Пользователь [User Type]

Данные поля и опции используются для типа User.

Email

Применяется только для типа User и возвращает email пользователя. Если пользователь зарегистрировался с помощью социальной сети, то, если возможно, вернет email, переданный данной социальной сетью.

...is logged in

Возвращает значение yes, если текущий пользователь авторизован.

...is logged out

Возвращает значение yes, если текущий пользователь не авторизован.

...'s email confirmed

Возвращает yes, если текущий пользователь подтвердил свой email, перейдя по ссылке в письме для подтверждения.

... uses 2FA

Возвращает yes, если текущий пользователь активировал двухфакторную авторизацию для своей учетной записи.

Поиск [Search]

Это настройки поиска и операторы, используемые при выполнении поиска.

Тип сущности [Type of find]

Выберите тип сущностей, которые нужно найти. Это может быть тип User или тип, созданный вами.

Ограничения [Constraints]

Введите различные ограничения, которые будут применяться к результатам поиска.

Поле для сортировки [Sorting field]

Выберите поле, по которому будет сортирован список.

Change which field......

Выберите данную опцию, если вы хотите, чтобы поле для сортировки было динамическим. Если опция выбрана, отобразится другое поле и в нем вы сможете задать поле. Они может быть динамическим и должно совпадать с именем одного из полей, которое существует в базе данных. Если это не так, отобразится сообщение об ошибке.

Random sorting

Выберите данную опцию, чтобы рандомизировать результаты сортировки. Для каждого пользователя и после каждого обновления результаты будут отличаться.

Динамическое имя поля [Dynamic field name]

Если вы хотите, чтобы результаты поиска были отсортированы по полю, выбранному пользователем, задайте выражение, которое определит поле, используемое для сортировки. Например, созданное выражение может принимать значение "Created Date" или другого поля, которое есть у вашего типа (оно должно совпадать с отображаемым именем поля).

Расстояние от [Distance from]

При сортировке по полю location, результаты будут отображаться в соответствии с расстоянием от точки. Здесь можно задать эту точку. Это может быть Current position (Текущее положение), address (адрес) и т.д.

По убыванию [Descending]

Выберите "yes", если нужно сортировать в порядке убывания, или "no" - в порядке возрастания. Опция может быть динамической и задаваться выражением, возвращающим значение yes/no, например, элементом checkbox.

Дополнительные правила сортировки [Adding additional sorting rules]

Если вам нужно более одного правила сортировки, кликните по кнопке выберите поле и порядок сортировки для этого поля. Правила будут применяться в указанном порядке.

Любое поле [Any field]

Выполняет поиск по всем полям базы данных приложения для заданного типа. Например, можно найти все записи с "John" в имени ИЛИ фамилии.

Расширенные [Advanced]

Выполняет более сложный поиск. Например, чтобы найти все сущности типа apartment, почта создателей которых зарегистрирована на yahoo.com, используйте выражение "This apartment's creator's email:extract domain is 'yahoo.com'". Данная операция происходит после того, как результаты поиска или список получены от сервера и не так эффективна, как использование ограничений при поиске.

Конфиденциальность [Privacy]

Данный раздел вкладки Data позволяет настроить безопасность путем задания правил, благодаря которым пользователи не смогут посмотреть или изменить данные, если у них нет к ним доступа. Для этого нужно задать роли для каждого из пользовательских типов по необходимости. Если применяются несколько правил, то пользователь получит доступ к объекту, если хотя бы одно правило его предоставляет.

Внимание: Эта функция для опытных пользователей.

Задать новую роль [Define a new role]

Данная кнопка создает новую роль для выбранного типа. Задайте точное имя типа, условия и права. Условие определяет, к каким пользователям применяется роль, а права определяют, что пользователь может делать с данными, если соответствует условиям.

Имя [Name]

Имя роли. В этом поле ввода можно его изменять.

Удалить [Delete]

Клик по этой иконке удаляет роль. Данное действие не удаляет данные. Оно удаляет только роль для выбранного типа.

Когда (условие) [When (condition)]

Задайте условия, которые будут проверять, имеет пользователь данную роль или нет. Создайте по частям динамическое выражение с помощью Конструктора выражений. Например, если вы зададите условие для типа "Event" как "This event's creator is current user"/"Создателем данного события является текущий пользователь", то в таком случае только пользователь, создавший сущность типа "Event" будет входить в данную роль.

Права [Permissions]

Определяют, что может делать с данными пользователь в данной роли.

Find this in searches (Находить в поиске)

Уберите галочку, чтобы пользователи в данной роли не могли видеть результаты поиска сущностей данного типа.

View all fields (Просматривать все поля)

Поставьте галочку, чтобы пользователи могли просматривать все поля сущностей данного типа, если они соответствуют условиям. Если галочку убрать, то вы сможете выбрать, какие поля видят пользователи в данной роли.

View attached files (Просматривать прикрепленные файлы)

Если галочки нет, то пользователи не смогут просмотреть загруженные файлы, прикрепленные к сущности данного типа. Например, предположим, что у вас есть процесс, в котором пользователи могут создать "Квартиру"/"Apartment", а у неё есть изображения. Вы можете настроить загрузчик изображений так, чтобы изображение было связано с конкретной квартирой в базе данных. Тогда, если убрать галочку в данном поле и если выполняется условие "This apartment's creator isn't current user", то другие пользователи не смогут увидеть это изображение, даже если оно отображается с помощью элемента image или у пользователя есть ссылка на сам файл этого изображения.

Allow auto-binding (Разрешить автоматическую привязку)

Свяжите содержимое поля ввода с полем сущности. При изменении содержимого поля ввода пользователь будет автоматически изменять данные сущности. См. "Включить автоматическую привязку к сущности родительского элемента" для элементов ввода. Вам нужно дать пользователю права на изменение полей. Для этого воспользуйтесь правом "Allow auto-binding". Поставьте здесь галочку, пользователь мог изменять поле сущности при изменении содержимого поля ввода, если он соответствует условию. После того, как поставите галочку нужно выбрать поле ввода, которое будет изменяться благодаря автоматической привязке.

Modify via API (Изменять по API)

Если для типа данных активирован Data API, это право дает пользователю возможность изменять любое поле этой сущности. Для того, чтобы разрешить внесение изменений, правило, дающее эти права, должно выполняться как до, так и после внесения изменений. Это позволяет ограничить то, какие поля могут изменяться. Если вам нужна более тонкая настройка разграничения доступа к полям данных вместо предоставления этих прав доступа вы можете использовать Workflow API, где можно точно контролировать изменяемые данные.

Delete via API (Удалять по API)

Если для типа данных активирован Data API, это право дает пользователю возможность удалять сущность по API.

Create via API (Создавать по API)

Если для типа данных активирован Data API, это право дает пользователю возможность создавать новые сущности по API. Если правило, которое дает эти права, обращается к полям сущности, то попытки создания сущности будут отклонены, если правило не применяется. (!!!КАК ХОТИТЕ, ТАК И ПОНИМАЙТЕ, Я САМ НЕ ОДУПЛЯЮ!!!)

Last updated