Directum RX Developer
124 subscribers
12 photos
5 files
6 links
мысли вслух и иногда полезные вещи про DirectumRX (нефильтрованный поток сознания)
Download Telegram
Публичный чат, привязанный к каналу
https://t.me/DRXDevChat
Directum RX Developer pinned «Публичный чат, привязанный к каналу https://t.me/DRXDevChat»
Я всё еще под впечатлением доклада про запуск нескольких инстансов RX в пределах одного сервера.

В презентации не было ссылки на эти два репозитория:
1. https://github.com/DirectumCompany/rx-manage-applied-projects
2. https://github.com/DirectumCompany/rx-instance-manager
Метаданные + Reflection.PPTX
11.9 MB
Коллеги из ТАНАИС просили поделиться презентацией.
Решил что будет полезно и остальным.
👍8
Собственно, как получить локализированное значение перечисления из блока в NoCode задаче:
_block - Это сам блок (как assignement в задаче);
_obj - Это задача.

string anchorText = string.Empty;

var blockMetadata = (Sungero.Metadata.ScriptBlockMetadata)Sungero.Metadata.Services.MetadataSearcher.FindBlockMetadata(Constants.ApprovalPD.Blocks.ConvertToPDFGuid);
if (blockMetadata != null && _block.Anchor.HasValue)
{
var propertyMetadata = (Sungero.Metadata.EnumBlockPropertyMetadata)blockMetadata.Properties.Where(_ => _.Name == "Anchor").FirstOrDefault();
var enumValueMetadata = propertyMetadata.Values.Where(_ => _.Name == _block.Anchor.Value.Value).FirstOrDefault();
var resKey = enumValueMetadata.GetResourceKeyForNestedMetadata(enumValueMetadata.NameResourceKey);
anchorText = Sungero.Domain.Shared.ResourceService.Instance.GetString(_obj.GetEntityMetadata(), resKey, true, Array.Empty<object>());
}
👍3🔥1
В OfficialDocument есть структура с именем СonversionToPdfResult.
Вопрос: Угадайте первую букву наименования !?
😁21
NoCode в Directum RX 4.6 !!!

В настройках NoCode блоков с типом "Задание", есть параметр "Срок прекращения".
Если он заполнен и любое задание блока прекращается по истечению срока, то событие "Конец блока" НЕ ОТРАБАТЫВАЕТ.
Учитывайте это при проектировании и использовании NoCode в версии 4.6.

P.S. Работу этого функционала в версиях 4.7 и выше не тестировал, там возможно этот баг исправлен.
👍1
(возможно бесполезный) ответ на вопрос:
Как напрямую из БД получить подписи версии документа?
— Довольно бесполезная вещь, поскольку валидации не происходит.
— Довольно быстрая вещь, поскольку валидации не происходит.
— Довольно нелегальная вещь, поскольку обращение напрямую в БД.
Но так получилось, что надо было именно так...
👍3
Пришел из скриптовых языков, где гибкая работа с результатами запроса - норма. Пришлось и на C# реализовать привычный подход.
WebAgent.drawio.png
105.7 KB
анализировал процесс взаимодействия веб-клиента с веб-агентом, пока немного сырой информации по последовательности взаимодействий на уровне http запросов.
Вложена диаграмма в формате draw.io
👍4🔥4
image_2024-03-01_16-10-23.png
106.2 KB
Поделюсь статьёй из нашей базы знаний - как сообщать о проблеме с разработкой. Каждый пункт выстрадан :)
🔥6
Нас 111 :)
🔥7👏1
Почувствовал себя извергом, заставляя работать бедный сервис мониторинга под виндой для анализа логов заказчиков :)
👍2
Нашел любопытную вещь -
https://github.com/Upinel/localhost.direct
HTTPS сертификат для localhost. Бесплатно и доверенный.
Хост: localhost.direct, не localhost

Ну или выпускать самоподписанные с помощью:
https://github.com/FiloSottile/mkcert
🔥3
Немного схем по работе процесса "проверить соединение с хранилищем" под линуксом. Возможно поможет с траблшутингом. Фрагмент из нашей статьи в базе знаний.
1. Пользователь нажимает кнопку "Проверить"
2. Веб-клиент шлёт пинг запрос на сервис хранилищ
3. Веб-клиент шлёт запрос вебсерверу
4. Вебсервер шлёт пинг запрос на сервис хранилищ
Ковыряю утилиту импорта, нашел печальную штуку в SimpleOdataClient - он коряво делает из Expression логическое выражение для OData - теряет скобки и сводит всё к плоскому И/ИЛИ.
Покажу на примере поиска сотрудника:
BusinessLogic.GetEntityWithFilter<IEmployees>(x => (email == "" && x.Name == name) || (email != "" && x.Email.ToLower().Trim() == email), exceptionList, logger);
При запросе в сервис интеграции прилетает:
$filter:'e@m.ru' eq '' and Name eq 'ФИО' or 'e@m.ru' ne '' and trim(tolower(Email)) eq 'e@m.ru'

То есть:
email == "" && x.Name == name || email != "" && x.Email.ToLower().Trim() == email

Попробовал обновиться на самую свежую версию клиента - поведение аналогичное :(

Как вариант - дофильтровывать результат уже на клиенте, а привязываться только по имени для всех сущностей
При анализе логов сервиса интеграции в Git Bash или линуксе можно использовать такую цепочку команд:
cat *Integration*.log | grep IntegrationApiCallSpan | grep -v Started | jq -c '{"path":.span.path, "req":.span.requestParams, "status":.span.status}'

1. смотрим только логи интеграции
2. фильтруем только строки с запросом
3. исключаем события старта, они нам не интересны
4. переформатируем результат с помощью jq. извлекаем только .span.path, .span.requestParams, .span.status
потом можно отсортировать (sort) и сделать uniq, чтобы были только уникальные записи без дублей

Потребуется поставить jq ( https://jqlang.github.io/jq/ )
2