Есть задача, в которой нужно будет сериализовывать и десериализовывать entity или коллекцию. Стандартное обращение к JsonConvert.SerializeObject не работает сходу, но можно настроить с помощью пользовательских объектов, чтобы отбрасывались лишние свойства. Но DeserializeObject сделать так и не получилось. В доках нашёл функционал в ядре системы, предназначенный для этой задачи. Получился примерно такой код:

        public virtual string Serialize(Entity entity)
        {
            using (var textWriter = new StringWriter())
            using (var writer = GetDataWriter(textWriter))
            {
                entity.WriteData(writer);
                return textWriter.ToString();
            }
        }
 
        public virtual Entity Deserialize(string schemaName, string stringValue)
        {
            var manager = UserConnection.EntitySchemaManager;
            var entitySchema = manager.GetInstanceByName(schemaName);
            var entity = entitySchema.CreateEntity(UserConnection);
            using (var textReader = new StringReader(stringValue))
            using (var reader = GetReader(textReader))
            {
                entity.ReadData(reader);
                return entity;
            }
        }
 
        protected override DataWriter GetDataWriter(TextWriter textWriter)
        {
            var settings = new JsonDataWriterSettings()
            {
                WriteDefValues = false,
                QuoteName = false
            };
            var writer = new JsonDataWriter(settings, textWriter);
            return writer;
        }
 
        protected override DataReader GetReader(TextReader textReader)
        {
            var reader = new JsonDataReader(textReader);
            return reader;
        }

Аналогичный код для EntityCollection. 

Сериализация в json таким образом работает. Но немного странно. В результирующей json-строке есть открывающая фигурная скобка, но нет закрывающей. 

Десериализация в json не работает вообще. ReadData отрабатывает без исключений, но на выходе получается пустой экземпляр без заполненных колонок. Аналогичная проблема с EntityCollection. Только сама коллекция пустая.

Сериализация в xml оказалась вообще неработоспособной. 

У кого-то получалось заставить этот функционал работать? Или может кто нашёл какой-то другой вариант решения задачи?

Нравится

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

Насколько понимаю, для Entity не используют DeserializeObject, в коде конфигурации его используют для фильтров и подобного. Например, для работы с данными в пакете есть свои функции в PackageSchemaDataUtilities: Deserialize и Serialize. Примеры из тестов, проверяющих работу с ними:

   EntitySchema schema = CreateSchema("TestSchema", userConnection.EntitySchemaManager);
   AddIntegerColumn(schema, "ColumnInt");
   AddTextColumn(schema, "ColumnText");
   AddDateTimeColumn(schema, "ColumnDateTime");
   PackageSchemaDataDescriptor dataDescriptor = CreateTestPackageSchemaData(schema.UId, schema.Name);
   foreach (var column in schema.Columns) {
    dataDescriptor.AddColumn(new PackageSchemaDataColumnDescriptor(column.UId, false));
   }
   var testDateTime2012 = DateTime.Parse("2012-01-01 12:00");
   TimeSpan testUtcOffset2012 = TimeZoneInfo.Local.GetUtcOffset(testDateTime2012);
   var testDateTime2013 = DateTime.Parse("2013-01-01 00:00");
   TimeSpan testUtcOffset2013 = TimeZoneInfo.Local.GetUtcOffset(testDateTime2013);
   string columnIdUId = schema.Columns.GetByName("Id").UId.ToString();
   string columnIntUId = schema.Columns.GetByName("ColumnInt").UId.ToString();
   string columnTextUId = schema.Columns.GetByName("ColumnText").UId.ToString();
   string columnDateTimeUId = schema.Columns.GetByName("ColumnDateTime").UId.ToString();
   string data = @"{
    ""PackageData"": [
     {
      ""Row"": [
       {
        ""SchemaColumnUId"": """ + columnIdUId + @""",
        ""Value"": ""f16d852d-d896-4792-99ff-f36fdd0ab2e4""
       },
       {
        ""SchemaColumnUId"": """ + columnIntUId + @""",
        ""Value"": 1
       },
       {
        ""SchemaColumnUId"": """ + columnTextUId + @""",
        ""Value"": ""test 1""
       },
       {
        ""SchemaColumnUId"": """ + columnDateTimeUId + @""",
        ""Value"": ""\/" + testDateTime2012.ToJsonFormat(testUtcOffset2012) + @"\/""
       }
      ]
     },
     {
      ""Row"": [
       {
        ""SchemaColumnUId"": """ + columnIdUId + @""",
        ""Value"": ""8b022a83-796a-426c-8337-b6fd40525a49""
       },
       {
        ""SchemaColumnUId"": """ + columnIntUId + @""",
        ""Value"": 2
       },
       {
        ""SchemaColumnUId"": """ + columnTextUId + @""",
        ""Value"": ""test 2""
       },
       {
        ""SchemaColumnUId"": """ + columnDateTimeUId + @""",
        ""Value"": ""\/" + testDateTime2013.ToJsonFormat(testUtcOffset2013) + @"\/""
       }
      ]
     }
    ]
   }";
   var dataUtilities = new PackageSchemaDataUtilities(userConnection);
   ICollection<Entity> entities = dataUtilities.Deserialize(data.ToStream(), schema);

