Таблица api: Расшифровка классификации масла по API

Содержание

Как работать с API Google Таблиц (Google Sheets API v4) на языке R с помощью нового пакета googlesheets4 / Хабр

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

В этой статье мы разберёмся с тем, как на языке программирования R работать с Google Sheets API v4 с помощью пакета googlesheets4, а точнее:


  • Как пройти авторизацию для работы с Google Таблицами по API;
  • Рассмотрим основные функции пакета;
  • Разберём примеры кода для чтения данных, создания новых таблиц и выполнения других манипуляций с Google Таблицами по API.

Также эта статья поможет пользователям устаревшего пакета googlesheets мигрировать на новый googlesheets4.

Для тех кому лень читать статью, вот ссылка на 10 минутный, русскоязычный видео урок на YouTube. Остальным добро пожаловать под кат.


Если вы интересуетесь анализом данных, и в частности языком R, возможно вам будут интересны мои telegram и youtube каналы. Большая часть контента которых посвящена языку R.


  1. Зачем переходить на работу с пакетом googlesheet4
  2. Миграция с googlesheets на googlesheets4
  3. Установка пакета googlesheets4
  4. Авторизация
    4.1. Авторизация со стандартными параметрами
    4.2. Авторизация через собственное приложение
    4.3. Авторизация через сервисный аккаунт
    4.4. Разница между авторизацией через приложение и через сервисный аккаунт
  5. Основные функции пакета googlesheets4
  6. Пример работы с API Google Таблиц на языке R
    6.1. Загрузка данных из существующих Google Таблиц
    6.2. Создание Google Таблиц с помощью API
    6. 3. Создание нового листа в Google Таблице
    6.4. Дописываем строки в существующий лист
    6.5. Перемещение Google Таблиц между папаками Google Диска
  7. Полезные ссылки по теме статьи
  8. Заключение

Если вы уже являетесь активным пользователем языка R, и на практике вам встречались задачи по работе с Google Sheets API наверняка вы уже знакомы с пакетом googlesheet. И вполне резонно, что первый вопрос который возник у вас в голове — «А чем же googlesheets4 лучше?».

На самом деле по функционалу они похожи, возможно даже googlesheets пока имеет больше возможностей, но он работает только с Google Sheets API V3. Google несколько месяцев назад сообщил, что поддержка 3 версии данного API будет прекращена 3 марта 2020 года.

Именно поэтому, даже если вас вполне устраивает пакет googlesheets, вам в любом случае до 3 марта необходимо мигрировать на googlesheets4, надеюсь данная статья вам в этом поможет.


Что бы максимально упростить миграцию с устаревшего пакета googlesheets на новый googlesheets4 я решил добавить таблицу соответвия новых функций старым.



Для работы с API Google Таблиц, как я уже писал выше, мы будем использовать пакет googlesheets4, написанный Дженни Брайан из RStudio.

Установить его можно как из CRAN, так и из GitHub.

Устновка из CRAN:

install.packages('googlesheets4')

Установка из GitHub:

# установка пакета devtools
if ( !require(devtools) ) install.packages("devtools")
# установка пакета googlesheets4
devtools::install_github("tidyverse/googlesheets4")

# подключаем пакет
library(googlesheets4)

В пакете googlesheets4 есть по меньшей мере 3 способа авторизации:


  1. Использовать стандартные параметры функции gs4_auth().
  2. Авторизоваться через собственное приложение.
  3. Авторизоваться через сервисный аккаунт.

Авторизация со стандартными значениями аргументов

Наиболее простой способ авторизации предоставляет функция gs4_auth() со значением аргументов принятых в ней по умолчанию.

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

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


Авторизация через собственное приложение


Как создать своё приложение?

Для создания приложения следуйте приведённым ниже инструкциям:


  1. Переходим в Google Cloud Console и создаём там проект, если у вас ещё нет созданного. Также для создания проекта можно воспользоваться ссылкой.
  2. Переходим в «Основное меню» > «API и сервисы» > «Учетные данные».
  3. «Создать учетные данные» > «Идентификатор клиента OAuth».
  4. Вводим любое произвольное название для вашего приложения.
  5. Далее будет сгенерирован id и secret вашего приложения.
  6. Теперь вам необходимо либо скачать JSON файл с созданными учётными данными, либо скопировать id и секрет созданного вами приложения.

Скачиваем JSON

Копируем ID и секрет приложения

Если вы впервые создаёте приложение в Google Console, то также вам предварительно понадобиться создать «Окно запроса доступа OAuth», просто заполните в нём название и ваш email, насколько я помню больше там никаких обязательных полей нет.

Последний шаг, включаем Google Sheets API, для этого достаточно перейти по этой ссылке и нажать кнопку включить API.

Теперь возвращаемся в RStudio, подключаем пакет и проходим авторизацию через своё приложение.

Проходим авторизацию через JSON файл:

# подключаем пакет
library(googlesheets4)

