Недавно Amazon выпустила свою платформу «без кода», Медовый код Анкет Цель состоит в том, чтобы помочь не разработчикам собрать рабочее приложение с Wysiwyg Пользовательский интерфейс и логика, которые ближе к формулам электронной таблицы!
В Интернете много обсуждений о влиянии «Нет кода», «Низкий код» и «Полный код», и нам придется посмотреть, как он разыгрывается, поскольку даже Гартнер предсказывает это к 2024 году, 65% разработки будет выполнено на платформах с низким кодом .
Сам медовый код поставляется с несколькими Шаблоны и, кажется, нацелен на создание автономных приложений, MVP и т. Д.
Тем не менее, я действительно хочу связать это с нашими существующими системами, позволяет нашим не разработчикам создавать приложения, которые отвечают их потребностям с помощью данных, которые они требуют. За последние несколько болотных постов мы изучили Экспорт данных из базы данных для хранения в S3 , а также как Доступ к API по медовому коду Анкет
Теперь мы объединим все это в один трубопровод!
Поместить
Цель этого POC — создать пользователей, которые созданы в нашей существующей системе, импортировать их в приложение HoneyCode, где их просматривает пользователь по медовому коду, и мы установим некоторые дополнительные данные атрибута в медовом коде. Простая система одобрения/отрицания проверки.
Архитектура
API
Мы начнем с нашего существующего приложения в виде шлюза API, Lambda и базы данных. Это просто займет некоторый ввод JSON и отобразит его в нашу таблицу базы данных, на самом деле не будет в этом вдаваться, но хотел обеспечить более конечный поток.
База данных
Придерживаясь очень простого стола здесь, но это действительно не имеет значения. Магия сосредоточена вокруг нашего триггера базы данных, который начнет наш запрос. На самом деле мы хотели бы добавить наш триггер во все столы, на которые мы хотим запечатлеть событие. Для этого теста я собираюсь использовать следующий SQL для заполнения моего CSV:
SELECT st.id, st.name, st.email, CASE WHEN st.email = 'boss@gizmo.codes' THEN 'Boss' ELSE 'Pleb' END AS "status" FROM sample_table st
Трубопровод
Наш триггер базы данных будет генерировать файл CSV и загружать его на S3. Мы будем использовать S3 Уведомление о событии Функция, чтобы позвонить на нашу медовую код Lambda. Эта Lambda будет нести ответственность за чтение файла CSV с S3, форматирование данных и отправку его в нашу таблицу посохо что -то … все тяжелые работы!
Медовый код
Конечная цель! Внутри HoneyCode мы создадим приложение, создадим несколько таблиц, связываем эти таблицы с экранами .. и увидим синхронизацию данных в режиме реального времени! Единственное реальное соображение дизайна здесь — обработать таблицу, которую вы синхронизируете, как будто внешний — не строить фильтры и т. Д. На таблице, не обновляйте ее через пользовательский интерфейс. Используйте его для поиска и сохранения данных в других таблицах медового кода. Есть и другие проекты, чтобы Данные экспорта рабочей книги Хотя, если вы хотите такого типа функциональности!
Шаг первый
Тьфу, так как я не могу предоставить способ создать эту рабочую книгу, следующий большой кусок этого поста будет создавать большую часть ее!
Медовый код
Давайте начнем с конца и запустим свое приложение по медовому коду! Это не означало как учебник для создания приложения по медовому коду, так как я был довольно грубым в том, чтобы подготовить это приложение в POC:)
Давайте создадим нашу рабочую книгу, чтобы начать:
Это бросит вас в рабочую книгу без названия и представит вам первую таблицу под названием Table1! Пользовательский интерфейс медового кода довольно прост, навигация состоит из трех пунктов меню на левой горизонтальной полосе:
- Столы
- Строитель
- Автоматизации
Мы даже не будем касаться автоматизаций для этого трубопровода!
Столы по медовым коде
Создадим следующую структуру таблицы:
Давайте быстро погрузимся в каждый стол!
Пользователи
Пользователи
Таблица — это то, что мы будем писать из трубопровода, поэтому мы не будем связываться с чем -либо. Мы не хотим, чтобы на нем было написано по меду -коду и т. Д., Поскольку данные будут меняться.
Давайте возьмем Таблица 1
и переименовать это Пользователи
и предоставить следующие столбцы:
- Я БЫ
- Имя
- Эл. адрес
- Роль
Мы хотим сохранить это синхронизация с запросом, который мы позже запустим.
Давайте сейчас внесем некоторые фиктивные данные, чтобы помочь нам с приложением Honeycode и удалите другие строки:
Статус проверки
Теперь мы будем отслеживать статус обзоров и использовать статус для фильтрации результатов в приложении, чтобы мы могли увидеть только не рецензируемые строки.
Создайте новую пустую таблицу:
и давайте назвать это Review_status
и предоставить следующие столбцы:
- Статус
- Отзывы
Давайте введем следующие данные
В ожидании | |
Рецензируется |
Удалить дополнительный столбец и строку:)
Эти формулы будут первоначально бросить исключение, но мы исправим это на следующем шаге.
Рецензируется
Теперь, чтобы начать подключаться к Пользователи
Таблица и сохраните мета-дату о пользователях в таблице, управляемой по медовому коду.
Давайте создадим еще одну новую таблицу и назовите ее Отзыв
и предоставить следующие два столбца:
- Логин пользователя
- Статус
Мы не поместим никаких данных в эту таблицу, просто удалите дополнительный столбец и пустые строки:
И теперь, когда у нас есть этот стол, вы можете вернуться к Review_status
Чтобы увидеть, что он работает и показывает наш тест Пользователи
Данные как ожидающие!
Комментарии рецензента
Наша окончательная таблица, давайте добавим некоторые дополнительные метаданные, такие как, кто одобрил пользователя и, возможно, позволит им установить дополнительную заметку!
Создайте таблицу под названием Reviewer_comments
и установить следующие столбцы:
- Дата проверки
- Рецензент
- Логин пользователя
- Комментарий
Удалить пустые ряды, и, наконец, мы хотим отформатировать оба Дата обзора
и Рецензент
Анкет
Дата проверки
Если вы выберете столбец по A
и выберите Формат ...
:
Мы хотим установить Формат столбца
быть Дата и время
и Формула столбца
быть = Теперь ()
, нажмите Применить:
Рецензент
Внутри Honeycode пользователи, которые будут использовать веб -приложение, известны как Контакты Анкет Мы настроим столбец как тип Контакт
так что мы получим зарегистрированные в деталях пользователей.
Похоже на Дата обзора
, выберите столбец для формата и на этот раз набор Формат столбца
быть Контакт
и оставь Формула столбца
пустой:
Приложение по медовому коду
Давайте теперь построим наш пользовательский интерфейс! Сохраняя это прямо, у нас будет только два экрана — главный экран приборной панели и детали SCEEN!
Выберите опцию Builder в левом меню и нажмите Постройте свой собственный
:
Панель приборов
Давайте начнем с + Добавить объекты
В слева внизу:
Сначала добавьте Кнопка
а затем также выберите Список столбцов
. Для списка давайте возьмем по умолчанию при выборе Добавить экран детализации
:
Кнопки, все кнопки
Давайте просто сосредоточимся на нашей единственной кнопке Lonely … Давайте немного поджигаем и продублируем, чтобы у нас было четыре кнопки, назовите две из них В ожидании
и два Отзыв
:
Эти кнопки будут управлять нашим списком, позволяя нам фильтровать для ожидающих пользователей или рецензируемых пользователей в основном благодаря нашему Review_status
Таблица.
Мы хотим, чтобы две кнопки для каждого действия — в то время как таблица установлена на рассмотрение, мы не хотим, чтобы ожидающая кнопка делала что -либо. Так что одна кнопка будет просто сидеть там, выглядящей все красиво. Когда таблица показывает уже рецензируемой, мы затем хотим, чтобы кнопка «Действие» ожидала, чтобы она переключила список при нажатии.
Чтобы достичь этого, нам понадобятся некоторые переменные …
Переменные
Чтобы позволить нам контролировать список, нам понадобится две переменные.
Одна переменная, CurrentFilter
, определит какую кнопку — та, которая выполняет действие или просто сидит там? Другая переменная, Usersfilter
, действительно будет содержать ряды, которые мы хотим отображать.
Текущий фильтр
От + Добавить объекты
Нажмите Ячейка данных
— Измените имя на Текущий фильтр
, переключить тип на Переменная
и установите начальное значение на В ожидании
Анкет На вкладке «Дисплей» измените видимость на = False
:
Пользователи фильтруют
Мы по умолчанию по умолчанию, чтобы показать ожидающих пользователей при загрузке.
Опять же, мы хотим ячейку данных, так что от + Добавить объекты
Нажмите Ячейка данных
— Измените имя на Использует Filter
, переключить тип на Переменная
и установите начальное значение в формулу. Это будет: = Findrow (review_status, "review_status [status] =%", "wanding")
Анкет Давайте также установим видимость FALSE на вкладке Display:
Соединительные кнопки с переменными
Если мы выберем приложение View в правом верхнем углу, мы увидим довольно уродливый пользовательский интерфейс, с нашими четырех кнопками:
Итак, давайте уменьшим беспорядок и реализуем логику кнопки. Для каждой из кнопок мы будем обновлять формулу видимости на вкладке Display.
Обновите верхнюю часть В ожидании
кнопка на: = If ($ [currentFilter] = "В ожидании", Правда, ложь)
Обновите нижнее В ожидании
кнопка на: = If ($ [currentFilter] <> «В ожидании», верно, false)
Обновите верхнюю часть Отзыв
кнопка на: = If ($ [currentFilter] = "Reviewed", true, false)
Обновите нижнее Отзыв
кнопка на: = If ($ [currentFilter] <> "Reviewed", true, false)
т.е.
И наше приложение теперь должно показывать только две кнопки:
Действия кнопок
Давайте дадим нашим кнопкам чем заняться сейчас! Вы заметили, что в диалоге кнопки есть три параметра:
- Данные
- Отображать
- Действия
Мы сделаем наши кнопки несколько быстрых действий!
Кнопка ожидания действия
Выберите снизу В ожидании
кнопку и перейдите на вкладку Action. При быстрых действиях вы хотите выбрать Обновите текущий экран
. Вам будет предложено Установите переменную
и выберите CurrentFilter
Первый. Мы хотим заполнить Возьмите данные из
Формула с просто: знак равно В ожидании "
.
Ударить Установите другую (1 переменную)
и выберите Usersfilter
. На этот раз мы хотим заполнить формулу = Findrow (review_status, "review_status [status] =%", "wanding")
— Идентично значению по умолчанию мы установили переменную на первоначально!
Рецензированная кнопка действия
Выберите снизу Отзыв
кнопку и перейдите на вкладку Action. При быстрых действиях вы хотите выбрать Обновите текущий экран
. Вам будет предложено Установите переменную
и выберите CurrentFilter
Первый. Мы хотим заполнить Возьмите данные из
Формула с просто: = "Reviewed"
Анкет
Ударить Установите другую (1 переменную)
и выберите Usersfilter
. На этот раз мы хотим заполнить формулу = Findrow (Review_status, "review_status [status] =%", "Reviewed")
Соединительные кнопки к таблице
Теперь у нас есть кнопки, выполняющие действия, но мы не видим ничего меняющегося в нашем приложении! Это связано с тем, что таблица по -прежнему получает данные непосредственно из Пользователи
Таблица. Мы хотим обновить его, чтобы на самом деле вытащить из нашей переменной!
Это хорошая и легкая часть, выберите список с пользовательского интерфейса, а на вкладке Data давайте изменим источник из знак равно Пользователи
быть = $ [UsersFilter] [Обзоры]
Переключившись на представление о нашем приложении, мы видим, что кнопки работают правильно:
Подробный экран
Таким образом, наш экран с подробностями сохранит некоторые данные в наших таблицах по медовому коду, установит комментарий и данные аудита — кто это сделал и когда.
Раздел действия
Итак, у нас в настоящее время есть наш ожидаемый тестовый пользователь, поэтому давайте настроим его на их просмотр. Из опции Builder давайте переключимся на автоматически созданный Пользователи детализируют
экран. Нашим действию понадобятся кнопки, так что, надеюсь, вы знаете, сейчас обычно:) Выберите + Добавить объекты
и выберите Кнопка
дважды. Давайте изменим их размер и изменим текст, чтобы один сказал «одобрить», а другой — «отрицание»:
Утвердить автоматизацию
Давайте сначала возьмем кнопку «Утвердить», выберите Действие
Вкладка и на этот раз мы хотим Создать автоматизацию
Как мы будем сохранять данные в таблицах!
Мы хотим всего три действия:
- Добавить ряд в
Рецензируется
- Добавить ряд в
Reviewer_comments
- Перенаправить обратно на приборную панель
# Добавление ряда к рецензированию
Нажмите + Добавить действия
и выберите Добавить ряд
Анкет Выберите наш Отзыв
Стол из выпадения. Помните, что у нас есть только два столбца в этой таблице: идентификатор пользователя и статус. На экране в настоящее время отображается идентификатор пользователя, и мы можем втянуть его в нашу формулу «взять данные из» с = $ [InputRow] [id]
а затем установите столбец как = [Идентификатор пользователя]
Анкет
Поскольку у нас есть два столбца для заполнения, давайте выберите + Добавить еще один
и разоблачить варианты с помощью:
= [Статус] |
# Добавление ряда к комментариям рецензента
Еще раз нажмите + Добавить действия
и выберите Добавить ряд
Анкет Выберите наш Reviewer_comments
Стол из выпадения. Заполнить следующие столбцы:
=[ Дата проверки] | |
=[ Рецензент] | = $ [Sys_user] |
= [Идентификатор пользователя] | = $ [InputRow] [id] |
# Перенаправить
Наше последнее действие, нажмите + Добавить действия
и выберите Навигация
. Выберите Экран
от выпадения. И это наша кнопка действия завершена!
Шаг второй
Да .. Наконец -то на шаге 2 — К счастью Остальное более или менее автоматически развернуто!
Мы захотим настроить нашу «существующую» инфраструктуру — API, попавший в базу данных. Затем у нас будет лямбда, которая не дает медового кода Пользователи
Таблица в синхронизации с файлом CSV в S3.
Терраформ
Вы можете клонировать GitHub Repo Анкет Есть несколько переменных, которые мы захотим установить перед выполнением сценария Terraform, а именно, нам нужно:
- Вход в наш медовый код
- Наш пароль по медовому коду
- Рабочая книга по медовому коду uuid
- Таблица медоносных кодов UUID для
Пользователи
Таблица
Давайте заберем таблицу uuid!
Пользователи UUID
Я написал небольшой сценарий, чтобы помочь нам, и вдал более подробную информацию об этом в Еще один пост в блоге Если вы заинтересованы в этом.
Давай начнем это:
$ cd aws-rds-to-honeycode/query-honeycode $ npm install $ node index.js workbooks -u USERNAME -p "PASSWORD" Workbook Name Workbook UUID ------------- ------------- Untitled => arn:aws:sheets:us-west-2:122162422134:workbook:28e53ee7-adcd-4c40-b243-ea289eb954e2
Теперь взяв рабочую книгу Uuid, мы можем получить столы Uuid:
$ node index.js tables -u USERNAME -p "PASSWORD" -w "arn:aws:sheets:us-west-2:122162422134:workbook:28e53ee7-adcd-4c40-b243-ea289eb954e2" Table NameTable UUID ------------- ------------- Users => b2cdc524-4085-352f-86b9-c7c956eb9da2 Review_Status => 9c83ce89-6172-4968-a4e6-971c1cf121bf Reviewed => 8d65ae15-1d35-4633-a339-171fa6592ea0 Reviewer_Comments => 9859cdd7-d556-4ad6-9d60-b64dd1f06275
Теперь у нас есть Пользователи
UUID: B2CDC524-4085-352F-86B9- C7C956EB9DA2
Рабочая тетрадь UUID
Очень похоже на ранее, просто запустите сценарий, чтобы получить нашу рабочую книгу uuid:
$ node index.js workbooks-uuid -u USERNAME -p "PASSWORD" Workbook Name Workbook UUID ------------- ------------- Untitled => 28e53ee7-adcd-4c40-b243-ea289eb954e2
Файл переменной терраформ
Мы захотим создать новый файл в Terraform
Папка называется Terraform.tfvars
который вы хотите заполнить следующим образом:
honeycode_login = "USERNAME" honeycode_password = "PASSWORD" honeycode_workbook = "WORKBOOK UUID" honeycode_sheet = "TABLE UUID"
Последние два шага, прежде чем мы развертываем, нам нужно подготовить зависимости от приложения:
$ cd aws-rds-to-honeycode/app $ npm install $ cd ../lambda $ npm install
Наконец, давайте разместим нашу среду с:
cd ../terraform terraform init terraform apply -auto-approve
Это займет несколько минут, чтобы завершить, когда мы ждем, пока кластер базы данных встанет.
Мы должны получить следующий вывод:
Отлично, тогда мы готовы двигаться дальше: D
База данных
Нам нужно предоставить разрешение базы данных для подключения к нашему ведру S3, мы можем сделать это со следующим сценарием:
cd aws-rds-to-honeycode/script ./add_role_to_db_cluster.sh
Это займет несколько минут, но мы можем нажать! Подключитесь к базе данных, используя URL и учетные данные, которые вы получили от вывода Terraform. См. (PostgreSQL Trigger to S3) [ https://gizmo.codes/postgresql-rigger-to-s3/ ] Если вы не уверены, как подключиться к базе данных.
Как только вы подключитесь, мы захотим выполнить следующие операторы SQL.
CREATE EXTENSION IF NOT EXISTS aws_s3 CASCADE; CREATE TABLE sample_table (id SERIAL PRIMARY KEY, name varchar, email varchar);
Триггер базы данных
Теперь для черной магии обратитесь к выходу терраформ, особенно Database_bucket_id
Анкет Мы хотим обновить код триггера, чтобы соответствовать этому:
CREATE OR REPLACE FUNCTION export_to_s3() RETURNS TRIGGER AS $export_to_s3$ BEGIN PERFORM aws_s3.query_export_to_s3( 'SELECT st.id, st.name, st.email, CASE WHEN st.email = ''boss@gizmo.codes'' THEN ''Boss'' ELSE ''Pleb'' END manager_check FROM sample_table st', aws_commons.create_s3_uri( 'S3_BUCKET_NAME', 'test.csv', 'us-east-1'), options :='format csv, delimiter $$,$$' ); RETURN NEW; END; $export_to_s3$ LANGUAGE plpgsql; CREATE TRIGGER sample_table_trg AFTER INSERT OR DELETE OR UPDATE OR TRUNCATE ON sample_table FOR EACH STATEMENT EXECUTE PROCEDURE export_to_s3();
Превосходно! Мы сделали!
Шаг третий
Давайте протестируем этого плохого мальчика!
Вернитесь к выводу Terraform снова и найдите api_gateway_url
. Мы можем позвонить по почте JSON и посмотреть, как он распространяется через систему.
Сначала я вернусь в мед и удалю тестовые данные, которые у нас были в Пользователи
В Отзыв
и Reviewer_comments
Анкет
Тогда мы можем позвонить:
$ curl --header "Content-Type: application/json" --request POST --data '{"name": "JD", "email": "pleb@gizmo.codes"}' API_URL/honeycode-sync
Мы должны увидеть, как наш пользователь появляется — мы можем добавить еще несколько.
$ curl --header "Content-Type: application/json" --request POST --data '{"name": "Gizmo", "email": "boss@gizmo.codes"}' API_URL/honeycode-sync $ curl --header "Content-Type: application/json" --request POST --data '{"name": "Swayze", "email": "boss@gizmo.codes"}' API_URL/honeycode-sync
И мы закончили! Наш трубопровод завершен с обновлениями, занимающими около 13 секунд от вызова приложения, сохранением в базе данных, обновлением S3, подталкиванием данных от S3 до Honeycode и, наконец, отображая в приложении Honeycode.
Шаг четвертый
Наконец, убедитесь, что все это разорвут, когда закончите. Вы не хотите, чтобы общедоступные базы данных оставались там, и AWS взимает плату за ваш счет …
$ cd aws-rds-to-honeycode/terraform $ terraform destroy -auto-accept
Оригинал: «https://dev.to/aws-builders/postgresql-to-honeycode-pipeline-4pa4»