И обратное:

 EntitySchema schema = CreateSchema("TestSchema", userConnection.EntitySchemaManager, false);
 EntitySchemaColumn columnText = AddTextColumn(schema, "ColumnText");
 ICollection<Entity> entities = new Collection<Entity>();
 var entity = schema.CreateEntity(userConnection);
 entity.SetColumnValue(columnText, "Column Text Value");
 entities.Add(entity);
 string data;
 var dataUtilities = new PackageSchemaDataUtilities(userConnection);
 dataUtilities.SerializeColumnName = true;
 using (var dataStream = new MemoryStream()) {
 	dataUtilities.Serialize(dataStream, entities, schema.Columns.Select(c => c.UId));
 	dataStream.Position = 0;
 	data = StreamUtilities.GetStreamContent(dataStream);
 }

Чтобы работать с ними, используется:

using Terrasoft.Core.Packages;

 

Насколько понимаю, для Entity не используют DeserializeObject, в коде конфигурации его используют для фильтров и подобного. Например, для работы с данными в пакете есть свои функции в PackageSchemaDataUtilities: Deserialize и Serialize. Примеры из тестов, проверяющих работу с ними:

   EntitySchema schema = CreateSchema("TestSchema", userConnection.EntitySchemaManager);
   AddIntegerColumn(schema, "ColumnInt");
   AddTextColumn(schema, "ColumnText");
   AddDateTimeColumn(schema, "ColumnDateTime");
   PackageSchemaDataDescriptor dataDescriptor = CreateTestPackageSchemaData(schema.UId, schema.Name);
   foreach (var column in schema.Columns) {
    dataDescriptor.AddColumn(new PackageSchemaDataColumnDescriptor(column.UId, false));
   }
   var testDateTime2012 = DateTime.Parse("2012-01-01 12:00");
   TimeSpan testUtcOffset2012 = TimeZoneInfo.Local.GetUtcOffset(testDateTime2012);
   var testDateTime2013 = DateTime.Parse("2013-01-01 00:00");
   TimeSpan testUtcOffset2013 = TimeZoneInfo.Local.GetUtcOffset(testDateTime2013);
   string columnIdUId = schema.Columns.GetByName("Id").UId.ToString();
   string columnIntUId = schema.Columns.GetByName("ColumnInt").UId.ToString();
   string columnTextUId = schema.Columns.GetByName("ColumnText").UId.ToString();
   string columnDateTimeUId = schema.Columns.GetByName("ColumnDateTime").UId.ToString();
   string data = @"{
    ""PackageData"": [
     {
      ""Row"": [
       {
        ""SchemaColumnUId"": """ + columnIdUId + @""",
        ""Value"": ""f16d852d-d896-4792-99ff-f36fdd0ab2e4""
       },
       {
        ""SchemaColumnUId"": """ + columnIntUId + @""",
        ""Value"": 1
       },
       {
        ""SchemaColumnUId"": """ + columnTextUId + @""",
        ""Value"": ""test 1""
       },
       {
        ""SchemaColumnUId"": """ + columnDateTimeUId + @""",
        ""Value"": ""\/" + testDateTime2012.ToJsonFormat(testUtcOffset2012) + @"\/""
       }
      ]
     },
     {
      ""Row"": [
       {
        ""SchemaColumnUId"": """ + columnIdUId + @""",
        ""Value"": ""8b022a83-796a-426c-8337-b6fd40525a49""
       },
       {
        ""SchemaColumnUId"": """ + columnIntUId + @""",
        ""Value"": 2
       },
       {
        ""SchemaColumnUId"": """ + columnTextUId + @""",
        ""Value"": ""test 2""
       },
       {
        ""SchemaColumnUId"": """ + columnDateTimeUId + @""",
        ""Value"": ""\/" + testDateTime2013.ToJsonFormat(testUtcOffset2013) + @"\/""
       }
      ]
     }
    ]
   }";
   var dataUtilities = new PackageSchemaDataUtilities(userConnection);
   ICollection<Entity> entities = dataUtilities.Deserialize(data.ToStream(), schema);