# указываем путь к JSON файлу, который ранее скачали
gs4_auth_configure(path = "C:/path/to/app_credential.
json") # проходим авторизацию gs4_auth(email = "[email protected]")

Проходим авторизацию указав в коде ID и Секрет приложения:

# подключаем пакет
library(googlesheets4)

# указываем путь к JSON файлу, который ранее скачали
httr::oauth_app(appname = "app_name", 
                  key    = "00000000-abcdefghk.apps.googleusercontent.com", 
                  secret = "qwertyuiopasdf")

# проходим авторизацию
gs4_auth(email = "[email protected]")

После запуска функции gs4_auth(), в приведённых выше примерах кода, вы будете перенаправлены в браузер. Там вы подтверждаете разрешение на доступ к данным и возвращаетесь в RStudio для продолжения работы.


Авторизация через сервисный аккаунт

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


  1. Создать проект в Google Cloud, если он ещё не создан.
  2. Включить Google Sheets API, для этого необходимо перейти по этой ссылке.
  3. Для создания сервисного аккаунта перейдите по этой ссылке.
  4. Заполните его название и описание (при необходимости) и нажмите «Создать».
  5. Роль устанавливать не надо, поэтому жмём «Продолжить».
  6. В следующем окне жмём «Создать ключ» > Тип ключа выбираем JSON > Создать.
  7. Запоминаем расположение и название JSON файла, при сохранении вы можете дать ему любое название.
  8. Жмём «Готово».

Теперь у вас появился сервисный аккаунт, откройте его и скопируйте почту.

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


  1. Открываем Google Таблицу.
  2. Жмём «Настройка доступа».
  3. Открываем доступ на почту созданного сервисного аккаунта.

Проходим авторизацию через сервисный аккаунт:

# подключаем пакет
library(googlesheets4)

# проходим авторизацию через сервисный аккаунт
gs4_auth(path = "C:/path/to/service_credential. json")

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


Разница между авторизацией через приложение и через сервисный аккаунт

Основными отличиями между авторизацией через приложение и через серверный аккаунт являются:


  1. При авторизации через сервисный аккаунт не требуется подтверждать доступ к данным через браузер.
  2. Сервисный аккаунт имеет доступ только к тем Google таблицам к которым вы сами ему предоставили доступ на почту. При авторизации через приложение вы подтверждаете доступ ко всей доступной вашему Google аккаунту информации.

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


Все функции пакета googlesheets4 разделены на 3 группы, каждая группа функций имеет свой префикс, который говорит об области действия этой функции:


  • gs4_ — объединяет функции реализующие операции над книгой GoogleSheets
  • sheet_ — операции над рабочими листами
  • range_ — операции над отдельными диапазонами ячеек
  • cell_ — операции над отдельными ячейками

Давайте рассмотрим основные функции пакета googlesheets4.


  • gs4_auth() — Авторизация;
  • gs4_create() — Создаёт новую Google Таблицу;
  • gs4_browse() — Открывает Google Таблицу в браузере;
  • as_sheets_id() — Инициализирует подключение к Google Таблице, в качестве единственного аргумента принимает URL или ключ нужной Google Таблицы;
  • range_read() — Считывает данные из указанного листа Google Таблицы;
  • sheet_write() — Записывает данные в Google Таблицу, при необходимости создаёт новый лист. Если вы пытаетесь записать данные на существующий лист то все данные будут перезаписаны;
  • sheet_append() — Дописывает данные на уже существующий лист;
  • sheet_add()
    — Создаёт новые листы в существующей Google Таблице;
  • sheet_delete() — Удаляет существующие листы из Google Таблицы;
  • sheet_names() — Выводит вектор содержащий имена листов Google Таблицы.

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


Теперь я приведу примеры кода для выполнения основных операций с Google Таблицами.


Для примера нам потребуются какие-нибудь тестовые наборы данных. Что бы не изобретать велосипед мы будем использовать созданную мной Google Таблицу и встроенные в R датасеты iris, mtcars и ToothGrowth.


Загрузка данных из существующих Google Таблиц

Считывание данных из Google Таблицы является наиболее часто используемой операцией.

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

Для подключения вам необходимо воспользоваться функцией as_sheet_id(), в которую следуют передать ключ или URL адрес Google Таблицы.

URL: https://docs.google.com/spreadsheets/d/1hP1OwJuSHfvrTZvZUgEHDwcPPVlDMwPwCqCQPs64OSE/
Ключ: 1hP1OwJuSHfvrTZvZUgEHDwcPPVlDMwPwCqCQPs64OSE

Как вы поняли из приведённого выше примера ключ это часть URL адреса таблицы, которая находится между /d/ и следующие слешем .

Для чтения данных в googlesheets4 предназначена функция range_read().

Пример кода для чтения данных из Google Таблицы

# подключаем пакет
library(googlesheets4)

# проходим авторизацию одним из описанных способов
gs4_auth(email = "[email protected]")

# подключаемся к тестовому доксу
my_dox <- as_sheets_id("1hP1OwJuSHfvrTZvZUgEHDwcPPVlDMwPwCqCQPs64OSE")
# считываем данные с листа test_data
data   <- range_read(my_dox, sheet = "test_data")

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

data <- as_sheets_id("1hP1OwJuSHfvrTZvZUgEHDwcPPVlDMwPwCqCQPs64OSE") %>%
        range_read("test_data")

Создание Google Таблиц с помощью API

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


  • name — Имя Google Таблицы;
  • locale — Региональные настройки;
  • timeZone — Часовой пояс;
  • sheets — Принимает вектор с именами листов, либо список, название каждого элемента списка будет сконвертировано в имя листа, а в качестве значений вы можете передать дата фреймы которые будут записаны на эти листы.

Пример создания Google Таблицы

# подключаем пакет
library(googlesheets4)

# проходим авторизацию одним из описанных способов
gs4_auth(email = "[email protected]")

# создаём Google Таблицу
ss <- gs4_create(name = "my_new_dox", 
                    locale = "ru_RU",
                    sheets = list(mtcars = mtcars,
                                  iris   = head(iris)))

# открываем созданную таблицу в браузере
gs4_browse(ss)

Приведённый выше код создаст новую Google Таблицу «my_new_dox», в которой будут 2 листа: mtcars, iris.


Создание нового листа в Google Таблице

Итак, только что мы создали новую Google Таблицу, и при этом инициировали объект подключения к ней, который назвали ss.

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

Пример кода для создания нового листа с данными

# создаём новый лист с данными
sheet_write(ToothGrowth, ss, 
             sheet = "tooth_growth")
Writing to 'my_new_dox'
Writing to sheet "tooth_growth"

Функция sheet_write() имеет 3 основных аргумента:


  • data — Дата фрейм с данными которые вы хотите записать на новый лист, или перезаписать данные на существующем листе.
  • ss — Объект подключения к Google Таблице, который вы можете получить с помощью функций as_sheets_id() или gs4_create().
  • sheet — Название листа который будет создан в Google Таблице, или на котором будут перезаписаны данные.

Дописывание строк в существующий лист

Ещё одна достаточно важная операция — добавление данных на уже существующий лист.

Осуществляется эта операция функцией sheet_append(), которая имеет 3, уже знакомых вам аргумента.


  • data — Дата фрейм с данными которые вы хотите дописать на существующий лист.
  • ss — Объект подключения к Google Таблице, который вы можете получить с помощью функций as_sheets_id() или gs4_create().
  • sheet — Название листа на который требуется дописать строки.

При создании таблицы my_new_dox мы записали на лист iris только первые 6 строк с данными, давайте допишем оставшиеся.

Пример кода для добавления строк на существующий лист

# дописываем строки на лист iris
sheet_append(data = iris[7:150,], ss, 
              sheet = "iris")
Writing to 'my_new_dox'
Appending 144 row(s) to 'iris'

Перемещение Google Таблиц между папаками Google Диска

Ещё одна операция которая может вам пригодиться, но в данном случае помимо googlesheets4 вам понадобится пакет googledrive.

Установка googledrive

install.packages("googledrive")

Переместить созданную ранее Google Таблицу можно с помощью функции drive_mv(). Но предварительно необходимо пройти автооризацию с помощью функции drive_auth().

Авторизация в пакете googledrive ничем не отличается от описанной в начале этой статьи, т.к. оба рассматриваемых пакета для авторизации используют вспомогательный пакет gargle. Авторизовавшись с попощью функции drive_auth() вы можете передать полученный токен в пакет googlesheets4 для совместного использования: gs4_auth(token = drive_token()).

Далее открываем на Google Диске нужную папку и копируем её URL или ключ. Если нужная папка ещё не создана её можно создать с помощью функции drive_mkdir().

Для инициализации подключения к папке используем функцию as_id().

Пример кода для перемещения Google Таблицы из одной папки Google Диска в другую

# Подключаем библиотеки
library(googlesheets4)
library(googledrive)

# авторизация
## можно либо дважды пройти авторизацию, отдельно под каждым пакетом
## gs4_auth(email = "[email protected] com")
## drive_auth(email = "[email protected]")

## либо пройти авторизацию с помощью google drive, и передать полученный токен для дальнейшего использования в google sheets
drive_auth(email = "[email protected]")
gs4_auth(token = drive_token())

# Инициируем подключение к таблице и папке
## Подключаемся к таблице которую требуется переместить
ss     <- as_sheets_id("1BNrYUajVSR3wuGySY0ybXrqh4-Jjq-eIS5_f_a6kt_c")

## Подключаемся к папке в которую надо перенести Google таблицу
folder <- as_id("1x94xChfZwSCPFzHvWqwk6HyF85_ASDFW")

# Либо создаём новую папку
## folder <- drive_mkdir("my_folder")

# Переносим Google Таблицу в нужную директорию
drive_mv(file = ss, 
         path = folder)
File moved:
  * my_new_dox -> my_folder/my_new_dox

В этом разделе приведу несколько полезных ссылок по теме статьи:



Описанных в статье возможностей пакета googlesheets4 достаточно для решения подавляющего большинства задач, в которых необходимо использовать Google Sheets API.

На данный момент googlesheets4 находится в стадии активной разработки. Автор пакета планирует реализовать его функционал в полном объёме к марту 2020 года, в связи с чем в статье возможны корректировки и дополнения по мере изменения или расширения возможностей пакета.

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

Введение в web APIs — Изучение веб-разработки

Начнём с рассмотрения того что представляют собой API на высоком уровне и выясним, как они работают, как их использовать в своих программах и как они структурированы. Также рассмотрим основные виды API и их применение.

Необходимые знания: Базовая компьютерная грамотность, понимание основ HTML и CSS,  основы JavaScript (см. первые шаги, building blocks, объекты JavaScript).
Цель: Познакомиться с API, выяснить что они могут делать и как их использовать.

Интерфейс прикладного программирования (Application Programming Interfaces, APIs) — это готовые конструкции языка программирования, позволяющие разработчику строить сложную функциональность с меньшими усилиями. Они «скрывают» более сложный код от программиста, обеспечивая простоту использования.

Для лучшего понимания рассмотрим аналогию с домашними электросетями. Когда вы хотите использовать какой-то электроприбор, вы просто подключаете его к розетке, и всё работает. Вы не пытаетесь подключить провода напрямую к источнику тока — делать это бесполезно и, если вы не электрик, сложно и опасно.

Image source: Overloaded plug socket by The Clear Communication People, on Flickr.

Точно также, если мы хотим, например, программировать 3D графику, гораздо легче сделать это с использованием API, написанных на языках высокого уровня, таких как JavaScript или Python.

API клиентской части JavaScript

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

  • API браузера встроены в веб-браузер и способны использовать данные браузера и компьютерной среды для осуществления более сложных действий с этими данными. К примеру, API Геолокации (Geolocation API) предоставляет простые в использовании конструкции JavaScript для работы с данными местоположения, так что вы сможете, допустим, отметить своё расположение на карте Google Map. На самом деле, в браузере выполняется сложный низкоуровневый код (например, на C++) для подключения к устройству GPS (или любому другому устройству геолокации), получения данных и передачи их браузеру для обработки вашей программой, но, как было сказано выше, эти детали скрыты благодаря API.
  • Сторонние API не встроены в браузер по умолчанию. Такие API и информацию о них обычно необходимо искать в интернете. Например, Twitter API позволяет размещать последние твиты (tweets) на вашем веб-сайте. В данном API определён набор конструкций, осуществляющих запросы к сервисам Twitter и возвращающих определённые данные.

Взаимодействие JavaScript, API и других средств JavaScript

Итак, выше мы поговорили о том, что такое JavaScript API клиентской части и как они связаны с языком JavaScript. Давайте теперь тезисно запишем основные понятия и определим назначение других инструментов JavaScript:

  • JavaScript — Язык программирования сценариев высокого уровня, встроенный в браузер, позволяющий создавать функциональность веб-страниц/приложений. Отметим, что JavaScript также доступен на других программных платформах, таких как Node. Но пока не будем останавливаться на этом.
  • API браузера (Browser APIs) — конструкции, встроенные в браузер, построенные на основе языка JavaScript, предназначенные для облегчения разработки функциональности.
  • Сторонние API (Third party APIs) — конструкции, встроенные в сторонние платформы (такие как Twitter, Facebook) позволяющие вам использовать часть функциональности этих платформ в своих собственных веб-страницах/приложениях (например, показывать последние Твиты на вашей странице).
  • Библиотеки JavaScript — Обычно один или несколько файлов, содержащих пользовательские (custom) функции. Такие файлы можно прикрепить к веб-странице, чтобы ускорить или предоставить инструменты для написания общего функциональности. Примеры: jQuery, Mootools и React.
  • JavaScript фреймворки (frameworks) — Следующий шаг в развитии разработки после библиотек. Фреймворки JavaScript (такие как Angular и Ember) стремятся к тому, чтобы быть набором HTML, CSS, JavaScript и других технологий, после установки которого можно «писать» веб-приложение с нуля. Главное различие между фреймворками и библиотеками — «Обратное направление управления» ( “Inversion of Control” ). Вызов метода из библиотеки происходит по требованию разработчика. При использовании фреймворка — наоборот, фреймворк производит вызов кода разработчика.

Широкое разнообразие API в современных браузерах позволяет наделить ваше приложение большими возможностями. Достаточно посмотреть список на странице MDN APIs index page.

Распространённые API браузера

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

  • API для работы с документами, загруженными в браузер. Явный пример — DOM (Document Object Model) API, позволяющий работать с HTML и CSS — создавать, удалять и изменять HTML, динамически изменять вид страницы и т.д. Любое всплывающее окно на странице или появляющееся «на ходу» содержимое — всё это благодаря DOM. Узнайте больше об этой категории API на странице Работа с документами.
  • API, принимающие данные от сервера, часто используются, чтобы обновить небольшие части веб-страницы. Эта, казалось бы, малая деталь оказывает огромное влияние на производительность и поведение сайтов, так как нет необходимости перезагружать всю страницу целиком, если вам нужно просто обновить список товаров или новых доступных историй. Это также сделает приложение или сайт более отзывчивым и «живым». Список API, благодаря которым это возможно, включает: XMLHttpRequest и Fetch API. Вы также могли встретить термин Ajax, описывающий эту технологию. Узнать больше об этой категории API на странице Получение данных от сервера.
  • API для работы с графикой широко поддерживаются браузерами,  самые популярные: Canvas и WebGL, позволяющие программно изменять данные о пикселях, содержащиеся в элементе HTML  <canvas>  для создания 2D и 3D изображений. Например, вы можете нарисовать фигуры, скажем, прямоугольники или круги, импортировать изображение в canvas и применить к нему фильтры, такие как сепия или оттенки серого с помощью Canvas API, или создать сложное 3D-изображение с освещением и текстурами, используя WebGL. Такие API часто используют в сочетании с API создания анимационных циклов (таких как window.requestAnimationFrame()) и другими для создания постоянно меняющегося изображения на экране, как в мультфильмах или играх .
  • Аудио и Видео API как HTMLMediaElement, Web Audio API, и WebRTC позволяют делать действительно интересные вещи с мультимедиа. Например, создать собственный пользовательский интерфейс (User Interface, UI) для проигрывания аудио/видео, вывод на экран субтитров, записывать видео с веб-камеры для обработки в canvas (см. выше) или для передачи на другой компьютер в видео-конференции, применять звуковые эффекты к аудио-файлам (такие как gain, distortion, panning и т.д.).
  • API устройств — в основном, API для обработки и считывания данных с современных устройств удобным для работы веб-приложений образом. Мы уже говорили об API Геолокации, позволяющем считать данные о местоположении устройства. Другие примеры включают уведомление пользователя о появившемся обновлении для веб-приложения с помощью системных уведомлений (см. Notifications API) или вибрации (см. Vibration API).
  • API хранения данных на стороне пользователя приобретают всё большее распространение в веб-браузерах — возможность хранить информацию на стороне клиента очень полезна, когда необходимо создать приложение, которое будет сохранять своё состояние между перезагрузками страницы, или даже работать, когда устройство не в сети. В данный момент доступно немало таких API. Например, простое хранилище данных в формате имя/значение (name/value)  Web Storage API или хранилище данных в формате таблиц IndexedDB API.

Распространённые сторонние API

Существует множество сторонних API; некоторые из наиболее популярных, которые вы рано или поздно будете использовать, включают:

  • Twitter API для добавления такой функциональности, как показ последних твитов на сайте.
  • Google Maps API для работы с картами на веб-странице (интересно, что Google Maps также использует этот API). Теперь это целый набор API, который может справляться с широким спектром задач, как свидетельствует Google Maps API Picker.
  • Набор Facebook API позволяет использовать различные части платформы Facebook в вашем приложении, предоставляя, например, возможность входа в систему с логином Facebook, оплаты покупок в приложении, демонстрация целевой рекламы и т.д.
  • YouTube API, предоставляющий возможность встраивать видео с YouTube на вашем сайте, производить поиск, создавать плейлисты и т. д.
  • Twilio API — фреймворк для встраивания функциональности голосовой и видео связи в вашем приложении, отправки SMS/MMS из приложения и т.д.

Note: вы можете найти информацию о гораздо большем количестве сторонних API в Каталоге Web API.

Работа разных JavaScript API немного отличается, но, в основном, у них похожие функции и принцип работы.

Они основаны на объектах

Взаимодействие с API в коде происходит через один или больше объектов JavaScript, которые служат контейнерами для информации, с которой работает API (содержится в свойствах объекта), и реализуют функциональность, которую предоставляет API (содержится в методах объекта).

Note: Если вам ещё не известно как работают объекты, советуем вернуться назад и изучить модуль Основы объектов JavaScript прежде чем продолжать.

Вернёмся к примеру с API Геолокации — очень простой API, состоящий из нескольких простых объектов:

  • Geolocation, содержит три метода для контроля и получения геоданных.
  • Position (en-US), предоставляет данные о местоположении устройства в заданный момент времени — содержит Coordinates — объект, хранящий координаты и отметку о текущем времени.
  • Coordinates, содержит много полезной информации о расположении устройства, включая широту и долготу, высоту, скорость и направление движения и т.д.

Так как же эти объекты взаимодействуют? Если вы посмотрите на наш пример maps-example.html (see it live also), вы увидите следующий код:

navigator.geolocation.getCurrentPosition(function(position) {
  var latlng = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
  var myOptions = {
    zoom: 8,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.TERRAIN,
    disableDefaultUI: true
  }
  var map = new google.maps.Map(document.querySelector("#map_canvas"), myOptions);
});

Note: Когда вы впервые загрузите приведённый выше пример, появится диалоговое окно, запрашивающее разрешение на передачу данных о местонахождении этому приложению (см. раздел У них есть дополнительные средства безопасности там, где это необходимо далее в этой статье). Вам нужно разрешить передачу данных, чтобы иметь возможность отметить своё местоположение на карте. Если вы всё ещё не видите карту, возможно, требуется установить разрешения вручную; это делается разными способами в зависимости от вашего браузера; например, в Firefox перейдите > Tools > Page Info > Permissions, затем измените настройки Share Location; в Chrome перейдите Settings > Privacy > Show advanced settings > Content settings и измените настройки Location.

Во-первых, мы хотим использовать метод Geolocation.getCurrentPosition(), чтобы получить текущее положение нашего устройства. Доступ к объекту браузера Geolocation производится с помощью свойства Navigator.geolocation, так что мы начнём с

navigator.geolocation.getCurrentPosition(function(position) { . .. });

Это эквивалентно следующему коду

var myGeo = navigator.geolocation;
myGeo.getCurrentPosition(function(position) { ... });

Но мы можем использовать точки, чтобы связать доступ к свойствам/методам объекта в одно выражение, уменьшая количество строк в программе.

Метод Geolocation.getCurrentPosition() имеет один обязательный параметр — анонимную функцию, которая запустится, когда текущее положение устройства будет успешно считано. Сама эта функция принимает параметр, являющийся объектом Position (en-US), представляющим данные о текущем местоположении.

Такой подход, при котором функция вызывается только тогда, когда операция была завершена, очень распространён в JavaScript API — убедиться, что операция была завершена прежде, чем пытаться использовать данные, которые она возвращает, в другой операции. Такие операции также называют асинхронными операциями (asynchronous operations). Учитывая, что получение данных геолокации производится из внешнего устройства (GPS-устройства или другого устройства геолокации), мы не можем быть уверены, что операция считывания будет завершена вовремя и мы сможем незамедлительно использовать возвращаемые ею данные. Поэтому такой код не будет работать:

var position = navigator.geolocation.getCurrentPosition();
var myLatitude = position.coords.latitude;

Если первая строка ещё не вернула результат, вторая вызовет ошибку из-за того, что данные геолокации ещё не стали доступны. По этой причине, API, использующие асинхронные операции, разрабатываются с использованием callback function, или более современной системы промисов, которая появилась в ECMAScript 6 и широко используются в новых API.

Мы совмещаем API Геолокации со сторонним API — Google Maps API, который используем для того, чтобы отметить расположение, возвращаемое  getCurrentPosition() , на Google Map. Чтобы Google Maps API стал доступен на нашей странице, мы включаем его в HTML документ:

<script type="text/javascript" src="https://maps. google.com/maps/api/js?key=AIzaSyDDuGt0E5IEGkcE6ZfrKfUtE9Ko_de66pA"></script>

Чтобы использовать этот API, во-первых создадим объект LatLng с помощью конструктора google.maps.LatLng() , принимающим данные геолокации Coordinates.latitude (en-US) и Coordinates.longitude (en-US) :

var latlng = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);

