FAQ#


Запросы к БД#

Запрос

SQL

Получить датафлоу по ключу

SELECT * FROM dataflow."DataflowDefinitions" Where "Key" = 'bd6abf69-49ad-409c-9907-94264f020f88’

Получить объект по данным из json

SELECT * FROM catalogs."CatalogEntries_89" Where "Data" ->> 'Product' = '2202’

Поиск по id

SELECT * FROM catalogs."CatalogEntries_89" Where "Id" = '3687’

Проверка 2 таблиц

SELECT * FROM catalogs."CatalogEntries_136" AS src LEFT JOIN catalogs."CatalogEntries_134" ref_table ON (src."Data" ->> 'Acceptance')::bigint = ref_table."Id" where NOT (src."Data" ->> 'Acceptance')::bigint IS NULL and ref_table."Id" is NULL

Показать все компоненты вмс, сортировка по названию

SELECT * FROM view_service."ApplicationDefinitions" where "Title" like 'WMS.%' ORDER BY "Title" ASC

Получить все датафлоу по guid компонента

SELECT * FROM dataflow."DataflowDefinitions" where "OwnerId" = '23ae5f3f-aded-4961-bdef-ea668728bfea’

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

SELECT * FROM dataflow."DataflowDefinitionVersions" where "DataFlowDefinition_Id" = '245' ORDER BY "Id" DESC LIMIT 100

Получить шаги в датафлоу

select drafts."Key", drafts."Name", drafts."OwnerId",steps.value->'name' from dataflow."DataflowDefinitionDrafts" drafts, jsonb_array_elements("Stages") stages, jsonb_array_elements(stages->'steps') steps, jsonb_each(steps->'keyMap') keyMaps where drafts."DelMark" = false and steps.value->>'stepType' = 'LookupReferenceStep' and keyMaps.value = '""’

Изменить в поле Data значение поля json Дока: https://aaronbos.dev/posts/update-json-postgresql

UPDATE catalogs."CatalogEntries_143" SET "Data" = jsonb_set("Data", '{Quantity}', '1', false) WHERE "Data" ->> 'NumberCollectionTask' = '2024' AND "Data" ->> 'Product' = '3723’


Component scripts#

Действие

Код

Вставить текст в label

context.Properties.<наименование лейбла>.SetText('<Текст лейбла>')

Выполнить датафлоу

context.ExecuteDataflow('<Гуид датафлоу>', <Датамодель>)

Создать гуид

from System import Guid
Guid.Parse("<Гуид>")

Переход на другую страницу

context.Commands.ChangePageByName("<Имя страницы>")

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

str(<Строка>).encode('utf-8').decode('unicode_escape')

Вывести модалку

context.PlatformServices.Confirm('<Тело Модалки, Обязательно стринг>', '<Заголовок Модалки>')

Вписать строку в текстбокс

context.Properties.<Имя тексбокса>.Label.Value = ‘<Строка>’

Получить датамодель из темплейта по евенту

model.Model.Data.<Имя дефинишина>

Обработка событий на модалке

def checkResponse(task)
if (task.Result == True):
context.Logger.Error("TRUE") else:
context.Logger.Error("FALSE")

def show_modal():
explicitSystemAction = System.Action[Task](checkResponse)
result = context.PlatformServices.Confirm("Сообщение", "Заголвок").ContinueWith(explicitSystemAction)

Лог в консоль

context.Logger.Error(’<Строка>’)

Поставить лейбл текстбоксу

context.Properties.TextBox_342.Label.Value = 'aSHGfj’

Засунуть SVG в контейнер

context.Properties.SvgRight_1.File.Value = Guid.Parse("b505b8c4-4c88-4bdc-bb60-e2115047f263")

Покрасить элемент в скрипте