И обратное:

 EntitySchema schema = CreateSchema("TestSchema", userConnection.EntitySchemaManager, false);
 EntitySchemaColumn columnText = AddTextColumn(schema, "ColumnText");
 ICollection<Entity> entities = new Collection<Entity>();
 var entity = schema.CreateEntity(userConnection);
 entity.SetColumnValue(columnText, "Column Text Value");
 entities.Add(entity);
 string data;
 var dataUtilities = new PackageSchemaDataUtilities(userConnection);
 dataUtilities.SerializeColumnName = true;
 using (var dataStream = new MemoryStream()) {
 	dataUtilities.Serialize(dataStream, entities, schema.Columns.Select(c => c.UId));
 	dataStream.Position = 0;
 	data = StreamUtilities.GetStreamContent(dataStream);
 }

Чтобы работать с ними, используется:

using Terrasoft.Core.Packages;

 

Зверев Александр,

Благодарю! Такой способ оказался рабочим. 

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

Добрый день, коллеги!

 

Ситуация следующая: на продуктивной среде имеются БП по эскалации по реакции и разрешению, необходимо внести доработки (к имеющимся элементам добавить несколько условных потоков, не суть). По пробам в тестовой среде вижу два способа:

 

1) Остановить процесс, внести изменения, запустить процесс - но в таком случае при остановке процесса будут сбиты процессы эскалации по текущим обращениям.

 

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

 

Как будет правильнее вносить изменения в БП на продуктивной среде?

Нравится

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

Руслан, это два разных вопроса:

 

1. В системе есть версионность процессов. Если вносятся изменения, старые запущенные экземпляры процессов доработают в старой версии. А новые будут уже с учётом исправлений.

 

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

 

Не очень понятно, как у Вас процессы постоянно работают, что даже на 3 минуты не прерываются. Обычно выполнение логики в процессе доходит до какого-то действия пользователя или ожидает момента прихода сообщения, сигнала или срабатывания таймера. И в это время процесс не производит вычислений, а ждёт.

Руслан, это два разных вопроса:

 

1. В системе есть версионность процессов. Если вносятся изменения, старые запущенные экземпляры процессов доработают в старой версии. А новые будут уже с учётом исправлений.

 

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

 

Не очень понятно, как у Вас процессы постоянно работают, что даже на 3 минуты не прерываются. Обычно выполнение логики в процессе доходит до какого-то действия пользователя или ожидает момента прихода сообщения, сигнала или срабатывания таймера. И в это время процесс не производит вычислений, а ждёт.

Зверев Александр,  в данный момент в продуктивной системе 1485 обращений по которым эскалация либо уже идёт, либо теоретически может начаться. Поэтому сложно предугадать момент когда БП точно не будут отрабатывать. По 1-му пункту не знал, спасибо. Буду делать в нерабочее время с сохранением новой версии процессов.

В любом случае сервер когда-то останавливается на некоторое время: для обновления версии системы, каких-то работ на серверах IIS и БД и др. Если есть доступ к базе, увидеть, что происходит в системе на сервере, можно при помощи запросов на свежие записи в таблицах SysUserSession, SysProcessLog и SysProcessElementLog.

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

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

На сайте клиента выгружается некорректное количество данных из представлении Итогов в разделе Звонки.

 

В разделе настроила Итоги "Отчет по звонкам" с фильтрации: 

Дата создания = Текущий месяц

Длительность > 0

В связи с разделом, указала ID. 

Изображение удалено.

При экспорте отчета в Excel получаю запись в количестве 5192.

 

В разделе Звонки с этими же условиями получаю записи в количестве  12 113.  

 

А Через Действие.Экспорт в Excel получаю это же количество - 12 113.

В разделе в рамках проекта адаптацию не делали. 

Изображение удалено.

Если кто-то сталкивался проблемой такого рода некорректности данных, очень прошу поделиться решением

Нравится

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

 

Айгерим, попробуйте сравнить список за какой-то небольшой период (например, час, а не месяц) и понять, каких звонков нет в выборке, в чём их отличия. Возможно, дело в правах доступа на записи или каком-то дополнительном условии. Если есть доступ к базе, можно отловить профайлером запрос.

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