Этот объект сам является значением свойства center объекта настроек (options), который мы назвали myOptions. Затем мы создаём экземпляр объекта, представляющего нашу карту, вызывая конструктор google.maps.Map() и передавая ему два параметра — ссылку на элемент <div>, на котором мы хотим отрисовывать карту (с ID map_canvas), и объект настроек (options), который мы определили выше.

var myOptions = {
  zoom: 8,
  center: latlng,
  mapTypeId: google. maps.MapTypeId.TERRAIN,
  disableDefaultUI: true
}

var map = new google.maps.Map(document.querySelector("#map_canvas"), myOptions);

Когда это сделано, наша карта отрисовывается.

Последний блок кода демонстрирует два распространённых подхода, которые вы увидите во многих API:

  • Во-первых, объекты API обычно содержат конструкторы, которые вызываются для создания экземпляров объектов, используемых при написании программы.
  • Во-вторых, объекты API зачастую имеют несколько вариантов (options), которые можно настроить и получить именно ту среду для разработки, которую вы хотите. API конструкторы обычно принимают объекты вариантов (options) в качестве параметров, с помощью которых и происходит настройка.

Note: Не отчаивайтесь, если вы что-то не поняли из этого примера сразу. Мы рассмотрим использование сторонних API более подробно в следующих статьях.

У них узнаваемые точки входа

При использовании API убедитесь, что вы знаете где точка входа для API. В API Геолокации это довольно просто — это свойство Navigator.geolocation, возвращающее объект браузера Geolocation, внутри которого доступны все полезные методы геолокации.

Найти точку входа Document Object Model (DOM) API ещё проще — при применении этого API используется объект Document, или экземпляр элемента HTML, с которым вы хотите каким-либо образом взаимодействовать, к примеру:

var em = document.createElement('em'); 
var para = document.querySelector('p'); 
em.textContent = 'Hello there!'; 
para.appendChild(em); 

Точки входа других API немного сложнее, часто подразумевается создание особого контекста, в котором будет написан код API. Например, объект контекста Canvas API создаётся получением ссылки на элемент <canvas>, на котором вы хотите рисовать, а затем необходимо вызвать метод HTMLCanvasElement.getContext():

var canvas = document.querySelector('canvas');
var ctx = canvas. getContext('2d');

Всё, что мы хотим сделать с canvas после этого, достигается вызовом свойств и методов объекта содержимого (content) (который является экземпляром CanvasRenderingContext2D), например:

Ball.prototype.draw = function() {
  ctx.beginPath();
  ctx.fillStyle = this.color;
  ctx.arc(this.x, this.y, this.size, 0, 2 * Math.PI);
  ctx.fill();
};

Они используют события для управления состоянием

Мы уже обсуждали события ранее в этом курсе, в нашей статье Introduction to events — в этой статье детально описываются события на стороне клиента и их применение. Если вы ещё не знакомы с тем, как работают события клиентской части, рекомендуем прочитать эту статью прежде, чем продолжить.

В некоторых API содержится ряд различных событий, в некоторых — событий нет. Свойства обработчика, позволяющие запускать функции при совершении какого-либо события по большей части перечислены в нашем материале отдельного раздела «Обработчики событий (Event handlers)». Как простой пример, экземпляры объекта XMLHttpRequest (каждый представляет собой HTTP-запрос к серверу на получение каких-либо ресурсов (resource)) имеют несколько доступных событий, например, событие load происходит, когда ответ с запрашиваемым ресурсом был успешно возвращён и доступен в данный момент.

Следующий код содержит простой пример использования событий:

var requestURL = 'https://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json';
var request = new XMLHttpRequest();
request.open('GET', requestURL);
request.responseType = 'json';
request.send();

request.onload = function() {
  var superHeroes = request.response;
  populateHeader(superHeroes);
  showHeroes(superHeroes);
}

Note: вы можете увидеть этот код в действии в примере ajax.html (see it live also).

В первых пяти строках мы задаём расположение ресурса, который хотим получить, создаём экземпляр объекта запроса с помощью конструктора XMLHttpRequest(), открываем HTTP-запрос GET, чтобы получить запрашиваемый ресурс, определяем, что мы хотим получить этот ресурс в формате json, после чего отсылаем запрос.

Затем функция-обработчик onload определяет наши действия по обработке ответа сервера. Нам известно, что ответ успешно возвращён и доступен после наступления события load (и если не произойдёт ошибка), так что мы сохраняем ответ, содержащий возвращённый сервером объект JSON в переменной superHeroes, которую затем передаём двум различным функциям для дальнейшей обработки.

У них есть дополнительные средства безопасности там, где это необходимо

Функциональность WebAPI подвержена тем же соображениям безопасности, что и JavaScript или другие веб-технологии (например, same-origin policy), но иногда они содержат дополнительные механизмы защиты. К примеру, некоторые из наиболее современных WebAPI работают только со страницами, обслуживаемыми через HTTPS в связи с передачей конфиденциальных данных (примеры: Service Workers и Push).

К тому же, некоторые WebAPI запрашивают разрешение от пользователя, как только к ним происходит вызов в коде. В качестве примера, вы, возможно, встречали такое диалоговое окно при загрузке нашего примера Geolocation ранее:

Notifications API запрашивает разрешение подобным образом:

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

На данном этапе, у вас должно сформироваться представление о том, что такое API, как они работают и как вы можете применить их в своём JavaScript-коде. Вам наверняка не терпится начать делать по-настоящему интересные вещи с конкретными API, так вперёд! В следующий раз мы рассмотрим работу с документом с помощью Document Object Model (DOM).

Airtable API для разработчиков

Airtable — потрясающий инструмент.

Это смесь электронной таблицы и базы данных.

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

Идеально подходит для прототипов

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

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

Большинство продуктов терпят неудачу не из-за технических ограничений или из-за того, что «стек не масштабируется». Они терпят неудачу, потому что либо в них нет необходимости, либо у производителя нет четкого способа продать продукт.

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

Отличный API

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

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

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

Отличная документация по API

Вот документация Airtable API:https://airtable.com/api.

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

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

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

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

Документация по API предлагает примеры использованияcurl:

и их официальный клиент Node.js:

Официальный клиент Node.js

Airtable поддерживает официальнуюAirtable.jsКлиентская библиотека Node.js, очень простой в использовании способ доступа к данным Airtable.

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

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

  • API_KEY: ключ API Airtable
  • BASE_NAME: название базы, с которой вы будете работать
  • TABLE_NAME: имя таблицы в этой базе.
  • VIEW_NAME: имя представления таблицы.

База — это короткий срок длябаза данных, и он может содержать множество таблиц.

В таблице есть одно или несколько представлений, которые по-разному организуют одни и те же данные. Всегда есть хотя бы один вид (узнать больше о просмотрах)

Аутентифицировать

Вы можете настроитьAIRTABLE_API_KEYпеременная окружения, и Airbase.js автоматически использует ее или явно добавит в ваш код:

const Airtable = require('airtable')

Airtable.configure({ apiKey: API_KEY })

Инициализировать базу

const base = require('airtable').base(BASE_NAME)

или, если вы уже инициализировали переменную Airtable, используйте

const base = Airtable.base(BASE_NAME)

Ссылка на таблицу

Сbaseобъект, теперь вы можете ссылаться на таблицу, используя

const table = base(TABLE_NAME)

Получить записи таблицы

Любая строка внутри таблицы называетсязаписывать.

Airtable возвращает не более 100 записей на каждой странице результатов. Если вы знаете, что никогда не перейдете более чем на 100 элементов в таблице, просто используйтеfirstPageметод:

table.select({
    view: VIEW_NAME
}).firstPage((err, records) => {
    if (err) {
      console.error(err)
      return
    }
<span>//all records are in the `records` array, do something with it

})

Если у вас (или ожидаете) более 100 записей, вам необходимо пролистать их по страницам, используяeachPageметод:

let records = []

// called for every page of records const processPage = (partialRecords, fetchNextPage) => { records = […records, …partialRecords] fetchNextPage() }

// called when all the records have been retrieved const processRecords = (err) => { if (err) { console.error(err) return }

//process the records array and do something with it }

table. select({ view: VIEW_NAME }).eachPage(processPage, processRecords)

Проверка содержимого записи

Любая запись имеет ряд свойств, которые вы можете проверить.

Во-первых, вы можете получить его ID:

record.id

//or record.getId()