from Liminuza.Platform.Shared.RenderEngine.Models import SolidColorBrush, Color, Brush
color = Color.FromARgb(255, 255, 0, 0)
#Покрасить шрифт
context.Properties.Button_462.FontColor.Value = color
#Покрасить фон
context.Properties.Button_462.Background.Value = SolidColorBrush(color)
#Надо уведомить систему об изменении
context.Properties.Button_462.RaisePropertyChanged('Background')
context.Properties.Button_462.RaisePropertyChanged('FontColor')

Доступ к датамодели

# к обычному компоненту
datamodel = context.DataModel.Model
# к мультикомпоненту
dm1 = context.DataModel["fcf3cd08-ded3-45ef-a5a4-2f0c837add47"].Model

Добавить ошибку к полю

context.Form.Get("TransportCompany").AddError("Ключи интеграции с Траснпортной компанией не заданы или некорректны")
context.Form.GetForm("1fe65ccf-50f0-42d3-b18b-da99971f4faa").Get("NumberRecipient").AddError("Введите номер начинающийся на +7")
context.Form.GetForm("1fe65ccf-50f0-42d3-b18b-da99971f4faa").Get("NumberRecipient").ClearError()

Вытащить из форм экшна данные

def decode_json(serialized_data): serialized_data = str(serialized_data).encode('utf-8').decode('unicode_escape') serialized_data = eval(serialized_data.replace('null', 'None').replace('true', 'True').replace('false', 'False')) return serialized_data

В поле навесить скрипт в On key down в котором проверяем какая клавиша нажата
Документация: https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.components.web.keyboardeventargs?view=aspnetcore-7.0

def test_enter(*args):
if str(args[1].Code) == 'Enter':
context.PlatformServices.ShowDialog(”Нажат энтер”, "1")

Вызов js

context.InvokeInterop("Foo_Method",1,2,3,"Тестовая строка")


Скрипты к сценариям data-flow#

Действие

Код

Обнулить время в дате

from System import DateTime
date = item["_TaskData"]["InitialDate"]
new_date = DateTime.Parse(str(date)).ToString("dd.MM.yyyy")
item["_date@date"] = DateTime.ParseExact(new_date, "dd.MM.yyyy", None)

Удаление объектов из массива

to_remove = [] for i in item["_Remainings"]
to_remove.append(i) for i in to_remove
item["_Remainings"].Remove(i)

Использование результата Execute Dataflow

item["_Result"][0]["_someVariable@string"]
или item["_Result"][0]["data"]["Property_1"]

SQL запрос в скрипте

import catalogs
query = catalogs.query('select test_cmp."Id" as "Id", test_cmp."Name" as "Name", test_cmp."Data_Product" as "Product", test_cmp."Data_Agent" as "Agent" from "538777b0-cba4-4b1e-a188-8c36d1d7defe" as test_cmp where test_cmp."Name" = @test_cmp_name') query.add_parameter("@test_cmp_name", "test name")
item["query_result"] = query.execute()

Создание записи в скрипте

import catalogs
import json_extensions
entity_set = catalogs.entity_set("a65c74b3-162b-4538-bd81-49d7adfc84e3")
create_operation = entity_set.create()
create_operation.set_name("Имя в поле name")
create_operation.data["Property_1"] = "Значение"
create_operation.data["Property_2"] = json_extensions.select_token(item,"data.Property_2")
entry_id = create_operation.apply()

Редактирование записи в скрипте

import catalogs
import json_extensions
entity_set = catalogs.entity_set("a65c74b3-162b-4538-bd81-49d7adfc84e3")
update_operation = entity_set.update(entry_id)
update_operation.no_tracking()
update_operation.set_name("Нове имя в поле name")
update_operation.data["Property_1"] = "Новое значение"
update_operation.data["Property_2"] = json_extensions.select_token(item,"data.Property_2")
update_operation.apply()


Настройка компонента#

CRON#


Cron

  1. Ссылка на генерацию крона

  2. Вставлять крон сюда

  3. Чтобы запустился датафлоу нужно выбрать юзера с правами на этот компонент

Крон запускает Input dataflow