Есть статья о настройке итогов. Как поле отображать кол-во записей установить неизменяемым для пользователей ?

Изображение удалено.

После установки этого параметра во время показа детали с колонками рисуется отображение итоговой информации с крестиком отмены. Надо запретить пользователям логику "закрыть на крестик" для всех разделов.  Такое поведение описано в схеме Summary, входит в пакет NUI. Верно понимаю что нет решения?

Нравится

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

Скорее, в схеме SummaryModuleV2:

{
	className: "Terrasoft.Button",
	style: Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
	imageConfig: resources.localizableImages.ImageDeleteButton,
	classes: {
		wrapperClass: ["summary-delete-button-wrapperEl"],
		imageClass: ["summary-delete-button-image-size"]
	},
	click: {
		bindTo: "deleteItem"
	},
	markerValue: {
		bindTo: "columnCaption"
	}
}

Но опять же, модуль со всеми особенностями по поводу переопределения.

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

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

Вопрос по работе с элементом "Задание-сценарий".



Имеем бизнес-процесс, который срабатывает по сигналу добавления текстовой записи. Как только добавляется запись, процесс считывает текст записи и формулой добавляет этот текст в некий параметр "UsrInput". Далее сценарий регулярным выражением находит текст в кавычках и отправляет этот текст в другой параметр "UsrOutput". После чего процесс дальше идет по цепочке из стандартных элементов БП.

Проблема в том, что во время обработки процесса почему-то  в журнале процессов появляется ошибка:

System.NotSupportedException: Match

Метод System.Text.RegularExpressions я в процесс добавил.

Помогите понять, пожалуйста, с чем может быть это связано?

 

Пример текста:

Диалогу присвоена категория "Тест"

Код сценария:

string message = Get<string>("UsrInput");
string pattern = "\"(.*?)\"";
Match result = Regex.Match(message, pattern);
Set("UsrOutput", result);
return true;

 

Прикрепленные файлы

Нравится

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

Через тот же https://repl.it/repls/RegalHarshDeclarations все срабатывает без ошибок, а внутри процесса никак.

Разобрался. Надо было в string превратить result

..
string result1 = result.Value;
Set("UsrOutput", result1);
return true;

 

Спасибо за упоминание сайта https://repl.it, не знал, что такой есть, пригодился.

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

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

Вопрос по бизнес-правилам.

Подскажите, как можно в правиле задать условие для действия фильтра значений в поле?

 

Имеется единый справочник тематик, из которого сотрудники выбирают необходимую по окончании общения в чатах и звонках.

Для чатов и звонков созданы отдельные разделы. В каждом разделе есть карточки чатов и звонков. В каждой карточке создана деталь с тематиками, что ссылается на справочник в виде выпадающего списка тематик.

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

Прикрепленные файлы

Нравится

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

Николай Ходаковский,

вы для чата указываете значение по умолчанию Чат. для звонка - звонок. Еще раз - на страницы для объектов чат и звонок вы добавляете справочное поле Тип(тот же самый справочник, что вы создали в справочнике Тематики) и для каждого раздела там устанавливаете свое значение по умолчанию. Значение по умолчанию вам нужно будет установить через конфигуратор в свойствах соответствующих объектов (чат и звонок). Понятно объяснил или где-то надо углубится?

Я может быть неправильно вас понял, но по моему ваша задача аналогична фильтру городов по странам. Т.е. в справочнике Тематики создаете поле Тип(Звонок, Чат) и в ваших страницах раздела помещаете этот справочник Тип(можно на страницу редактирования не выводить а просто добавить в объект с соответствующими значениями по умолчанию). Ну и дальше делаете для каждого раздела свое бизнес правило где фильтр справочника строится по значению Тип у раздела.

Сидоров Александр Валерьевич, спасибо за ответ. Значение по умолчанию — это интересная мысль.

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

Получается следующее, если я добавляю к своему справочнику Тип, то его надо будет всегда выбирать, чтобы подтянуть правильный список со справочника. Как можно сделать, чтобы система сама устанавливала нужный Тип при открытии карточки чата, например? Где задается это умолчание?

Николай Ходаковский,

вы для чата указываете значение по умолчанию Чат. для звонка - звонок. Еще раз - на страницы для объектов чат и звонок вы добавляете справочное поле Тип(тот же самый справочник, что вы создали в справочнике Тематики) и для каждого раздела там устанавливаете свое значение по умолчанию. Значение по умолчанию вам нужно будет установить через конфигуратор в свойствах соответствующих объектов (чат и звонок). Понятно объяснил или где-то надо углубится?

