При выгрузке пакета выбивает следующую ошибку, как ее можно исправиль? 

Нравится

1 комментарий

Добрый день.  

 

Это известная ошибка обновленного UI конфигурации для версии 7.17, в котором вызывается метод PackageInstallerServiceInternal.GetZipPackages, который предназначен для других целей. 
Исправления по данной ошибке есть в версии 7.17.1

В старом UI конфигурации пакеты будут выгружаться корректно, можно воспользоваться им в качестве обходного решения, прямая ссылка будет выглядеть так: https://site.domaim.com/0/dev_old
В старом виде конфигурации пакет выгружается без проблем.

Показать все комментарии

Организационная структура компании, может быть 3-4 уровня в глубину и название процессов могут быть, от 2-3 слов и больше.

 

А левое боковое меню, где она отображается "Все процессы", 300 px в ширину. 

 

Все остальное обрезается. 

 

1) Либо автоматически подгоняйте размер меню, от разрешения экрана или от уровня вложенности. 

2) Либо дайте возможность ресайзить этот блок. 

3) Либо сделайте отельную страницу, где можно будет полностью вывести всю информацию и структурировать все элементы и категории. 

 

1 комментарий

Добрый вечер,

 

Зарегистрировали Ваше пожелание на ответственную команду разработку.

Показать все комментарии

Нужна возможность копировать BPMN-элементы из  одного процесса в другой. 

Сейчас, можно сделать экспорт и импорт процесса и затереть то что уже было сделано, но просто скопировать несколько элементов из одного процесса в другой нельзя.

 

Это было бы удобно, когда у нас есть 2-3 больших процесса и нам надо взять от туда какие то части, в новый процесс. 

2 комментария

Добрый вечер,

Зарегистрировали Ваше пожелание на ответственную команду разработку.

Идея, безусловно, хороша, но принцип разработки в нотации BPM завязан как раз на том, чтобы таких больших процессов не было. Старайтесь объединять копируемые элементы в подпроцесс и использовать его там, где нужно. Так и проще, и читаемее, и быстрее

Показать все комментарии

Можно ли сделать выбор цвета у bpmn-элементов, хотя бы из 10 вариантов. 

Это очень удобно, когда нужно отметить разные пути/роли/логику в процессе. 

1 комментарий

Добрый день, Александр!

Зарегистрировали Ваше пожелание на ответственную команду для реализации в будущих релизах.

Показать все комментарии

Добрый день, подскажите, пожалуйста, как решить такую проблему. У нас имеется несколько бизнес-процессов, в которых совпадают начальные сигналы (сигнал срабатывает при добавлении записи в таблицу).
После обработки сигнала, в бизнес-процессах стоит блок чтение данных из таблицы, в которую добавилась запись. И периодически возникают ситуации, когда чтение данных работает в одном процессе, а в других - чтение данных возвращает, что нет такой записи.
Хотя id добавляемой записи передается во все бизнес-процессы по сигналу.
Я пробовала убрать блок чтение записи, и после срабатывания сигнала, у меня вызывался скрипт, где я делала селект по id добавляемой записи, и селект возвращается пустой.
Такой проблемы не наблюдается, если сигнал на добавление записи используется только в одном бизнес-процессе.

Нравится

7 комментариев

Ну, здесь очевидным кажется свести все процессы в один, а дальше запускать существующие процессы как подпроцессы.

Сидоров Александр Валерьевич, спасибо за ответ. Дело в том, что эти бизнес-процессы очень объемные и не совпадают по смыслу. Хотелось бы их разграничить

Татьяна,

Ну так у вас и получится - пришел сигнал, после чего запустилось N параллельных и последовательных подпроцессов. Т.е. будет один высокоуровневый процесс со стартовым сигналом и списком запускаемых процессов, а большие процессы вы запускаете из него.

Александр,

да, я вас поняла. У нас каждый бизнес-процесс является объединением множества событий. Пример во вложении. Если использовать ваше решение, то необходимо разделить бизнес-процесс на части, чего мы хотим избежать. Возможно, я что-то неправильно поняла