и время создания:

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

record.get('Title')
record.get('Description')
record.get('Date')

Получите конкретную запись

Вы можете получить конкретную запись по ID:

const record_id = //...

table.find(record_id, (err, record) => {
    if (err) {
      console.error(err)
      return
    }
<span>console</span>.<span>log</span>(<span>record</span>)

})

Или по определенному значению столбца:

const getData = url => {
  table. select({
    filterByFormula: `{url} = "${url}"`
  }).eachPage(function page(records) {
    records.forEach(function(record) {
      console.dir(record.get('json'))
    })
  })
}

Также удобно использовать.all()и async / await, если вы хотите вернуть данные из функции:

const getData = async url => {
  const records = await table.select({
    filterByFormula: `{url} = "${url}"`
  }).all()

return records[0].get(‘json’) }

Обратите внимание, чтоall()извлекает все страницы результатов синхронно, и я бы использовал его только тогда, когда у вас есть несколько страниц результатов (или 1 результат, как в этом случае)

Создать новую запись

Вы можете добавить новую запись

table.create({
  "Title": "Tutorial: create a Spreadsheet using React",
  "Link": "https://flaviocopes.com/react-spreadsheet/",
}, (err, record) => {
    if (err) {
      console.error(err)
      return
    }
<span>console</span>. <span>log</span>(<span>record</span>.<span>getId</span>())

})

Обновить запись

Вы можете обновить одно поле записи и оставить другие поля нетронутыми, используяupdate:

const record_id = //...

table.update(record_id, {
  "Title": "The modified title"
}, (err, record) => {
    if (err) {
      console.error(err)
      return
    }
<span>console</span>.<span>log</span>(<span>record</span>.<span>get</span>(<span>'Title'</span>))

})

Или вы можете обновить некоторые поля в записи ивычищатьте, кого вы не трогали, сreplace:

const record_id = //...

table.replace(record_id, {
  "Title": "The modified title",
  "Description": "Another description"
}, (err, record) => {
    if (err) {
      console.error(err)
      return
    }
<span>console</span>. <span>log</span>(<span>record</span>)

})

Удалить запись

Запись можно удалить с помощью

const record_id = //...

table.destroy(record_id, (err, deletedRecord) => {
    if (err) {
      console.error(err)
      return
    }
<span>console</span>.<span>log</span>(<span>'Deleted record'</span>, <span>deletedRecord</span>.<span>id</span>)

})


Дополнительные руководства по услугам:


Таблица API 7k Zp495 буровой установки земли роторная

Цена FOB для Справки:

10 000,00- 15 000,00 $  / шт.

MOQ: 1 шт.
Условия Платежа: LC, T/T, D/P
Порт: Shanghai, China
Производительность: 50

Описание Продукции

Основная Информация

  • Номер Моделя: ZP495
  • сертификация : ISO 9001: 2000 , ISO 9001: 2008
  • Состояние : новый
  • двигатель : Двигатель переменного тока

Дополнительная Информация.

  • HS Code: 8431431000
  • Production Capacity: 50

Описание Продукции


Таблица серии ZP роторная

Соответствуя тип снаряжения

ZJ40/2250DB

ZJ50/3150DB

ZJ70/4500DB

ZJ90/6750DB

Роторное tableType

ZP275

ZP375

ZP375

ZP495

До диаметр отверстия mm (внутри)

698. 5 (27 1/2)

952.5 (37 1/2)

952.5 (37 1/2)

1257.3 (49 1/2)

Разбивочное расстояние mm (внутри)

1353(53 1/4)

1353(53 1/4)

1353(53 1/4)

1651(65)

Максимальное kN статической нагрузки

4500

5850

5850

7250

Максимальная скорость r/min

250

300

300

300

Максимальный вращающий момент n operating·m

28000

33000

33000

37000

Коэффициент шестерни

3.67

3.56

3.56

3.93

Общие размеры (× h) mm L×w

2392×1670×685

2468×1810×718

2468×1810×718

2940×2184×813

Качество kg

6163

8026

8026

11626

Структурно характеристики
Большие и малые шестерни сделаны из стали сплава
Штырь (или 4) для того чтобы управлять мастерской втулкой, API стандартным или втулкой ролика 6 Келли Келли
Роторный вал и привод управляя цепного колеса вала cardan разделили 2 типа
API соответствует к 7K спецификации, отметка API

 

Тип Продуктов

Таблица API 7k Zp375 буровой установки земли роторная

Цена FOB для Справки:

10 000,00- 15 000,00 $  / шт.

MOQ: 1 шт.
Условия Платежа: LC, T/T, D/P
Порт: Shanghai, China
Производительность: 50

Описание Продукции

Основная Информация

  • Номер Моделя: ZP375
  • сертификация : ISO 9001: 2000 , ISO 9001: 2008
  • Состояние : новый

Дополнительная Информация.

  • HS Code: 8431431000
  • Production Capacity: 50

Описание Продукции


Таблица серии ZP роторная

Соответствуя тип снаряжения

ZJ40/2250DB

ZJ50/3150DB

ZJ70/4500DB

ZJ90/6750DB

Роторное tableType

ZP275

ZP375

ZP375

ZP495

До диаметр отверстия mm (внутри)

698. 5 (27 1/2)

952.5 (37 1/2)

952.5 (37 1/2)

1257.3 (49 1/2)

Разбивочное расстояние mm (внутри)

1353(53 1/4)

1353(53 1/4)

1353(53 1/4)

1651(65)

Максимальное kN статической нагрузки

4500

5850

5850

7250

Максимальная скорость r/min

250

300

300

300

Максимальный вращающий момент n operating·m

28000

33000

33000

37000

Коэффициент шестерни

3.67

3.56

3.56

3.93

Общие размеры (× h) mm L×w

2392×1670×685

2468×1810×718

2468×1810×718

2940×2184×813

Качество kg

6163

8026

8026

11626

Структурно характеристики
Большие и малые шестерни сделаны из стали сплава
Штырь (или 4) для того чтобы управлять мастерской втулкой, API стандартным или втулкой ролика 6 Келли Келли
Роторный вал и привод управляя цепного колеса вала cardan разделили 2 типа
API соответствует к 7K спецификации, отметка API

 

Тип Продуктов

Таблица сравнения номера версии Android SDK и уровня API

Соответствующие отношения можно найти на официальном сайте:https://developer. android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels
Уровень API — это целочисленное значение, однозначно определяющее версию API платформы, предоставленную версией платформы Android.

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

  • Набор основных пакетов и классов
  • Набор элементов и атрибутов XML, используемых для объявления файла манифеста
  • Набор XML-элементов и атрибутов для объявления и доступа к ресурсам
  • Набор намерений
  • Набор разрешений, которые может запросить приложение, и разрешения, включенные в систему для обеспечения соблюдения

Приложение может использовать элемент manifest (), предоставляемый API фреймворка, для описания минимального и максимального уровней API, которые оно может запускать, и предпочтительных уровней API, которые оно поддерживает в проекте. Этот элемент имеет следующие три важных атрибута:

  • android: minSdkVersion — укажите минимальный уровень API, на котором может запускаться приложение. Значение по умолчанию — «1».
  • android: targetSdkVersion — укажите целевой уровень API для запущенного приложения. В некоторых случаях это позволяет приложению использовать элементы файла манифеста или поведения, определенные на целевом уровне API, а не ограничиваться теми, которые определены для самого низкого уровня API.
  • android: maxSdkVersion — укажите наивысший уровень API, на котором может запускаться приложение.
    Важное примечание. Перед использованием этого атрибута прочтите документацию.
    Например, чтобы указать минимальный уровень системного API, необходимый для запуска приложения, приложению необходимо добавить элемент с атрибутом android: minSdkVersion в свой манифест. android: minSdkVersion — это целое число, которое соответствует уровню API минимальной версии платформы Android, на которой может запускаться приложение.

  • Когда пользователь пытается установить приложение или повторно проверить приложение после обновления системы, система Android сначала проверяет атрибуты в манифесте приложения, а затем сравнивает значения этих атрибутов со своим собственным внутренним уровнем API. Система разрешает запуск установки только при соблюдении следующих условий:

  • Если атрибут android: minSdkVersion объявлен, его значение должно быть меньше или равно целому числу системного уровня API. Если не объявлено, система предполагает, что приложению требуется уровень API 1.

  • Если атрибут android: maxSdkVersion объявлен, его значение должно быть больше или равно целому числу системного уровня API. Если не объявлено, система предполагает, что приложение не имеет наивысшего уровня API. Подробнее о том, как система обрабатывает этот атрибут, читайте в документации.
<manifest>
  <uses-sdk android:minSdkVersion="5" />
  ...
</manifest>

CRM:Смарт-процессы

Одна из основных функций CRM — отслеживание, хранение и удобное отображение коммуникаций. При этом не всегда коммуникации — это продажи. Это могут быть какие-то внутренние процессы, обработка обращений в техподдержку, закупки и т.д. В этом случае есть потребность хранить и обрабатывать информацию и коммуникации не внутри лидов/сделок, а отдельно. Кроме того, часто в CRM хочется хранить много связанной информации, которая относится к продажам, но не является лидом/сделкой. Чтобы закрыть эту потребность в CRM с версии 20.700.0 появились смарт-процессы.

Что такое смарт-процесс

Каждый смарт-процесс — это новая сущность в рамках CRM, для которой создается новый раздел со своим интерфейсом, набором функционала, полями, элементами и т.д.

По-другому смарт-процесс можно назвать «Кастомная сущность CRM», «Универсальная сущность CRM» или «Динамический тип сущности CRM».

Смарт-процессы встроены в новое API CRM.

Данные

Концептуально смарт-процессы похожи на инфоблоки (универсальные списки). Каждый смарт-процесс — это тип инфоблока.

Ещё больше с точки зрения данных смарт-процессы похожи на rpa.

Механизм хранения значений пользовательских полей такой же, как в rpa и highloadblock.

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

Особенности хранения данных элементов

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

Большая часть кода, отвечающего за хранение элементов и значений пользовательских свойств сосредоточена в папке modules/main/lib/userfield/internal

В этой статье можно прочитать подробно про общие процессы динамического создания таблиц и колонок.

Системные поля

Все таблицы элементов смарт-процессов имеют набор системных полей, см подробнее \Bitrix\Crm\Model\Dynamic\PrototypeItem.

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

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

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

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

Подробнее про системные поля можно посмотреть тут.

Полнотекстовый индекс

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

Класс \Bitrix\Crm\Model\Dynamic\PrototypeItemIndex.

Сами таблицы создаются тут \Bitrix\Crm\Model\Dynamic\TypeTable::onAfterAdd.

Стадии смарт-процессов


ENTITY_ID

Данные о стадиях хранятся в таблице b_crm_status

Поле ENTITY_ID формируется как

'DYNAMIC_' + {entityTypeId} + '_STAGE_' + {categoryId}

Через API значение этого поля можно получить в методе \Bitrix\Crm\Service\Factory::getStagesEntityId()

Например, для смарт-процесса с идентификатором 150 и направлением 3 поле будет

DYNAMIC_150_STAGE_3


STATUS_ID

Префикс для STATUS_ID формируется как

'DT' + {entityTypeId} + '_' + {categoryId} + ':'

Например, для финальной стадии по умолчанию для смарт-процесса с идентификатором 150 в направлении с идентификатором 3 поле будет

DT150_3:SUCCESS

Через API префикс для смарт-процесса можно получить в методе \CCrmStatus::getDynamicEntityStatusPrefix()

Остальной функционал


Дополнительно
Дополнительно

© «Битрикс», 2001-2021, «1С-Битрикс», 2021

Наверх

API

Таблицы данных — Ядро

$ ()

Выполнение действия выбора jQuery для всей таблицы.

Таблицы данных — Ядро

ajax

Пространство имен для методов Ajax

Таблицы данных — Ядро

ajax.json ()

Получить последние данные JSON, полученные из последнего запроса Ajax. DataTables сделал

