Загрузить изображение для проекта: 'Citeck Community'
  1. Citeck Community
  2. ECOSCOM-5697

Add ability to create artifacts within workspace

    XMLWordДля печати

Детали задачи

    • Icon: История История
    • Решение: Нет решения
    • Icon: Medium Medium
    • 2025.8-RC1
    • Не заполнено
    • Не заполнено
    • Не заполнено

    Описание

      Необходимо предоставить возможность потенциальным клиентам работать с no-code/low-code инструментами без поднятия отдельного стенда

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

      Инструменты, которые должны быть доступны локальному администратору:

      • типы данных
      • модели BPMN
      • модели DMN
      • канбан
      • редактирование экранных форм
      • редактирование журналов
      • редактирование дашбордов для всех пользователей внутри воркспейса
      • меню
      • шаблоны нотификаций

       

      Общие концепции по реализации для артефактов вне ecos-data (как правило hibernate)

      Концепции можно пересмотреть, но в процессе реализации воркспейсных артефактов pavel.simonov@citeck.ru руководствовался ими

      System ID

      1. У воркспейса добавлено поле systemId и именно оно используется для префикса в ссылках на воркспейсные артефакты.
      2. Поле systemId старается быть похожим на id воркспейса, но в нем присутствует замена спец символов, лимитирование по длинне, защита от дублирования одного systemId у двух воркспейсов и прочие доработки. В будущем наверняка появится необходимость отказаться от требования уникальности workspace id (сейчас два разных пользователя не могут создать себе по воркспейсу с одним и тем же id) и тут поле systemId будет очень кстати.
      3. В коде добавлен класс IdInWs (identifier in workspace), который содержит в себе два поля - id (собственно старый добрый обычный идентификатор артефакта) и workspace (идентификатор воркспейса (не systemId!)). Для конвертации между IdInWs и текстовым представлением следует всегда использовать WorkspaceService. Он внутри вычисляет systemId у воркспейса и добавляет именно его в качестве префикса. В логах запись вида aaa::bbb означает, что aaa - это id воркспейса (не systemId!). Если же aaa:bbb (одно двоеточие), то aaa - это systemId воркспейса  

      Принципы по доработке артефактов

      1. В описание артефакта добавляется текстовое поле workspace
      2. В бд убирается требование уникальности ext_id и вместо него добавляется уникальность по ext_id + workspace
      3. В бд у всех записей поле workspace проставляется пустой строкой (считаем это дефолтным воркспейсом), добавляется not-null ограничение (чтобы не усложнять себе жизнь условиями с проверкой на null) и указываем, что значение по умолчанию для поля пустая строка на случай если будет понижение версии микросервиса и в insert перестанет попадать поле workspace.
      4. Значение поля workspace проставляется при мутации атрибута _workspace (приходит при любой мутации с UI) через метод  

       

      workspace = workspaceService.getUpdatedWsInMutation(workspace, ctxWorkspace) 

      Этот метод не дает перезаписать воркспейс если он уже задан (миграция между WS пока не предусмотрена)

       

      5. Основная концепция - перекладываем сложности работы с воркспейсами на плечи микросервиса, в котором существует артефакт. У нас уже есть как минимум два клиента, которые занимаются созданием и деплоем артефактов - UI и AI. Нужно чтобы эти клиенты могли работать максимально просто (с добавлением атрибута _workspace при создании). В такой концепции ничего на формах для артефактов можно не дорабатывать.

      6. Ссылка на артефакт в воркспейсе (EntityRef.getLocalId) всегда содержит префикс "{workspace_system_id}:", но атрибут id при этом не должен возвращать id с префиксом. Исключением являются Resolved DAO (emodel/type, uiserv/rjournal, uiserv/rform, uiserv/rboard). Они возвращают атрибут id с префиксом. Это позволяет избежать ряда доработок на UI.

      7. Воркспейссы "", "default", "admin$..." (начинается на admin$) считаются воркспейсами с глобальными сущностями и все что в них создается в бд должно попадать с полем workspace равным пустой строке. Соответственно при поисковых запросах если мы хотим получить что-то в admin$workspace, то нужно искать записи с workspace == "".

      8. В BPMN движке есть много завязок на наши id и чтобы разрешить конфликты процессов с одним id между воркспейсами нужен префикс. Использовать ":" здесь уже нельзя и поэтому был выбран достаточно уникальный и безобидный разделитель ".." (две точки)

      Доработки, без которых не желательно релизиться   

      1. Слушатели в bpmn никак не локализованы в workspace и будут слушать вообще все события в системе
      2. Скрипты в bpmn выполняются с полными системными правами. Нужно их как-то локализовать (выполнять под user = ws_system и authority "ROLE_SYSTEM_WS_{workspaceSystemId}" ?) 
      3. При скачивании воркспейсных артефактов нужно из всех внутренних ссылок вырезать префиксы "{workspaceSystemId}:" чтобы можно было без проблем импортировать в их в другом WS. Но тут есть нюанс, что возможно имеет смысл отличать ссылки на локальные артефакты в пределах одного WS и ссылки глобальные, чтобы при импорте не добавлять префикс туда, куда не следует.
      4. В доклибе отсутствует возможность создать Файл:Документ/Таблицу/Презентацию

      Вложенные файлы

        1. image-2025-09-16-11-10-47-257.png
          23 kB
          Irina Prudnikova
        2. ws1 ws2.mp4
          22.71 MB
          Irina Prudnikova
        3. screenshot-1.png
          6 kB
          Irina Prudnikova
        4. добавление аспекта при редактировании.mp4
          45.11 MB
          Irina Prudnikova
        5. шаблон нумерации в админке.mp4
          54.79 MB
          Irina Prudnikova
        6. не открывается новый жкрнал.mp4
          45.59 MB
          Irina Prudnikova
        7. не открывается новый журнал.png
          34 kB
          Irina Prudnikova
        8. создание фрмы с формы типа.png
          8 kB
          Irina Prudnikova
        9. автоматическое добавление несущетсвующих журналов.png
          66 kB
          Irina Prudnikova
        10. Не сохраняется родитель типа.png
          19 kB
          Irina Prudnikova
        11. отсутствует вариант создания.png
          26 kB
          Irina Prudnikova
        12. копирование формы.png
          23 kB
          Irina Prudnikova
        13. редактирование артефактов не в админке.mp4
          29.50 MB
          Irina Prudnikova
        14. bpmn из ws видно в админке.png
          14 kB
          Irina Prudnikova
        15. выбор раздела при создании модели.png
          10 kB
          Irina Prudnikova
        16. кнопки не реагируют после редактирирования.mp4
          37.26 MB
          Irina Prudnikova
        17. screenshot-2.png
          97 kB
          Irina Prudnikova
        18. participant.png
          7 kB
          Irina Prudnikova
        19. candy_candy-cookies.bpmn.xml
          52 kB
          Irina Prudnikova
        20. systemid.png
          48 kB
          Irina Prudnikova
        21. image - 2025-10-17T151435.781.png
          68 kB
          Irina Prudnikova
        22. screenshot-3.png
          111 kB
          Irina Prudnikova
        23. screenshot-4.png
          69 kB
          Irina Prudnikova
        24. screenshot-5.png
          61 kB
          Irina Prudnikova
        25. screenshot-6.png
          24 kB
          Irina Prudnikova
        26. screenshot-7.png
          50 kB
          Irina Prudnikova
        27. screenshot-8.png
          96 kB
          Irina Prudnikova
        28. редактирование глобальных артефактов.mp4
          21.93 MB
          Irina Prudnikova
        29. screenshot-9.png
          58 kB
          Irina Prudnikova
        30. screenshot-10.png
          69 kB
          Irina Prudnikova
        31. лишний атрибут в модели данных.mp4
          18.85 MB
          Irina Prudnikova
        32. screenshot-11.png
          92 kB
          Irina Prudnikova
        33. screenshot-12.png
          42 kB
          Irina Prudnikova
        34. screenshot-13.png
          51 kB
          Irina Prudnikova
        35. локальные уведомления.mp4
          85.25 MB
          Irina Prudnikova

        Активность

          Люди

            pavel.simonov@citeck.ru Pavel Simonov
            pavel.simonov@citeck.ru Pavel Simonov
            Голоса:
            0 Голосовать за эту задачу
            Наблюдатели:
            3 Начать наблюдение за этой задачей

            Даты

              Создано:
              Обновленo:

              Учет времени

                Оценка:
                Первоначальная оценка - 1 неделя, 2 дни Первоначальная оценка - 1 неделя, 2 дни
                1w 2d
                Осталось:
                Оставшееся время - 0 минуты
                0m
                Затрачено:
                Затраченное время - 2 недели
                2w