Татьяна,

Понял. Тогда дальше сказать тяжело - надо смотреть на совокупность процессов в целом. Но вообще в любой разработке дробление на более мелкие независимые части является хорошей практикой) Попробуйте обратиться к своему CSM менеджеру, может быть что-нибудь хорошее подскажет, увидев ваши процессы целиком.

Александр,

Спасибо большое за ответ, будем думать

Татьяна, возможно даже лучше будет обратится не к CSM, а сразу в техническую поддержку Terrasoft.

Показать все комментарии

Суть такова, при добавлении целочисленного поля и выставления флажка "Обязательно" когда хочешь добавить запись 0 не считается как значение и просит ввести другое.

Нравится

1 комментарий

Арсений, здравствуйте!

Описанное Вами поведение не является ошибкой и соответствует базовой логике, которая присуща всем полям.
Если поле имеет свойство "Обязательно для заполнения" и тип поля - Число или Дробное число, то значение 0 или 0,00 -  это пустое значение, то есть поле не заполнено. Таким образом, когда  Вы пытаетесь сохранить карточку  с 0,00 в числовом поле со свойством обязательности заполнения, система выдает сообщение, что в поле необходимо указать значение.
Значения 0 или 0,00 является пустым значение, они отображаются в пустых полях для того, чтобы визуально пользователи понимали формат поля.
Рекомендуем снять обязательность заполнения с необходимого поля для возможности сохранять карточку с нулевым значением в поле.

Со своей стороны я транслирую полученную от Вас информацию на команду разработчиков для рассмотрения возможность изменения логики обязательности заполнения числовых полей.

Показать все комментарии

Можно ли отобрать записи в esq запросе на js с помощью фильтра по количеству записей на детали?
Вопрос получится это сделать без лишней вложенности к примеру с помощью механизма построения пути к колонкам или нет7
В бп в фильтре можно указать, объект.деталь.количество , но как это будет выглядеть оптимально с помощью кода не ясно
единственные идеи это городить вложенные запросы

Нравится

1 комментарий

Нет, просто по пути к колонке построить данный фильтр не выйдет, в любом случае нужно будет строить подзапрос на количество.

Вы можете посмотреть какой запрос генерируется при установке такой фильтрации в разделе, к серверу уходит POST запрос SelectQuery у которого в теле передаются все фильтры.

Пример фильтра в разделе:

 

Уходящий запрос:

{
  "rootSchemaName": "Account",
  "operationType": 0,
  "includeProcessExecutionData": true,
  "filters": {
    "items": {
      "8844d1b0-9ad8-410c-8c28-5a2f0a1c6ae3": {
        "items": {
          "CustomFilters": {
            "items": {
              "06f533f8-2b58-4ea3-8818-2a27d0c7e196": {
                "filterType": 1,
                "comparisonType": 7,
                "isEnabled": true,
                "trimDateTimeParameterToDate": false,
                "leftExpression": {
                  "expressionType": 3,
                  "functionType": 2,
                  "aggregationType": 1,
                  "columnPath": "[Contact:Account].Id",
                  "subFilters": {
                    "items": {},
                    "logicalOperation": 0,
                    "isEnabled": true,
                    "filterType": 6,
                    "rootSchemaName": "Contact"
                  }
                },
                "rightExpression": {
                  "expressionType": 2,
                  "parameter": {
                    "dataValueType": 4,
                    "value": 0
                  }
                },
                "subFilters": {
                  "items": {},
                  "logicalOperation": 0,
                  "isEnabled": true,
                  "filterType": 6,
                  "rootSchemaName": "Contact"
                }
              }
            },
            "logicalOperation": 0,
            "isEnabled": true,
            "filterType": 6,
            "rootSchemaName": "Account"
          }
        },
        "logicalOperation": 0,
        "isEnabled": true,
        "filterType": 6
      }
    },
    "logicalOperation": 0,
    "isEnabled": true,
    "filterType": 6
  },
  "columns": {
    "items": {
      "Id": {
        "caption": "",
        "orderDirection": 0,
        "orderPosition": -1,
        "isVisible": true,
        "expression": {
          "expressionType": 0,
          "columnPath": "Id"
        }
      },
      "Name": {
        "caption": "",
        "orderDirection": 0,
        "orderPosition": -1,
        "isVisible": true,
        "expression": {
          "expressionType": 0,
          "columnPath": "Name"
        }
      },
      "AccountLogo": {
        "caption": "",
        "orderDirection": 0,
        "orderPosition": -1,
        "isVisible": true,
        "expression": {
          "expressionType": 0,
          "columnPath": "AccountLogo"
        }
      },
      "PrimaryContact": {
        "caption": "",
        "orderDirection": 0,
        "orderPosition": -1,
        "isVisible": true,
        "expression": {
          "expressionType": 0,
          "columnPath": "PrimaryContact"
        }
      },
      "Phone": {
        "caption": "Основной телефон",
        "orderDirection": 0,
        "orderPosition": -1,
        "isVisible": true,
        "expression": {
          "expressionType": 0,
          "columnPath": "Phone"
        }
      },
      "Type": {
        "caption": "Тип",
        "orderDirection": 0,
        "orderPosition": -1,
        "isVisible": true,
        "expression": {
          "expressionType": 0,
          "columnPath": "Type"
        }
      },
      "AccountCategory": {
        "caption": "Категория",
        "orderDirection": 0,
        "orderPosition": -1,
        "isVisible": true,
        "expression": {
          "expressionType": 0,
          "columnPath": "AccountCategory"
        }
      },
      "EntryPointsCount": {
        "caption": "",
        "orderDirection": 0,
        "orderPosition": -1,
        "isVisible": true,
        "expression": {
          "expressionType": 3,
          "aggregationType": 1,
          "columnPath": "[EntryPoint:EntityId].Id",
          "subFilters": {
            "items": {
              "1afa5cfc-31e0-4a27-ad78-bac1de602da6": {
                "filterType": 1,
                "comparisonType": 3,
                "isEnabled": true,
                "trimDateTimeParameterToDate": false,
                "leftExpression": {
                  "expressionType": 0,
                  "columnPath": "IsActive"
                },
                "rightExpression": {
                  "expressionType": 2,
                  "parameter": {
                    "dataValueType": 1,
                    "value": true
                  }
                }
              }
            },
            "logicalOperation": 0,
            "isEnabled": true,
            "filterType": 6
          }
        }
      }
    }
  },
  "isDistinct": false,
  "rowCount": 30,
  "rowsOffset": 0,
  "isPageable": true,
  "allColumns": false,
  "useLocalization": true,
  "useRecordDeactivation": false,
  "serverESQCacheParameters": {
    "cacheLevel": 0,
    "cacheGroup": "",
    "cacheItemName": ""
  },
  "queryOptimize": false,
  "useMetrics": false,
  "adminUnitRoleSources": 0,
  "querySource": 0,
  "ignoreDisplayValues": false,
  "conditionalValues": null,
  "isHierarchical": false
}

 

Показать все комментарии

Доброго времени суток.

Тестирую возможности вашего инструмента, пытаюсь настроить интеграцию фронта через прокси с Creatio.

 

Научился создавать новый бизнес процесс и передавать данные, но не могу понять как им можно управлять через интеграцию.

 

Есть вот такой процесс заказа:

Мне нужно, чтобы после создания заказа, с ним можно было оперировать, например, завершить его.

 

Пытался отправлять сигнал похожим на создание процесса способом:

Но вместо schemaUId мне нужно передавать uid процесса, запущенного ранее.

По документации, не могу найти под каким параметром можно передать uid процесса, а не uid схемы процеса.

 

Конечно есть альтернативный вариант, сделать ожидание сигнала от другого процесса и при необходимости взаимодействия с процессом заказа, вызывать сторонний процесс, который просто вызовет событие в процессе заказа. Но мне такой вариант не нравится.

 