DataTables — Core

ajax.params ()

Получить данные, отправленные DataTables на сервер в последнем запросе Ajax

Таблицы данных — Ядро

ajax.reload ()

Перезагрузить данные таблицы из источника данных Ajax

Таблицы данных — Ядро

ajax.url ()

Получить / установить URL-адрес, который DataTables использует для выборки данных Ajax

DataTables — Core

ajax. url (). load ()

Загрузить данные из вновь установленного URL источника данных

Таблицы данных — Ядро

прозрачный ()

Очистить таблицу от всех данных.

Таблицы данных — Ядро

данные ()

Получить данные для всей таблицы.

Таблицы данных — Ядро

уничтожить ()

Уничтожить таблицы данных в текущем контексте.

Таблицы данных — Ядро

draw ()

Перерисуйте таблицу.

Таблицы данных — Ядро

i18n ()

Поиск токена интернационализации.

Таблицы данных — Ядро

init ()

Получить параметры инициализации, используемые для таблицы.

Таблицы данных — Ядро

выкл. ()

Удаление событий таблицы.

Таблицы данных — Ядро

на ()

Приемник событий таблицы.

Таблицы данных — Ядро

один ()

Прослушайте событие таблицы один раз, а затем удалите его.

Таблицы данных — Ядро

заказать ()

Получить / установить порядок, примененный к таблице.

Таблицы данных — Ядро

заказ.фиксированная ()

Получить / установить фиксированный порядок, примененный к таблице.

DataTables — Core

order. listener ()

Добавить слушателя упорядочивания к элементу для заданного столбца.

Таблицы данных — Ядро

стр. ()

Получить / установить текущую страницу таблицы.

Таблицы данных — Ядро

стр.info ()

Получить пейджинговую информацию о таблице

Таблицы данных — Ядро

page.len ()

Получить / установить длину страницы таблицы.

Таблицы данных — Ядро

поиск ()

Поиск данных в таблице.

Таблицы данных — Ядро

настройки ()

Получить объект настройки таблицы

Таблицы данных — Ядро

состояние ()

Получить последнее сохраненное состояние таблицы

Таблицы данных — Ядро

состояние. прозрачный ()

Очистить сохраненное состояние таблицы.

DataTables — Core

state.loaded ()

Получить состояние таблицы, загруженной во время инициализации.

Таблицы данных — Ядро

state.save ()

Запуск сохранения состояния.

Таблицы данных — Ячейки

Ячейка ()

Выберите одну ячейку в таблице.

DataTables — Cells

cell (). Cache ()

Получить кэшированные данные DataTables для выбранной ячейки

DataTables — Cells

cell (). Data ()

Получить / установить данные для выбранной ячейки

DataTables — Cells

cell (). Index ()

Получить индексную информацию о выбранной ячейке

DataTables — Cells

cell ().недействительный ()

Сделать недействительными данные, содержащиеся в DataTables для выбранных ячеек

DataTables — Cells

cell (). Node ()

Получить элемент DOM для выбранной ячейки

DataTables — Cells

cell (). Render ()

Получить обработанные данные для ячейки

Таблицы данных — Ячейки

ячеек ()

Выберите несколько ячеек в таблице.

Таблицы данных — Ячейки

ячеек (). Cache ()

Получить кэшированные данные DataTables для выбранных ячеек

Таблицы данных — Ячейки

ячеек (). Data ()

Получить данные для выбранных ячеек

Таблицы данных — Ячейки

ячеек (). Каждые ()

Итерация по каждой выбранной ячейке с заданным контекстом функции соответствующей ячейкой.

Таблицы данных — Ячейки

ячеек (). Индексы ()

Получить индексную информацию о выбранных ячейках

Таблицы данных — Ячейки

ячеек (). Invalidate ()

Сделать недействительными данные, содержащиеся в DataTables для выбранных ячеек

Таблицы данных — Ячейки

ячеек (). Узлы ()

Получить элементы DOM для выбранных ячеек

Таблицы данных — Ячейки

ячеек (). render ()

Получить обработанные данные для набора ячеек

Таблицы данных — столбцы

столбец ()

Выберите один столбец в таблице.

Таблицы данных — столбцы

столбец (). Cache ()

Получить кэшированные данные DataTables для выбранного столбца.

Таблицы данных — столбцы

столбец ().данные ()

Получить данные для ячеек в выбранном столбце.

Таблицы данных — столбцы

столбец (). DataSrc ()

Получить свойство источника данных для выбранного столбца.

Таблицы данных — столбцы

столбец (). Нижний колонтитул ()

Получить узел нижнего колонтитула для выбранного столбца.

Таблицы данных — столбцы

столбец ().заголовок ()

Получить узел заголовка для выбранного столбца.

Таблицы данных — столбцы

столбец (). Index ()

Получить индекс выбранного столбца.

Таблицы данных — столбцы

столбец (). Узлов ()

Получить узлы ячеек для выбранного столбца.

Таблицы данных — столбцы

столбец ().заказ ()

Упорядочить таблицу по выбранному столбцу.

Таблицы данных — столбцы

столбец (). Search ()

Поиск данных в выбранном столбце.

Таблицы данных — столбцы

столбец (). Visible ()

Получить / установить видимость одного выбранного столбца.

Таблицы данных — столбцы

столбец.индекс ()

Преобразование между форматами индекса столбца

Таблицы данных — столбцы

столбцов ()

Выберите несколько столбцов в таблице.

Таблицы данных — столбцы

столбцов (). Cache ()

Получить кэшированные данные DataTables для выбранных столбцов.

Таблицы данных — столбцы

столбцов (). данные ()

Получить данные для ячеек в выбранных столбцах.

Таблицы данных — Столбцы

столбцов (). DataSrc ()

Получить свойство источника данных для выбранных столбцов.

Таблицы данных — столбцы

столбцов (). Каждые ()

Итерация по каждому выбранному столбцу с заданным контекстом функции для рассматриваемого столбца.

Таблицы данных — столбцы

столбцов (). Нижний колонтитул ()

Получить узлы нижнего колонтитула для выбранных столбцов.

Таблицы данных — столбцы

столбцов (). Header ()

Получить узел заголовка для выбранных столбцов.

Таблицы данных — Столбцы

столбцов (). Индексы ()

Получить индексы выбранных столбцов.

Таблицы данных — столбцы

столбцов (). Узлов ()

Получить узлы ячеек для выбранных столбцов.

Таблицы данных — столбцы

столбцов (). Order ()

Упорядочить таблицу по выбранным столбцам.

Таблицы данных — Столбцы

столбцов (). Search ()

Поиск данных в выбранных столбцах.

Таблицы данных — столбцы

столбцов (). Visible ()

Получить / установить видимость выбранных столбцов.

Таблицы данных — столбцы

columns.adjust ()

Пересчитать ширину столбцов

Таблицы данных — строки

строка ()

Выберите одну строку из таблицы.

DataTables — Rows

row (). Cache ()

Получить кэшированные данные DataTables для выбранной строки.

DataTables — Rows

row (). Child

Пространство имен дочернего метода строки

DataTables — Rows

row (). Child ()

Получить / установить дочерние строки выбранной строки основной таблицы

DataTables — Rows

row ().ребенок (). скрыть ()

Скрыть дочерние строки после создания новых дочерних строк

DataTables — Rows

row (). Child (). Remove ()

Удалить дочерние строки для выбранной родительской строки

DataTables — Rows

row (). Child (). Show ()

Сделать видимыми вновь определенные дочерние строки

DataTables — Rows

row ().child.hide ()

Скрыть дочернюю строку (строки) родительской строки

DataTables — Rows

row (). Child.isShown ()

Проверить, видны ли дочерние строки родительской строки

DataTables — Rows

row (). Child.remove ()

Удалить дочерние строки для выбранной родительской строки

DataTables — Rows

row ().child.show ()

Сделать дочернюю строку (и) родительской строки видимой

DataTables — Rows

row (). Data ()

Получить / установить данные для выбранной строки.

DataTables — Rows

row (). Id ()

Получить идентификатор выбранной строки.

DataTables — Rows

row ().индекс ()

Получить индекс выбранной строки.

DataTables — Rows

row (). Invalidate ()

Сделать недействительными данные, содержащиеся в DataTables для выбранной строки

DataTables — Rows

row (). Node ()

Получить узел строки TR для выбранной строки.

DataTables — Rows

row (). удалить ()

Удалить выбранную строку из DataTable.

Таблицы данных — строки

row.add ()

Добавить новую строку в таблицу.

Таблицы данных — строки

строк ()

Выберите несколько строк в таблице.

Таблицы данных — строки

строк (). Cache ()

Получить кэшированные данные DataTables для выбранных строк.

DataTables — Rows

rows (). Data ()

Получить данные для выбранных строк.

Таблицы данных — строки

строк (). Каждые ()

Итерировать по каждой выбранной строке с заданным контекстом функции соответствующей строкой.

Таблицы данных — строки

строк (). Ids ()

Получить идентификаторы выбранных строк.

Таблицы данных — Строки

строк (). Индексы ()

Получить индексы выбранных строк.

Таблицы данных — Строки

строк (). Invalidate ()

Сделать недействительными данные, содержащиеся в DataTables для выбранных строк

Таблицы данных — строки

строк (). Узлов ()

Получить строку TR узлов для выбранных строк.

Таблицы данных — строки

строк (). Remove ()

Удалить выбранные строки из DataTable.

DataTables — Rows

rows.add ()

Добавить несколько новых строк в таблицу.

Таблицы данных — Таблицы

таблица ()

Выбрать таблицу на основе селектора из контекста API

Таблицы данных — Таблицы

таблица ().корпус ()

Получить узел tbody для таблицы в контексте API

Таблицы данных — Таблицы

table (). Container ()

Получить узел контейнера div для таблицы в контексте API

Таблицы данных — Таблицы

таблица (). Нижний колонтитул ()

Получить узел tfoot для таблицы в контексте API

Таблицы данных — Таблицы

таблица (). заголовок ()

Получить узел thead для таблицы в контексте API

Таблицы данных — Таблицы

table (). Node ()

Получить узел таблицы для таблицы в контексте API

Таблицы данных — Таблицы

таблиц ()

Выбрать таблицы на основе селектора из контекста API

Таблицы данных — Таблицы

таблиц ().корпус ()

Получить узлы tbody для таблиц в контексте API

Таблицы данных — Таблицы

таблицы (). Контейнеры ()

Получить узлы контейнера div для таблиц в контексте API

Таблицы данных — Таблицы

таблицы (). Нижний колонтитул ()

Получить узлы tfoot для таблиц в контексте API

Таблицы данных — Таблицы

таблиц ().заголовок ()

Получить узлы thead для таблиц в контексте API

Таблицы данных — Таблицы

таблиц (). Узлов ()

Получить узлы таблицы для таблиц в контексте API

DataTables — Utility

любой ()

Определить, есть ли какие-либо записи в наборе результатов

DataTables — Утилита

concat ()

Объедините несколько экземпляров API, чтобы создать один новый экземпляр.

Таблицы данных — Утилита

count ()

Получить количество элементов, содержащихся в экземпляре API

Таблицы данных — Утилиты

каждый ()

Перебирать содержимое набора результатов API.

DataTables — Utility

eq ()

Сократите экземпляр Api до одного контекста и набора результатов.

Таблицы данных — Утилита

фильтр ()

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

Таблицы данных — Утилита

сглаживание ()

Преобразование экземпляра API со структурой 2D-массива в структуру 1D-массива.

DataTables — Утилита

indexOf ()

Найдите первый экземпляр значения в наборе результатов экземпляра API.

DataTables — Утилита

итератор ()

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

DataTables — Утилита

join ()

Объедините элементы в наборе результатов в строку.

DataTables — Утилита

lastIndexOf ()

Найдите последний экземпляр значения в наборе результатов экземпляра API.

Таблицы данных — Утилита

длина

Количество элементов в наборе результатов экземпляра API.

