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

Add ability to create artifacts within workspace

    XMLWordДля печати

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

    • Icon: История История
    • Решение: Готово
    • Icon: High High
    • 2025.8-RC1
    • Не заполнено
    • Не заполнено
    • Не заполнено
    • 28.07-11.08, 06.10-17.11, 25.08-08.09, 17.11-01.12
    • Требуется

    Описание

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

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

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

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

       

      Общие концепции по реализации для артефактов вне 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 и будут слушать вообще все события в системе
        upd. pavel.simonov@citeck.ru сделал чтобы  для процессов внутри ws слушатели срабатывали только для документов в том же ws
      2. Скрипты в bpmn выполняются с полными системными правами. Нужно их как-то локализовать (выполнять под user = ws_system и authority "ROLE_SYSTEM_WS_{workspaceSystemId}"
        upd. pavel.simonov@citeck.ru сделал чтобы для процессов в WS скрипты выполнялись под пользователем ws_system_wsSystemId с authority  ROLE_
        WS_SYSTEM
      3. При скачивании воркспейсных артефактов нужно из всех внутренних ссылок вырезать префиксы "{workspaceSystemId}:" чтобы можно было без проблем импортировать в их в другом WS. Но тут есть нюанс, что возможно имеет смысл отличать ссылки на локальные артефакты в пределах одного WS и ссылки глобальные, чтобы при импорте не добавлять префикс туда, куда не следует.
        upd. daniil.shcherbina@citeck.ru сделал чтобы префикс воркспейса заменялся на CURRENT_WS. При импорте в другой WS этот префикс меняется на тот WS в который идет импорт. 
      4. В доклибе отсутствует возможность создать Файл:Документ/Таблицу/Презентацию

      upd. daniil.shcherbina@citeck.ru исправил

       

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

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