Сидоров Александр Валерьевич, уловил вашу мысль.

Все получилось, спасибо большое!

 

Решил вместо типа всё-таки использовать чекбоксы.

По вашему совету в объектах чатов и звонков создал чекбоксы, где выставил установил по умолчанию "true". Такие же логические чекбоксы сделал для справочника тематик (отдельно для чатов и звонков), где также по для нужных записей выставил 'true'.

Далее к детали тематик привязал правило по этим чекбоксам :)

 

Рад, что смог помочь! Велком)

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

Добрый день.

Правило которое должно сработать если в поле UsrLookupBR выбрано определённое значение. Только вот оно и игнорирует условие срабатывания и просто скрывает навсегда. 

   

Terrasoft.sdk.Model.addBusinessRule("Activity", {

    ruleType: Terrasoft.RuleTypes.Visibility,

    conditionalColumns: [

        {name: "UsrLookupBR", value:"E818A7C2-F351-41A6-A376-7F42762883F2"}

    ],

    triggeredByColumns: ["UsrLookupBR"],

    dependentColumnNames: ["UsrLookupDostup", "Owner"]

});

 

А вот если указать на предмет заполненности  поля    {name: "UsrLookupBR", value: null}, то правило чудесным образом срабатывает. 

Буду очень рад помощи. Заранее спасибо.

Нравится

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

Скорее всего, неправильно сделали сравнение с GUID в фильтре. Если посмотреть похожие случаи, там так:

Terrasoft.sdk.Model.addBusinessRule("KnowledgeBaseFile", {
	ruleType: Terrasoft.RuleTypes.Visibility,
	name: "KnowledgeBaseFileVisibleFileRule",
	conditionalColumns: [
		{name: "Type", value: Terrasoft.Configuration.FileTypeGUID.File}
	],
	events: [Terrasoft.BusinessRuleEvents.Load],
	dependentColumnNames: ["Data"]
});
Terrasoft.sdk.Model.addBusinessRule("KnowledgeBaseFile", {
	ruleType: Terrasoft.RuleTypes.Visibility,
	name: "KnowledgeBaseFileVisibleLinkRule",
	conditionalColumns: [
		{name: "Type", value: Terrasoft.Configuration.FileTypeGUID.Link}
	],
	events: [Terrasoft.BusinessRuleEvents.Load],
	dependentColumnNames: ["Name"]
});

Тут File и Link — две константы, заданные в MobileConstants:

Terrasoft.Configuration.FileTypeGUID = {
	File: "529bc2f8-0ee0-df11-971b-001d60e938c6",
	Link: "539bc2f8-0ee0-df11-971b-001d60e938c6",
	EntityLink: "549bc2f8-0ee0-df11-971b-001d60e938c6"
};

А, может, дело просто в верхнем регистре букв у Вас в константах?

Спасибо большое. Дело было в регистре.

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

Добрый день, вопрос очевидно к DevLabs, по приложению

Advanced excel reports for Creatio. Платформа разумеется on-site.

В расписании по автоматической выгрузке отчёта указываю сетевой диск компании, как путь для выгрузки, но при выгрузке система выдает ошибку:Изображение удалено.

С чем это может быть связано?

Нравится

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

Руслан, добрый день!

 

проверьте, пожалуйста, что у пользователя IIS, под которым запускается приложение Creatio, есть доступ к указанному сетевому диску.

Ирина Лазоренко, доступ имеется, но есть один нюанс: в данный момент приходится работать удаленно через виртуальную машину. Возможно это как-то влияет, при том в момент автогенерации отчёта я был залогинен.

Ирина Лазоренко, попробовал повторить данную операцию непосредственно с рабочего места - выдаёт такую же ошибку, при том, если указывать путь на локальный диск - ошибку о формировании не выдаёт, но в конечной папке файл отчёта не появляется. Это может быть связано с версией Creatio (7.13?)

Ирина Лазоренко, не знаю, к Вам ли вопрос, ещё при попытке задать период для фильтрации данных в отчёт, если подтянуть  последний параметр на скриншоте (до сегодня >= 7:30), то отчёт формируется пустой

Шарифуллин Руслан,

 

по доступу еще уточняю. По фильтрам выполните следующую проверку: укажите такие же фильтры в разделе и проверьте результаты. Это скорее все базовая логика работы фильтров.