Таблицы данных — Утилита

карта ()

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

Таблицы данных — Утилита

pluck ()

Создайте новый экземпляр API со значением свойства из объектов в текущем наборе результатов.

Таблицы данных — Утилиты

pop ()

Удалить последний элемент из набора результатов экземпляра API.

DataTables — Утилита

push ()

Добавьте один или несколько элементов в конец набора результатов экземпляра API.

DataTables — Утилита

уменьшить ()

Примените функцию обратного вызова к аккумулятору и каждому элементу в наборе результатов Api (слева направо).

DataTables — Утилита

reduceRight ()

Примените функцию обратного вызова к аккумулятору и каждому элементу в наборе результатов Api (справа налево).

Таблицы данных — Утилита

реверс ()

Обратный набор результатов экземпляра API.

Таблицы данных — Утилиты

смена ()

Удалить первый элемент из набора результатов экземпляра API.

Таблицы данных — Утилита

срез ()

Создайте независимую копию экземпляра API.

DataTables — Утилита

sort ()

Сортировка элементов набора результатов экземпляра API.

DataTables — Utility

splice ()

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

DataTables — Утилиты

до $ ()

Преобразуйте экземпляр API в объект jQuery с объектами из набора результатов экземпляра в наборе результатов jQuery.

DataTables — Утилита

toArray ()

Создайте собственный объект массива Javascript из экземпляра API.

DataTables — Утилита

toJQuery ()

Преобразуйте экземпляр API в объект jQuery с объектами из набора результатов экземпляра в наборе результатов jQuery.

Таблицы данных — Утилита

уникальный ()

Создайте новый экземпляр API, содержащий только уникальные элементы из элементов в наборе результатов экземпляра.

DataTables — Utility

unshift ()

Добавьте один или несколько элементов в начало набора результатов экземпляра API.

Таблицы данных — статические

Таблицы данных.isDataTable ()

Проверить, является ли узел таблицы DataTable или нет

DataTables — Static

DataTable.tables ()

Получить все таблицы данных на странице

Таблицы данных — статические

DataTable.util.escapeRegex ()

Экранировать специальные символы в строке регулярного выражения

Таблицы данных — статические

Таблицы данных.util.get ()

Создать функцию чтения из дескриптора

Таблицы данных — статические

DataTable.util.set ()

Создать функцию записи из дескриптора

Таблицы данных — статические

DataTable.util.throttle ()

Регулировка вызовов метода для уменьшения частоты вызовов

Таблицы данных — статические

Таблицы данных.versionCheck ()

Функция проверки совместимости номера версии

AutoFill

autoFill (). Disable ()

Отключить взаимодействие автозаполнения

AutoFill

autoFill (). Enable ()

Включение или отключение взаимодействия автозаполнения

Автозаполнение

Автозаполнение ().включен ()

Определить, включено ли автозаполнение

Кнопки

$ .fn.dataTable.fileSave ()

Сохранить файл, созданный на стороне клиента

Кнопки

кнопка ()

Выберите одну кнопку

Кнопки

кнопка (). Действие ()

Получить / установить функцию действия для выбранной кнопки

Кнопки

кнопка ().активный ()

Получить / установить активное состояние выбранной кнопки

Кнопки

кнопка (). Добавить ()

Создайте новую кнопку и добавьте ее в документ

Кнопки

кнопка (). CollectionRebuild ()

Восстановить коллекцию кнопок

Кнопки

кнопка ().отключить ()

Отключить выбранную кнопку

Кнопки

кнопка (). Enable ()

Включение / отключение выбранной кнопки

Кнопки

кнопка (). Узел ()

Получить узел кнопки для выбранной кнопки

Кнопки

кнопка (). Popover ()

Показать всплывающее окно для кнопки, позволяющее вводить дополнительный пользовательский ввод

Кнопки

кнопка ().обработка ()

Получить / установить состояние обработки для кнопки

Кнопки

кнопка (). Remove ()

Удалить и удалить выбранную кнопку

Кнопки

кнопка (). Текст ()

Получить / установить текст для выбранной кнопки

Кнопки

кнопка (). Триггер ()

Запуск действия выбранной кнопки

Кнопки

кнопок ()

Выберите одну или несколько кнопок

Кнопки

кнопок ().действие ()

Получить / установить функции действий для выбранных кнопок

Кнопки

кнопок (). Active ()

Установить активное состояние для выбранных кнопок

Кнопки

кнопок (). CollectionRebuild ()

Восстановить коллекцию кнопок

Кнопки

кнопок ().контейнер ()

Получить элемент контейнера для одного экземпляра Buttons

Кнопки

кнопок (). Контейнеры ()

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

Кнопки

кнопок (). Destroy ()

Уничтожить один или несколько экземпляров кнопки и удалить из документа

Кнопки

кнопок ().отключить ()

Отключить выбранные кнопки

Кнопки

кнопок (). Enable ()

Включение / отключение выбранных кнопок

Кнопки

кнопок (). Узлов ()

Получить узлы кнопок для выбранных кнопок

Кнопки

кнопок (). Обработка ()

Установить состояние обработки для нескольких кнопок

Кнопки

кнопок ().удалить ()

Удалить и удалить выбранные кнопки

Кнопки

кнопок (). Текст ()

Получить / установить текст для выбранных кнопок

Кнопки

кнопок (). Триггер ()

Запуск действия выбранных кнопок

Кнопки

кнопок.exportData ()

Получить данные из DataTable, которые подходят для экспорта

Кнопки

кнопок.exportInfo ()

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

Кнопки

buttons.info ()

Отображение и скрытие информации для конечного пользователя в модальном окне

ColReorder

colReorder.disable ()

Отключить взаимодействие ColReorder

ColReorder

colReorder.включить ()

Включение или отключение взаимодействия ColReorder

ColReorder

colReorder.move ()

Программное перемещение столбцов

ColReorder

colReorder.order ()

Получить / установить порядок столбцов

ColReorder

colReorder.reset ()

Восстановить порядок загруженных столбцов

ColReorder

colReorder.транспонировать ()

Преобразование одного или нескольких индексов столбцов в текущий и исходный индексы и обратно

FixedColumns

fixedColumns ()

Пространство имен для методов FixedColumns

FixedColumns

fixedColumns (). Left ()

Получить / установить количество левых фиксированных столбцов

FixedColumns

fixedColumns ().правая ()

Получить / установить количество правых фиксированных столбцов

FixedHeader

fixedHeader.adjust ()

Пересчитать положение таблицы и перерисовать фиксированные элементы

FixedHeader

fixedHeader.disable ()

Отключить неподвижные элементы

FixedHeader

fixedHeader.включить ()

Включение / отключение фиксированных элементов

FixedHeader

fixedHeader.enabled ()

Получить текущий включенный статус

FixedHeader

fixedHeader.footerOffset ()

Получить / установить смещение фиксированного нижнего колонтитула

FixedHeader

fixedHeader.headerOffset ()

Получить / установить фиксированное смещение заголовка

KeyTable

ячейка ().фокус ()

Фокус на ячейке

KeyTable

cell.blur ()

Размытие в фокусе из таблицы

KeyTable

keys.disable ()

Отключить взаимодействие KeyTable (мышь и клавиатура)

KeyTable

keys.enable ()

Включение или отключение взаимодействия KeyTable (мышь и клавиатура)

KeyTable

ключей.включен ()

Определить состояние включения KeyTable для таблицы

KeyTable

keys.move ()

Переместить фокус на соседнюю ячейку

Адаптивный

столбец (). ResponseiveHidden ()

Получить состояние видимости столбца в таблице

Адаптивный

столбцов ().responseiveHidden ()

Получить состояние видимости столбцов в таблице

Адаптивный

Адаптивный.hasHidden ()

Определить, не скрыл ли Responsive какие-либо столбцы в таблице

Адаптивный

responseive.index ()

Получить индекс ячейки из элемента сведений li

Адаптивный

Адаптивный.перестроить ()

Пересчитать контрольные точки столбца на основе информации о классе ячеек заголовка столбца

Адаптивный

Адаптивный.recalc ()

Пересчитать ширину, используемую отзывчивым, после изменения дисплея

RowGroup

rowGroup (). DataSrc ()

Получить / установить источник данных для группы строк

RowGroup

rowGroup ().отключить ()

Отключить взаимодействие RowGroup с таблицей

RowGroup

rowGroup (). Enable ()

Включение или отключение взаимодействия RowGroup с таблицей

RowGroup

rowGroup (). Enabled ()

Определить, включена ли RowGroup для таблицы

RowReorder

rowReorder.отключить ()

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

RowReorder

rowReorder.enable ()

Включение / отключение возможности пользователя изменять порядок строк.

Скроллер

row (). ScrollTo ()

Прокрутка до определенной строки

Скроллер

scroller.measure ()

Пересчитать кэшированные измерения, которые использует Scroller

Скроллер

Скроллер.страница ()

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

Скроллер

scroller.toPosition ()

Прокрутка до определенного индекса отображения строки

SearchBuilder

searchBuilder.container ()

Возвращает узел контейнера SearchBuilder.

SearchBuilder

searchBuilder.getDetails ()

Получить подробную информацию о текущих настройках поиска

SearchBuilder

searchBuilder.rebuild ()

Восстановить поиск до заданного состояния

SearchPanes

searchPanes.clearSelections ()

Удаляет выбор на всех панелях

SearchPanes

searchPanes.контейнер ()

Возвращает узел контейнера панелей.

SearchPanes

searchPanes.rebuildPane ()

Восстановите панель, собрав параметры из таблицы.

SearchPanes

searchPanes.resizePanes ()

Измените размер всех панелей, чтобы соответствующим образом заполнить контейнер SearchPanes.

Выберите ячейку

().отменить выбор ()

Отменить выделение отдельной ячейки

Выберите

ячейку (). Select ()

Выбрать одну ячейку

Выберите

ячеек (). Deselect ()

Отменить выбор ячеек

Выберите

ячеек (). Select ()

Выбрать ячейки

Выберите столбец

().отменить выбор ()

Отменить выбор одного столбца

Выберите

столбец (). Select ()

Выберите одну колонку

Выберите

столбцов (). Deselect ()

Отменить выбор столбцов

Выберите

столбцов (). Select ()

Выбрать столбцы

Выберите

строку ().отменить выбор ()

Отменить выделение одной строки

Выберите

ряд (). Select ()

Выберите одну строку

Выбрать

строк (). Отменить выбор ()

Отменить выбор строк

Выберите

строк (). Select ()

Выбрать строки

Выбрать

Выбрать ()

Инициализация Выбрать вне конструктора

Выбрать

Выбрать.blurable ()

Получить / установить голубое состояние опций выбора элементов таблицы

Выбрать

select.info ()

Получить / установить состояние отображения сводной информации

Выбрать

select.items ()

Получить / установить элементы, которые Select будет выбирать на основе взаимодействия с пользователем (строки, столбцы или ячейки)

Выбрать

Выбрать.селектор ()

Получить / установить селектор элементов для захвата событий мыши

Выбрать

select.style ()

Получить / установить стиль, с помощью которого конечный пользователь может выбирать элементы в таблице

Выбрать

select.toggleable ()

Получить / установить поведение, если с элементов можно отменить выбор при щелчке по выбранному элементу на

Введение в API таблиц Azure Cosmos DB

  • 2 минуты на чтение

В этой статье

ПРИМЕНЯЕТСЯ К: Таблица API

Azure Cosmos DB предоставляет API таблиц для приложений, написанных для хранилища таблиц Azure и нуждающихся в расширенных возможностях, таких как:

Пакеты SDK

для таблиц Azure доступны для.NET, Java, Python, Node.js и Go. Эти пакеты SDK можно использовать для таргетинга либо на хранилище таблиц, либо на таблицы Cosmos DB. Приложения, написанные для хранилища таблиц Azure с использованием пакетов SDK для таблиц Azure, можно перенести в API таблиц Azure Cosmos DB без изменения кода, чтобы воспользоваться преимуществами расширенных возможностей.

