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

        Активность

          Люди

            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