Подскажите, существует ли возможность активировать сигнал в определенном запущенном процессе с передачей данных?

Нравится

3 комментария
Лучший ответ

>Если функционал по вызову События или отправки Сигнала с передачей данных в БП через ProcessEngineService.svc отсутствует, то этот ответ меня тоже устроит.
К сожалению с таким на практике не встречался, подсказать не могу.

 

Вариант решения делать на каждой действие простой процесс (подпроцесс).

Например процесс добавления товара в заказ, у него будут входящие параметры: id заказа, id товара, булевый параметр. Запускаем этот процесс через ProcessEngineService.

На мой взгляд для текущей задачи больше подойдет odata https://academy.terrasoft.ru/docs/7-17/developer/integrations_and_api/d…

Для обобщения, меня в данном случае интересует выработка бест практайс и определение возможностей сервиса, а не решение конкретной задачи.

 

Интеграцию с odata я уже реализовал на прокси и умею через нее добавлять товары в заказ. Но хотелось бы больше контроля над бизнес процессом, от этого и вопрос.

Например мне нужно при изменении заказа уведомить склад о реформировании заказа. В таком случае я вижу 3 варианта:

1. OData. На прокси при добавлении заказа отсылать email (плохо, мало контроля и не очевидно в рамках БП).

2. OData + BPMN. В самом БП создать некую подписку на добавление товара в данный заказ и сделать отправку email (уже лучше, но например не при каждом изменении заказа мне нужно отправлять email, в таком случае появятся кастыли вроде сохранения промежуточных булевых переменных в данных, для определения вида изменения заказа).

3. BPMN. Чистая реализация на вызове отдельного события в процессе с передачей данных. Это позволит добавлять любой товар по простому сигналу и получить контроль над процессом, передавать дополнительно булевые переменные для модификации поведения БП в рантайме.

 

3-ий вариант для меня сейчас самый приоритетный.

Если функционал по вызову События или отправки Сигнала с передачей данных в БП через ProcessEngineService.svc отсутствует, то этот ответ меня тоже устроит.

>Если функционал по вызову События или отправки Сигнала с передачей данных в БП через ProcessEngineService.svc отсутствует, то этот ответ меня тоже устроит.
К сожалению с таким на практике не встречался, подсказать не могу.

 

Вариант решения делать на каждой действие простой процесс (подпроцесс).

Например процесс добавления товара в заказ, у него будут входящие параметры: id заказа, id товара, булевый параметр. Запускаем этот процесс через ProcessEngineService.

Показать все комментарии

Я получаю изображение с сайта ввиде массив байт, как я понял изображения хранятся в base64 поэтому конвертирую ее
Но вот как именно загрузить ее я не понимаю
В академии написано что надо грузить через таблицу sysImage , но где привязка к объекту, в который я хочу загрузить? 
Или мне надо загрузить изображение в эту таблицу, далее получить ее uri  или data и так грузить?
Может где то в стандартных схемах такое видели 

Нравится

7 комментариев
Лучший ответ

Dima Avdoshin,

Грузим просто создав запись в  C# в таблице SysImage.

 

Вот подобный пример, не про картинку, тут главное SetStreamValue и работа с байтовыми данными.

 

Вот пример создания записи на детали Файлы и ссылки. Вам необходимо получить поток с файлом и записать его в поле Data.

Stream stream = new MemoryStream(byteArray);
var size = Convert.ToInt32(stream.Length);

var insertActivityFile = new Terrasoft.Configuration.ActivityFile(context.UserConnection);
        insertActivityFile.Id = Guid.NewGuid();
        insertActivityFile.SetDefColumnValues();
        insertActivityFile.Name = "Name.txt";
        insertActivityFile.SetStreamValue("Data", stream);
        insertActivityFile.Size = size;
        insertActivityFile.TypeId = new Guid("529BC2F8-0EE0-DF11-971B-001D60E938C6");
        insertActivityFile.Version = 1;
        insertActivityFile.ActivityId = activityId;
        insertActivityFile.Save();

Куда вы их грузить собрались, какая бизнес задача?

Полозюков Евгений Петрович,

необходимо с сайта получить превью изображения, далее ее отобразить в соответствующем разделе

В карточке контрагента есть вверху слева элемент с изображением. Вам нужен упрощенный вариант, смотрите как это реализовано в карточке. Изображение хранится в SysImage, поле в контрагенте AccountLogo ссылается на SysImage. В SysImage данные хранятся в виде байт, без base64, поле Data и PreviewData.

В AccountPageV2 изучите элемент "name": "Photo", "parentName": "AccountPhotoContainer".

 

Вот еще статья https://academy.terrasoft.ru/docs/developer/elements_and_components/bas…
                        

Полозюков Евгений Петрович,

Понял, скорее всего как, мы обращаемся в таблицу sysImage , далее грузим изображение и получаем guid новосозданного изображения , который и грузим куда нам необходимо так ?
Примерно так вот
 

private static Guid AddImage(string ImgUrl)
		{
			UserConnection userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];
			Guid newId = Guid.NewGuid();
			EntitySchema schemaImage = userConnection.EntitySchemaManager.GetInstanceByName("SysImage");
			Entity addImage = schemaImage.CreateEntity(userConnection);
			addImage.SetColumnValue("Id", newId.ToString());
			//addImage.SetColumnValue("Name", "lol");
			addImage.SetColumnValue("Data", ImgToByte(ImgUrl));
			addImage.Save();
			return newId;
		}

 

Dima Avdoshin,

Грузим просто создав запись в  C# в таблице SysImage.

 

Вот подобный пример, не про картинку, тут главное SetStreamValue и работа с байтовыми данными.

 

Вот пример создания записи на детали Файлы и ссылки. Вам необходимо получить поток с файлом и записать его в поле Data.

Stream stream = new MemoryStream(byteArray);
var size = Convert.ToInt32(stream.Length);

var insertActivityFile = new Terrasoft.Configuration.ActivityFile(context.UserConnection);
        insertActivityFile.Id = Guid.NewGuid();
        insertActivityFile.SetDefColumnValues();
        insertActivityFile.Name = "Name.txt";
        insertActivityFile.SetStreamValue("Data", stream);
        insertActivityFile.Size = size;
        insertActivityFile.TypeId = new Guid("529BC2F8-0EE0-DF11-971B-001D60E938C6");
        insertActivityFile.Version = 1;
        insertActivityFile.ActivityId = activityId;
        insertActivityFile.Save();

Полозюков Евгений Петрович,

да , щас сделаю спасибо

Полозюков Евгений Петрович,

да все помогло спасибо
на будущее для тех кто будет искать ответ пример подобного реализован в 

ProfileImageLoader пакета OmnichannelMessaging
правда нашел я его уже после того как сделал свою реализацию, но смысл тот же что и описали выше, создаем запись , а дальше возвращаем ее айди вот впринципе и все

Показать все комментарии

Добрый день.

Отправили приглашение для совместной работы над бизнес-процессами в Studio Creatio Free, но проект недоступен.

 

Внизу всплывает окно:

"Вы уже состоите в этой организации или это приглашение уже использовано"

 

Почта корпоративная, приглашение использовать никто кроме меня не мог.

Просьба помочь

Нравится

3 комментария

Юрий, добрій день. Подскажите, что вы имеете ввиду под "проект недоступен"? Можно ли переключиться на нужную организацию в правом верхнем углу страницы Studio Free, рядом с кнопкой профиля пользователя?

Добрый день, Александр.
Нет, переключится нельзя, проекта там нет.

У коллег моих получилось перейти по ссылке и появилась организация.

Юрий, возможно после перехода по ссылке приглашения, вы вошли в studio free под другим email? Попросите, пожалуйста, отправить своих коллег отправить приглашение ещё раз.

Показать все комментарии