Важно

Пакет SDK для .NET Azure Tables Azure.Data.Tables предлагает новейшие функции, поддерживаемые API таблиц. Клиентская библиотека таблиц Azure может легко нацеливаться на конечные точки хранилища таблиц Azure или службы таблиц Azure Cosmos DB без изменения кода.

Предложения стола

Если вы в настоящее время используете хранилище таблиц Azure, вы получите следующие преимущества, перейдя на API таблиц Azure Cosmos DB:

Элемент Хранилище таблиц Azure API таблиц Azure Cosmos DB
Задержка Быстро, но без ограничений по задержке. Однозначная задержка в миллисекундах для чтения и записи с задержкой <10 мс для чтения и записи на 99-м процентиле, в любом масштабе, в любой точке мира.
Пропускная способность Модель с переменной производительностью. Таблицы имеют предел масштабируемости 20 000 операций в секунду. Высокая масштабируемость с выделенной зарезервированной пропускной способностью для каждой таблицы, поддерживаемой соглашениями об уровне обслуживания. Учетные записи не имеют верхнего предела пропускной способности и поддерживают> 10 миллионов операций в секунду на таблицу.
Глобальная дистрибуция Одна область с одной дополнительной читаемой вторичной областью чтения для обеспечения высокой доступности. Глобальная дистрибуция «под ключ» из одного в любое количество регионов.Поддержка автоматического и ручного переключения при отказе в любое время и в любой точке мира. Несколько областей записи, чтобы любой регион мог принимать операции записи.
Индексирование Только первичный индекс для PartitionKey и RowKey. Вторичных индексов нет. Автоматическое и полное индексирование всех свойств по умолчанию, без управления индексами.
Запрос При выполнении запроса используется индекс для первичного ключа, в противном случае выполняется сканирование. Queries может использовать автоматическое индексирование свойств для сокращения времени выполнения запросов.
Согласованность Сильный в основном регионе. Возможен в пределах вторичного региона. Пять четко определенных уровней согласованности для компромисса между доступностью, задержкой, пропускной способностью и согласованностью в зависимости от потребностей вашего приложения.
Стоимость На основе потребления. Доступно как в режиме потребляемой мощности, так и в режиме выделенной емкости.
SLA Доступность от 99,9% до 99,99%, в зависимости от стратегии репликации. Доступность для чтения 99,999%, доступность записи 99,99% для учетной записи с одним регионом и доступность записи 99,999% для учетных записей с несколькими регионами. Комплексные соглашения об уровне обслуживания, охватывающие доступность, задержку, пропускную способность и согласованность.

Начать

Создайте учетную запись Azure Cosmos DB на портале Azure. Затем начните работу с нашим Quick Start for Table API с помощью .NET.

Следующие шаги

Вот несколько советов для начала:

стол | BigQuery | Google Cloud

вид

строка

Тип идентификатора ресурса.

etag

строка

Только выход. Хеш этого ресурса.

id

строка

Только выход. Непрозрачный идентификатор, однозначно идентифицирующий таблицу.

SelfLink

строка

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

таблица Ссылка

объект ( TableReference )

Обязательно. Ссылка, описывающая идентификатор этой таблицы.

friendlyName

строка

Необязательно.Описательное имя для этой таблицы.

описание

строка

Необязательно. Удобное описание этой таблицы.

этикеток

карта (ключ: строка, значение: строка)

Ярлыки, связанные с этой таблицей.Вы можете использовать их для организации и группировки таблиц. Ключи и значения меток не могут быть длиннее 63 символов, могут содержать только строчные буквы, цифры, символы подчеркивания и дефисы. Допускаются международные символы. Значения метки необязательны. Ключи меток должны начинаться с буквы, и каждая метка в списке должна иметь разные ключи.

Объект, содержащий список пар «ключ»: значение . Пример: {"name": "гаечный ключ", "масса": "1,3 кг", "count": "3"} .

схема

объект ( TableSchema )

Необязательно. Описывает схему этой таблицы.

timePartitioning

объект ( TimePartitioning )

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

диапазон Разбивка на разделы

объект ( RangePartitioning )

Если указано, настраивает разделение диапазонов для этой таблицы.

кластеризация

объект ( Кластеризация )

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

requirePartitionFilter

логический

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

числоБайт

строка (формат Int64Value)

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

numLongTermBytes

строка (формат Int64Value)

Только выход. Количество байтов в таблице, которые считаются «долгосрочным хранилищем».

число строк

строка (формат UInt64Value)

Только выход.Количество строк данных в этой таблице, исключая любые данные в буфере потоковой передачи.

Время создания

строка (формат int64)

Только выход. Время создания этой таблицы в миллисекундах с начала эпохи.

expirationTime

строка (формат Int64Value)

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

lastModifiedTime

строка (формат uint64)

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

тип

строка

Только выход. Описывает тип таблицы. Поддерживаются следующие значения: ТАБЛИЦА: обычная таблица BigQuery. ПРОСМОТР: виртуальная таблица, определенная SQL-запросом. ВНЕШНИЙ: таблица, которая ссылается на данные, хранящиеся во внешней системе хранения, такой как Google Cloud Storage.MATERIALIZED_VIEW: предварительно вычисленное представление, определенное запросом SQL. Значение по умолчанию — ТАБЛИЦА.

вид

объект ( ViewDefinition )

Необязательно. Определение представления.

материализованный Просмотр

объект ( MaterializedViewDefinition )

Необязательно.Определение материализованного представления.

externalDataConfiguration

объект ( ExternalDataConfiguration )

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

местонахождение

строка

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

потоковый буфер

объект ( Streamingbuffer )

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

шифрование Конфигурация

объект ( EncryptionConfiguration )

Пользовательская конфигурация шифрования (например, ключи Cloud KMS).

снимок Определение

объект ( SnapshotDefinition )

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

console.table () — Веб-API | MDN

Метод console.table () отображает табличные данные в виде таблицы.

Эта функция принимает один обязательный аргумент data , который должен быть массивом или объект и один дополнительный необязательный параметр columns .

Он регистрирует данных в виде таблицы. Каждый элемент в массиве (или перечислимом свойстве если данные — объект) будет строкой в ​​таблице.

Первый столбец в таблице будет иметь номер (индекс) . Если data — это массив, тогда его значения будут индексами массива.Если data — это объект, тогда его значения будут именами свойств. Обратите внимание, что (в Firefox) console.table ограничено отображением 1000 строк (первая строка помеченный индекс).

Коллекции примитивных типов

Аргумент data может быть массивом или объектом.

 

console.table ([«яблоки», «апельсины», «бананы»]);
  

 

function Person (firstName, lastName) {
  this.firstName = firstName;
  это.lastName = lastName;
}

var me = new Person («Джон», «Смит»);

console.table (я);
  

Коллекции составных типов

Если элементы в массиве или свойства в объекте сами являются массивами или объекты, то их элементы или свойства перечисляются в строке, по одному на столбец:

 

var people = [["Джон", "Смит"], ["Джейн", "Доу"], ["Эмили", "Джонс"]]
console.table (люди);
  

 

function Person (firstName, lastName) {
  это.firstName = firstName;
  this.lastName = lastName;
}

var john = new Person («Джон», «Смит»);
var jane = new Person («Джейн», «Лань»);
var emily = new Person («Эмили», «Джонс»);

console.table ([Джон, Джейн, Эмили]);
  

Обратите внимание, что если массив содержит объекты, то столбцы помечаются свойством имя.

 

var family = {};

family.mother = new Person («Джейн», «Смит»);
family.father = new Person («Джон», «Смит»);
family.daughter = новый человек («Эмили», «Смит»);

консоль.стол (семейный);
  

Ограничение отображаемых столбцов

По умолчанию console.table () перечисляет все элементы в каждой строке. Вы можете использовать необязательный параметр columns для выбора подмножества столбцов для отображения:

 

function Person (firstName, lastName) {
  this.firstName = firstName;
  this.lastName = lastName;
}

var john = new Person («Джон», «Смит»);
var jane = new Person («Джейн», «Лань»);
var emily = new Person («Эмили», «Джонс»);

консоль.таблица ([Джон, Джейн, Эмили], ["firstName"]);
  

Сортировка столбцов

Вы можете отсортировать таблицу по определенному столбцу, щелкнув метку этого столбца.

  консоль.таблица (данные);
console.table (данные, столбцы);
  

Параметры

данные

Данные для отображения. Это должен быть либо массив, либо объект.

столбцов

Массив, содержащий имена столбцов для включения в вывод.

Таблицы BCD загружаются только в браузере

Операции с таблицами | API слайдов | Разработчики Google

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

В этих примерах используются следующие переменные:

  • идентификатор презентации — указывает, где вы предоставляете идентификатор презентации. Вы можете узнать значение этого идентификатора из URL-адреса презентации.
  • pageId — указывает, где вы предоставляете идентификатор объекта страницы. Вы можете получить значение для этого из URL-адреса или с помощью чтения API запрос.
  • tableId — указывает, где вы предоставляете идентификатор объекта элемента страницы для стола, с которым вы работаете. Вы можете указать этот идентификатор для элементов, которые вы создать (с некоторыми ограничениями) или позволить API создать его автоматически; могут быть получены идентификаторы элементов через запрос на чтение API.

Создать таблицу

Следующие презентации.пакетное обновление request добавляет новую таблицу к слайду, указанному pageId . Этот таблица имеет 8 строк и 5 столбцов. Обратите внимание, что API игнорирует любые размером или преобразовать полей, предоставленных как часть elementProperties — вместо этого API создает таблицу, которая примерно центрируется на слайде и имеет размер по возможности разместить указанное количество строк и столбцов.

Протокол запроса показан ниже. В Руководство по добавлению текста и фигур показывает пример, который реализует пакетное обновление на разных языках с использованием клиентские библиотеки Google API.

 POST https://slides.googleapis.com/v1/presentations/  presentationId : batchUpdate 
 {
  "Запросы": [
    {
      "createTable": {
        "objectId":  tableId ,
        "elementProperties": {
          "pageObjectId":  pageId ,
        },
        «рядов»: 8,
        «столбцы»: 5
      }
    }
  ]
} 

Удалить строки или столбцы таблицы

Следующие Presentations.batchUpdate запрос удаляет 6-ю строку и 4-й столбец из таблицы, указанной tableId .

Протокол запроса показан ниже. В Руководство по добавлению текста и фигур показывает пример, который реализует пакетное обновление на разных языках с использованием клиентские библиотеки Google API.

 POST https://slides.googleapis.com/v1/presentations/  presentationId : batchUpdate 
 {
  "Запросы": [
    {
      "deleteTableRow": {
        "tableObjectId":  tableId ,
        "cellLocation": {
          "rowIndex": 5
        }
      }
    },
    {
      "deleteTableColumn": {
        "tableObjectId":  tableId ,
        "cellLocation": {
          "columnIndex": 3
        }
      }
    }
  ]
} 

Редактировать данные таблицы

Следующие презентации.пакетное обновление запрос удаляет весь текст в ячейке, а затем заменяет его новым текстом. Таблица идентифицируется tableId , и затронутая ячейка находится в 5-й ряд и 3-й столбик.

Протокол запроса показан ниже. В Руководство по добавлению текста и фигур показывает пример, который реализует пакетное обновление на разных языках с использованием клиентские библиотеки Google API.

 POST https://slides.googleapis.com/v1/presentations/  presentationId : batchUpdate 
 {
  "Запросы": [
    {
      "deleteText": {
        "objectId":  tableId ,
        "cellLocation": {
          "rowIndex": 4,
          "columnIndex": 2
        },
        "textRange": {
          "тип": "ВСЕ",
        }
      }
    },
    {
      "insertText": {
        "objectId":  tableId ,
        "cellLocation": {
          "rowIndex": 4,
          "columnIndex": 2
        },
        "text": "Кенгуру",
        "InsertIndex": 0
      }
    }
  ]
} 