Ирина Лазоренко,

 Вы правы, такие параметры фильтрации не срабатывают и в разделе

Руслан, статья о фильтрах по датам есть тут. Мне кажется, указание точного времени работает независимо от указания даты и отсеивает моменты за любую дату до 7:30, промежуток не получится.

 

Но если нужно всего за два дня, вчерашний и сегодняшний, то можно настроить два независимых фильтра, связанных по «или». Примерно так:

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

Добрый день.

 

В бизнес-процессе добавлен подпроцесс. Он запускается один раз всегда и при определенных условиях должен запускаться повторно. Первый раз выполнение проходит без ошибок. Но второй раз подпроцесс не запускается. При этом в журнале состояние подпроцесса "Выполняется", но выполнения нет, список элементов процесса пустой, диаграмма выполнения без отметок о выполнении элементов. А основной процесс стоит в состоянии "Ошибка", но на самом элементе подпроцесса ошибки нет. Описания ошибки нет.

Нравится

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

Константин, слишком мало информации. Неизвестно, какая версия (похожее было в 7.8-7.10), зависит ли от конкретного процесса и подпроцесса, или так себя ведёт с любыми. Попробуйте воспроизвести то же самое с другим процессом и подпроцессом, а также на триал-сайте последней версии, который можно завести тут. Возможно, больше получится узнать при помощи трассировки процесса (если окажется, что нужное значение параметра не передалось) или текст ошибки найдётся в логах.

Зверев Александр,

Кажется смог выделить проблему. 

В подпроцессе есть параметр "Заголовок", тип данных "Строка (250 символов)".

На входе этот параметр заполняется "текстом"+[значение другого параметра].

 

Если в этом параметре оставить только текст (без параметра), то выполнение идет без ошибок.

Подскажите где посмотреть лог процесса? 

Я имел в виду лог всех ошибок системы, возможно, что-то интересное в момент падения процесса или второго запуска подпроцесса видно в нём. Если у Вас система on site, то он падает в текстовые файлы Error.log в папке за нужную дату на том сервере, где IIS. А если в облаке, то получить можно только через поддержку.

 

Судя по скриншоту, отменённый подпроцесс выполнялся больше 2 дней, потом его Вы отменили вручную? Для подпроцесса в свойствах тоже включили трассировку?

Зверев Александр,

Кажется смог выделить проблему. 

В подпроцессе есть параметр "Заголовок", тип данных "Строка (250 символов)".

На входе этот параметр заполняется "текстом"+[значение другого параметра].

Если в этом параметре оставить только текст (без параметра), то выполнение идет без ошибок.

При добавлении любого параметра в "Заголовок" возникает ошибка.

 

В логе показывает ошибке на совсем другом элементе, хотя в диаграмме он выполняется без ошибок

 

 

 

Константин, спасибо за информацию, можно попробовать воспроизвести.

Вы в стёртом сообщении написали свою версию системы. А на более новой, той, что в демо-версиях, не пробовали скопировать схему процесса, там тоже так себя ведёт?

Если кому пригодится, получилось сделать по другому. Ранее задавал "заголовок" входящим параметром подпроцесса ("текст"+значение параметра 1), теперь "заголовок" формирую внутри подпроцесса.

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

Добрый день. В результате изучения моб. приложения. Столкнулись с рядом проблем. 

1) Можно, ли расставить сигналы таким образом?

https://i.imgur.com/nKBk78M.png.

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

https://i.imgur.com/oeQA186.png

3) Если такая модель бизнес-процесса подходит, то как избавиться от ошибок. Дело в том что бизнес процесс запускается на сайте. А дальше продолжение по сигналу через приложение. 

https://i.imgur.com/HMQYg7N.png

Первый процесс это продолжение через моб. версию. (Диаграмма выполнения: https://i.imgur.com/9ZxIBnH.png)

А второй с ошибкой это запуск через сайт. (Диаграмма выполнения: https://i.imgur.com/V2Ck5iR.png)

Нравится

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

Не совсем понимаю, что Вы хотите сделать в БП и причём тут мобильное приложение.

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

Узнать больше о том, как выполнялись элементы БП и какие в этот момент были значения параметров, можно, включив трассировку.

Да спасибо я уже понял. Дело в том что  в мобильном приложении вносятся изменения в карточку способом: просто редактированием поля(без какого-либо подтверждения оно автоматически сохраняется, in-place редактирование). По этой причине некоторые бизнес-процессы не работали. Изменил немного логику

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