Следующие презентации.пакетное обновление запрос форматирует строку заголовка элемента таблицы, обозначенного tableId . Первый запрос в пакете устанавливает цвет фона строка заголовка станет черной. Каждый последующий запрос устанавливает формат текста в одном ячейку строки заголовка полужирным белым шрифтом Cambria размером 18 пт.

Протокол запроса показан ниже. В Руководство по добавлению текста и фигур показывает пример который реализует пакетное обновление на разных языках с помощью Google API клиентские библиотеки.

 ЗАПИСАТЬ https: // слайды.googleapis.com/v1/presentations/  presentationId : batchUpdate 
 {
  "Запросы": [
    {
      "updateTableCellProperties": {
        "objectId":  tableId ,
        "tableRange": {
          "место нахождения": {
            "rowIndex": 0,
            "columnIndex": 0
          },
          "rowSpan": 1,
          "columnSpan": 3
        },
        "tableCellProperties": {
          "tableCellBackgroundFill": {
            "solidFill": {
              "цвет": {
                "rgbColor": {
                  «красный»: 0.0,
                  «зеленый»: 0,0,
                  «синий»: 0,0
                }
              }
            }
          }
        },
        "fields": "tableCellBackgroundFill.solidFill.color"
      }
    },
    {
      "updateTextStyle": {
        "objectId":  tableId ,
        "cellLocation": {
          "rowIndex": 0,
          "columnIndex": 0
        },
        "стиль": {
          "foregroundColor": {
            "opaqueColor": {
              "rgbColor": {
                «красный»: 1.0,
                «зеленый»: 1.0,
                «синий»: 1.0
              }
            }
          },
          "жирный": правда,
          "fontFamily": "Камбрия",
          "размер шрифта": {
            «величина»: 18,
            "unit": "PT"
          }
        },
        "textRange": {
          "тип": "ВСЕ"
        },
        "fields": "foregroundColor, bold, fontFamily, fontSize"
      }
    },
    // Повторяем вышеуказанный запрос для каждой дополнительной ячейки в строке заголовка ....
  ]
} 

Этот запрос форматирует строку заголовка, чтобы она выглядела следующим образом:

Вставить строки или столбцы таблицы

Следующие презентации.пакетное обновление запрос добавляет три строки ниже 6-й строки в таблице, указанной tableId . Затем второй запрос добавляет два столбца слева от 4-й столбец в той же таблице.

Протокол запроса показан ниже. В Руководство по добавлению текста и фигур показывает пример, который реализует пакетное обновление на разных языках с использованием клиентские библиотеки Google API.

 POST https://slides.googleapis.com/v1/presentations/  presentationId : batchUpdate 
 {
  "Запросы": [
    {
      "insertTableRows": {
        "tableObjectId":  tableId ,
        "cellLocation": {
          "rowIndex": 5
        },
        "insertBelow": правда,
        «число»: 3
      }
    },
    {
      "insertTableColumns": {
        "tableObjectId":  tableId ,
        "cellLocation": {
          "columnIndex": 3
        },
        "insertRight": ложь,
        "номер 2
      }
    }
  ]
} 

SQL API — Создание таблиц

Создание таблиц с помощью SQL API

Запись данных в вашу учетную запись CARTO позволяет вам управлять данными с помощью SQL-запросов, она не подключает автоматически таблицы как наборы данных к вашим наборам данных приборной панели в CARTO.

Вы должны применить функцию CDB_CartodbfyTable к целевой таблице, чтобы создавать и отображать связанные наборы данных в вашей учетной записи. Этот дополнительный шаг «CARTOfying» данных — это процесс преобразования произвольной таблицы PostgreSQL в действительную таблицу CARTO и ее регистрацию в системе, чтобы ее можно было использовать в графическом интерфейсе пользователя и в CARTO Engine для создания карт и анализ.

Создание таблиц

Чтобы создать видимую таблицу в CARTO, выполните следующий запрос SQL с помощью SQL API:

  
 1
2
3
4
5
6
7
 
 СОЗДАТЬ ТАБЛИЦУ {table_name}
 (
 {column1} {тип данных},
 {column2} {тип данных},
 {column3} {тип данных},
 ...
 );
 

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

  
 1
 
 ВЫБРАТЬ cdb_cartodbfytable ({table_name});
 

Совет: Если вы принадлежите к организации, вы также должны указать имя пользователя как часть запроса.

  
 1
 
 ВЫБРАТЬ cdb_cartodbfytable ({username}, {table_name});
 

Вы получите ошибку Пожалуйста, установите квоту пользователя перед cartodbfying tables , если вы не укажете имя пользователя как часть запроса.

Таблица создается и добавляется в виде связанного набора данных в Ваши наборы данных приборной панели. Обновите браузер, чтобы убедиться, что вы можете визуализировать это в своей учетной записи.Как только таблица будет подключена к Your datasets dashboard в CARTO, любые изменения, которые вы применяете к своим данным через SQL API, автоматически обновляются.

Переименовать таблицы

Чтобы переименовать подключенный набор данных в Your datasets dashboard, выполните следующий SQL-запрос с помощью SQL API:

  
 1
 
 ALTER TABLE {table_name} ПЕРЕИМЕНОВАТЬ на {renamed table_name};
 

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

Удалить стол

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

Некоторые пользователи и сторонние библиотеки обновляют данные из набора картографических данных, создавая DROP TABLE + CREATE TABLE + INSERT в таблице.Это повлияет на вашу карту, если вы не сделаете DROP TABLE + CREATE TABLE внутри транзакции . Но мы рекомендуем использовать TRUNCATE TABLE + INSERT .

Чтобы удалить подключенный набор данных из Ваши наборы данных приборной панели, выполните следующий SQL-запрос с помощью SQL API:

  
 1
 
 DROP TABLE {table_name};
 

Это удаляет связанную таблицу из Your datasets dashboard.Обновите браузер, чтобы убедиться, что подключенный набор данных был удален.

Таблица API прослушивателя (Руководства по Java ™> Создание графического интерфейса пользователя с помощью Swing> Написание прослушивателей событий)

Учебники Java были написаны для JDK 8. Примеры и методы, описанные на этой странице, не используют преимущества улучшений, представленных в более поздних выпусках, и могут использовать технологии, которые больше не доступны.
Обзор обновленных языковых функций в Java SE 9 и последующих выпусках см. В разделе «Изменения языка Java».
См. Примечания к выпуску JDK для получения информации о новых функциях, улучшениях и удаленных или устаревших параметрах для всех выпусков JDK.

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

Чтобы узнать, какие компоненты Swing могут запускать какие типы событий, см. Слушатели, поддерживаемые компонентами Swing.

Интерфейс слушателя Адаптер класса Методы слушателя
ActionListener нет Выполнено действие (ActionEvent)
AncestorListener нет ancestorAdded (AncestorEvent)
ancestorMoved (AncestorEvent)
ancestorRemoved (AncestorEvent)
CaretListener нет caretUpdate (CaretEvent)
CellEditorListener нет редактирование остановлено (ChangeEvent)
редактированиеCanceled (ChangeEvent)
ChangeListener нет stateChanged (ChangeEvent)
ComponentListener Компонентный адаптер componentHidden (ComponentEvent)
componentMoved (ComponentEvent)
componentResized (ComponentEvent)
componentShown (ComponentEvent)
ContainerListener Контейнер Адаптер componentAdded (ContainerEvent)
componentRemoved (ContainerEvent)
Слушатель документов нет changedUpdate (DocumentEvent)
insertUpdate (DocumentEvent)
removeUpdate (DocumentEvent)
ExceptionListener нет exceptionThrown (Исключение)
FocusListener Фокус адаптер focusGained (FocusEvent)
focusLost (FocusEvent)
HierarchyBoundsListener HierarchyBoundsAdapter ancestorMoved (HierarchyEvent)
ancestorResized (HierarchyEvent)
HierarchyListener нет hierarchyChanged (HierarchyEvent)
HyperlinkListener нет hyperlinkUpdate (HyperlinkEvent)
InputMethodListener нет caretPositionChanged (InputMethodEvent)
inputMethodTextChanged (InputMethodEvent)
InternalFrameListener Внутренний адаптер рамки internalFrameActivated (InternalFrameEvent)
internalFrameClosed (InternalFrameEvent)
internalFrameClosing (InternalFrameEvent)
internalFrameDeactivated (InternalFrameEvent)
internalFrameDeiconified (InternalFrameEvent)
internalFrameIconified (InternalFrameEvent)
internalFrameOpened (InternalFrameEvent)
ItemListener нет itemStateChanged (ItemEvent)
KeyListener KeyAdapter keyPressed (KeyEvent)
keyReleased (KeyEvent)
keyTyped (KeyEvent)
ListDataListener нет contentsChanged (ListDataEvent)
intervalAdded (ListDataEvent)
intervalRemoved (ListDataEvent)
ListSelectionListener нет valueChanged (ListSelectionEvent)
MenuDragMouseListener нет menuDragMouseDragged (MenuDragMouseEvent)
menuDragMouseEntered (MenuDragMouseEvent)
menuDragMouseExited (MenuDragMouseEvent)
menuDragMouseReleased
MenuKeyListener нет menuKeyPressed (MenuKeyEvent)
menuKeyReleased (MenuKeyEvent)
menuKeyTyped (MenuKeyEvent)
MenuListener нет menuCanceled (MenuEvent)
menuDeselected (MenuEvent)
menuSelected (MenuEvent)
MouseInputListener (расширяет MouseListener и MouseMotionListener MouseInputAdapter
MouseAdapter
mouseClicked (MouseEvent)
mouseEntered (MouseEvent)
mouseExited (MouseEvent)
mousePressed (MouseEvent)
mouseReleased (MouseEvent)
mouseData MouseAdapter (MouseEvent)
MouseListener MouseAdapter , MouseInputAdapter mouseClicked (MouseEvent)
mouseEntered (MouseEvent)
mouseExited (MouseEvent)
mousePressed (MouseEvent)
mouseReleased (MouseEvent)
MouseMotionListener MouseMotionAdapter , MouseInputAdapter mouseDragged (MouseEvent)
mouseMoved (MouseEvent)
MouseWheelListener MouseAdapter mouseWheelMoved (MouseWheelEvent)
MouseAdapter
PopupMenuListener нет popupMenuCanceled (PopupMenuEvent)
popupMenuWillBecomeInvisible (PopupMenuEvent)
popupMenuWillBecomeVisible (PopupMenuEvent)
PropertyChangeListener нет propertyChange (PropertyChangeEvent)
TableColumnModelListener нет columnAdded (TableColumnModelEvent)
columnMoved (TableColumnModelEvent)
columnRemoved (TableColumnModelEvent)
columnMarginChanged (ChangeEvent)

89


89


TableModelListener нет tableChanged (TableModelEvent)
TreeExpansionListener нет treeCollapsed (TreeExpansionEvent)
treeExpanded (TreeExpansionEvent)
TreeModelListener нет treeNodesChanged (TreeModelEvent)
treeNodesInserted (TreeModelEvent)
treeNodesRemoved (TreeModelEvent)
treeStructureChanged (TreeModelEvent)
TreeSelectionListener нет valueChanged (TreeSelectionEvent)
TreeWillExpandListener нет treeWillCollapse (TreeExpansionEvent)
treeWillExpand (TreeExpansionEvent)
UndoableEditListener нет undoableEditHappened (UndoableEditEvent)
VetoableChangeListener нет vetoableChange (PropertyChangeEvent)
WindowFocusListener Оконный адаптер windowGainedFocus (WindowEvent)
windowLostFocus (WindowEvent)
WindowListener Оконный адаптер windowActivated (WindowEvent)
windowClosed (WindowEvent)
windowClosing (WindowEvent)
windowDeactivated (WindowEvent)
windowDeconified (WindowEvent000)

8940 WindowEvent


WindowEvent
WindowStateListener Оконный адаптер windowStateChanged (WindowEvent)
.

Автор: alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *