Добрый день. Как создать бизнес процесс, который должен
открывать страницу новой записи в разделе и контролировать заполнены ли нужные поля в этой записи. (Без программирования). Я поняла, что нудно использовать элемент процесс "открыть страницу редактирования", но как контролировать заполнение нужных полей не понимаю.

 

Нравится

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

сделать эти поля обязательными , например

Попробуйте сделать так. Мне кажется должно сработать.

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

Добрый день. Помогите, пожалуйста!

При сохранении БП происходит бесконечная загрузка, при этом в консоли ошибки:

 

Uncaught DOMException: An attempt was made to use an object that is not, or is no longer, usable

 

user: Supervisor/7f3b869f-34f3-4f20-ab4d-7480a5fdf647
 file: http://localhost/core/c575be1671135885e206c91cbf6b363b/combined/all-com…
 line: 1201
 column: 0
 message: InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable
 date: Fri Jun 18 2021 14:29:12 GMT+0300 (Москва, стандартное время)
 stack: postMessage@http://localhost/core/c575be1671135885e206c91cbf6b363b/combined/all-com…
callParent@http://localhost/core/c575be1671135885e206c91cbf6b363b/combined/all-com…
postMessage@http://localhost/core/c575be1671135885e206c91cbf6b363b/combined/all-com…
broadcastMessage@http://localhost/core/c575be1671135885e206c91cbf6b363b/combined/all-com…
notify@http://localhost/core/c575be1671135885e206c91cbf6b363b/combined/all-com…
onItemOutdated@http://localhost/core/c575be1671135885e206c91cbf6b363b/combined/all-com…
saveProcess/<@http://localhost/core/c575be1671135885e206c91cbf6b363b/combined/all-com…
save/<@http://localhost/core/c575be1671135885e206c91cbf6b363b/combined/all-com…
f@http://localhost/core/c575be1671135885e206c91cbf6b363b/combined/all-com…
applyChanges/<@http://localhost/core/c575be1671135885e206c91cbf6b363b/combined/all-com…
callback@http://localhost/core/c575be1671135885e206c91cbf6b363b/combined/all-com…
execute/<@http://localhost/core/c575be1671135885e206c91cbf6b363b/combined/all-com…
callback@http://localhost/core/c575be1671135885e206c91cbf6b363b/combined/all-com…
request/a.callback@http://localhost/core/c575be1671135885e206c91cbf6b363b/combined/all-com…
callback@http://localhost/core/c575be1671135885e206c91cbf6b363b/combined/all-com…
onComplete@http://localhost/core/c575be1671135885e206c91cbf6b363b/combined/all-com…
onStateChange@http://localhost/core/c575be1671135885e206c91cbf6b363b/combined/all-com…
bind/<@http://localhost/core/c575be1671135885e206c91cbf6b363b/combined/all-com…

 

Как можно решить данную проблему? Спасибо.

Нравится

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

Добрый день. Мне кажется, что у вас какой-то из элементов БП поломанный. Прощёлкайте каждый элемент, если какой-то из них не откроется (будет бесконечно загружаться и выдаст ошибку в консоль), значит ошибка где-то там.

в таких случаях помогает генерация исходного кода для бп

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

Доброго времени суток, коллеги!

 

Такой вопрос появился, у меня есть бизнес-процесс в котором я собираю различные данные из разных справочников, я через задание-сценарий пишу код с формированием таблицы, как мне правильно синтаксически обращаться к этим данным? Искал на Академии, не нашел точного ответа.

 

Заранее спасибо за помощь!

Нравится

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

Доброе утро. Посмотрите вот это обсуждение и ещё это.

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

Добрый день,

 

Как в БП с помощью элемента Изменить данные внести уникальные изменения в несколько уникальных записей, или каким иным элементом следует воспользоваться? 
Нужно считать каждую запись одного раздела, по её параметрам вычислять функции из других разделов, а затем подставлять в саму запись.

"Для выполнения разных изменений в разных записях используйте несколько элементов [ Изменить данные ]. - таких уникальных записей будет 20-30 + со временем могут добавляться новые, прописывать вручную параметры каждой не вариант.

Нравится

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

А как вы рассчитывает эти "Уникальные изменения". И что за "уникальные изменения"? От этого зависит возможно ли вообще так сделать, а если возможно , то как сделать. Как вариант сделать цикличность процесса с признаком что изменили данные или попробовать использовать подпроцессы с расчетом "уникальных изменений" внутри под процесса. А на вход подавать коллекцию записей.

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

 

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

 

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

Алексей Следь,

Добрый день,

 

У меня есть реестр записей с уникальными параметрами, например, год-клиент-юр.лицо. И по таймеру хочу идти в другой раздел считать функцию сумма по всем записям с совпадающей связкой год-клиент-юр.лицо, а затем результат функции передавать в реестр в отдельное поле.

Екатерина Пильгук,

ну так все просто. вот этот реестр с уникальными записями есть коллекция записей. Делаете бизнес процесс стартующий по таймеру. Отбираете коллекцию записей год-клиент-юр.лицо - id. Вызываете подпроцесс с параметрами год-клиент-юр.лицо-id. в подпроцессе 2 элемента. Читать данные с параметрами режим чтения Считать функцию. потом изменить данные, где данные отбираете запись по id и пишите результат функции из читать данные.

Алексей Следь,

Спасибо, попробую сделать так.

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

Доброго времени суток, коллеги!

 

Возникла необходимость собирать несколько записей из справочников и затем все эти данные отправлять одним письмом в виде таблицы.

Какие есть варианты решения данного вопроса и можно ли это сделать стандартными средствами предоставляемые Studio?

 

Заранее спасибо!

Нравится

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

Mykhailo Kozlenko,

Добрый день.

Можно в элементе 'Задание-сценарий' сформировать таблицу, которую нужно отправлять, и записать её в параметр бизнес-процесса. Например, я делала вот таким образом:

const string quote = "\"";
const string siteRef = "http://site_name";
 
var userConnection = Get<UserConnection>("UserConnection");
var softwareInventoryTableHTML = String.Empty;
 
var esqSoftwareInventory = new EntitySchemaQuery(userConnection.EntitySchemaManager, "SoftwareInventory");
esqSoftwareInventory.AddColumn("Id");
esqSoftwareInventory.AddColumn("Number");
esqSoftwareInventory.AddColumn("Software.Name");
esqSoftwareInventory.AddColumn("LicenseKey.Name");
var expirationDateColumn = esqSoftwareInventory.AddColumn("LicenseExpirationDate");
expirationDateColumn.OrderDirection = OrderDirection.Ascending;
expirationDateColumn.OrderPosition = 1;
esqSoftwareInventory.AddColumn("Equipment.Name");
esqSoftwareInventory.AddColumn("Equipment.Id");
esqSoftwareInventory.Filters.Add(esqSoftwareInventory.CreateFilterWithParameters(FilterComparisonType.Equal,
	"LicenseStatus", new Guid("CDD71003-D5BB-43E7-8E06-280FE40BEBF8")));
DateTime dueDate = DateTime.Today.AddMonths(2);
esqSoftwareInventory.Filters.Add(esqSoftwareInventory.CreateFilterWithParameters(FilterComparisonType.Less,
	"LicenseExpirationDate", dueDate));
var softwareInventories = esqSoftwareInventory.GetEntityCollection(userConnection);
if (softwareInventories.Count > 0)
{
	var htmlTableBuilder = new StringBuilder();
	htmlTableBuilder.AppendLine("<table border='1' width='100%' cellpadding='5'>");
	var headerSB = new StringBuilder();
	headerSB.Append("<tr>");
	string[] columnNames = { "Номер", "Программное обеспечение", "Лицензионный ключ", "Дата окончания лицензии",
		"Оборудование" };
	foreach (string columnName in columnNames)
	{
		headerSB.Append("<td>" + columnName + "</td>");
	}
    headerSB.Append("</tr>");
    htmlTableBuilder.AppendLine(headerSB.ToString());
	foreach (var softwareInventory in softwareInventories)
	{
		var rowSB = new StringBuilder();
		rowSB.Append("<tr>");
		string Number = softwareInventory.GetTypedColumnValue<string>("Number");
		Guid recordId = softwareInventory.GetTypedColumnValue<Guid>("Id1");
		string softwareInventoryRef = siteRef + "/0/Nui/ViewModule.aspx#CardModuleV2/SoftwareInventory1Page/edit/" +
			recordId.ToString();
		string inventoryNumberRef = "<a href=" + quote + softwareInventoryRef + quote +">" + Number + "</a>";
		rowSB.Append("<td width=\"44\">" + inventoryNumberRef + "</td>");
		rowSB.Append("<td width=\"120\">" + softwareInventory.GetTypedColumnValue<string>("Software_Name") + "</td>");
		string licenseKey = softwareInventory.GetTypedColumnValue<string>("LicenseKey_Name");
		int licenseKeyLength = licenseKey.Length;
		int indexStr = 8;
		if (licenseKeyLength <= 8)
		{
			indexStr = licenseKeyLength;
		}
		rowSB.Append("<td width=\"110\">" + licenseKey.Substring(0, indexStr) + "</td>");
		DateTime licenseExpirationDate = softwareInventory.GetTypedColumnValue<DateTime>(expirationDateColumn.Name);
		string licenseExpirationDateStr = "";
		if (licenseExpirationDate != DateTime.MinValue) {
			licenseExpirationDateStr = licenseExpirationDate.ToString("dd.MM.yyyy", CultureInfo.InvariantCulture);
		}
		rowSB.Append("<td width=\"83\">" + licenseExpirationDateStr + "</td>");
		rowSB.Append("<td width=\"106\">" +	softwareInventory.GetTypedColumnValue<string>("Equipment_Name") + "</td>");
		rowSB.Append("</tr>");
 
        htmlTableBuilder.AppendLine(rowSB.ToString());
	}
	htmlTableBuilder.AppendLine("</table>");	
	softwareInventoryTableHTML = htmlTableBuilder.ToString();
}
Set<string>("SoftwareInventoryTableHTML", softwareInventoryTableHTML);
return true;

А потом этот параметр бизнес-процесса использовать в элементе 'Отправить email' в качестве макроса:

Обратите внимание, по данному программному обеспечению истек срок действия лицензии либо истечет в ближайшее время.
Пожалуйста, актуализируйте в срм информацию по этому ПО:
[#Software inventory table#]
 
С уважением,
Системный администратор crm

 

P.S. В скрипте, приведенном выше, ещё и гиперссылки на карточки сущностей в срм формируются.

 

 

 

 

Добрый день.

 

Вы можете использовать бесплатное дополнение, которое позволяет встраивать таблицу с данными в e-mail сообщение, отправляемое из бизнес-процесса.

Добрый! Кроме данного дополнения больше никаких вариантов нет? Ибо при попытке работать с данным расширением оказалось, что оно не совсем рабочее. 

Mykhailo Kozlenko,

Добрый день.

Можно в элементе 'Задание-сценарий' сформировать таблицу, которую нужно отправлять, и записать её в параметр бизнес-процесса. Например, я делала вот таким образом:

const string quote = "\"";
const string siteRef = "http://site_name";
 
var userConnection = Get<UserConnection>("UserConnection");
var softwareInventoryTableHTML = String.Empty;
 
var esqSoftwareInventory = new EntitySchemaQuery(userConnection.EntitySchemaManager, "SoftwareInventory");
esqSoftwareInventory.AddColumn("Id");
esqSoftwareInventory.AddColumn("Number");
esqSoftwareInventory.AddColumn("Software.Name");
esqSoftwareInventory.AddColumn("LicenseKey.Name");
var expirationDateColumn = esqSoftwareInventory.AddColumn("LicenseExpirationDate");
expirationDateColumn.OrderDirection = OrderDirection.Ascending;
expirationDateColumn.OrderPosition = 1;
esqSoftwareInventory.AddColumn("Equipment.Name");
esqSoftwareInventory.AddColumn("Equipment.Id");
esqSoftwareInventory.Filters.Add(esqSoftwareInventory.CreateFilterWithParameters(FilterComparisonType.Equal,
	"LicenseStatus", new Guid("CDD71003-D5BB-43E7-8E06-280FE40BEBF8")));
DateTime dueDate = DateTime.Today.AddMonths(2);
esqSoftwareInventory.Filters.Add(esqSoftwareInventory.CreateFilterWithParameters(FilterComparisonType.Less,
	"LicenseExpirationDate", dueDate));
var softwareInventories = esqSoftwareInventory.GetEntityCollection(userConnection);
if (softwareInventories.Count > 0)
{
	var htmlTableBuilder = new StringBuilder();
	htmlTableBuilder.AppendLine("<table border='1' width='100%' cellpadding='5'>");
	var headerSB = new StringBuilder();
	headerSB.Append("<tr>");
	string[] columnNames = { "Номер", "Программное обеспечение", "Лицензионный ключ", "Дата окончания лицензии",
		"Оборудование" };
	foreach (string columnName in columnNames)
	{
		headerSB.Append("<td>" + columnName + "</td>");
	}
    headerSB.Append("</tr>");
    htmlTableBuilder.AppendLine(headerSB.ToString());
	foreach (var softwareInventory in softwareInventories)
	{
		var rowSB = new StringBuilder();
		rowSB.Append("<tr>");
		string Number = softwareInventory.GetTypedColumnValue<string>("Number");
		Guid recordId = softwareInventory.GetTypedColumnValue<Guid>("Id1");
		string softwareInventoryRef = siteRef + "/0/Nui/ViewModule.aspx#CardModuleV2/SoftwareInventory1Page/edit/" +
			recordId.ToString();
		string inventoryNumberRef = "<a href=" + quote + softwareInventoryRef + quote +">" + Number + "</a>";
		rowSB.Append("<td width=\"44\">" + inventoryNumberRef + "</td>");
		rowSB.Append("<td width=\"120\">" + softwareInventory.GetTypedColumnValue<string>("Software_Name") + "</td>");
		string licenseKey = softwareInventory.GetTypedColumnValue<string>("LicenseKey_Name");
		int licenseKeyLength = licenseKey.Length;
		int indexStr = 8;
		if (licenseKeyLength <= 8)
		{
			indexStr = licenseKeyLength;
		}
		rowSB.Append("<td width=\"110\">" + licenseKey.Substring(0, indexStr) + "</td>");
		DateTime licenseExpirationDate = softwareInventory.GetTypedColumnValue<DateTime>(expirationDateColumn.Name);
		string licenseExpirationDateStr = "";
		if (licenseExpirationDate != DateTime.MinValue) {
			licenseExpirationDateStr = licenseExpirationDate.ToString("dd.MM.yyyy", CultureInfo.InvariantCulture);
		}
		rowSB.Append("<td width=\"83\">" + licenseExpirationDateStr + "</td>");
		rowSB.Append("<td width=\"106\">" +	softwareInventory.GetTypedColumnValue<string>("Equipment_Name") + "</td>");
		rowSB.Append("</tr>");
 
        htmlTableBuilder.AppendLine(rowSB.ToString());
	}
	htmlTableBuilder.AppendLine("</table>");	
	softwareInventoryTableHTML = htmlTableBuilder.ToString();
}
Set<string>("SoftwareInventoryTableHTML", softwareInventoryTableHTML);
return true;

А потом этот параметр бизнес-процесса использовать в элементе 'Отправить email' в качестве макроса:

Обратите внимание, по данному программному обеспечению истек срок действия лицензии либо истечет в ближайшее время.
Пожалуйста, актуализируйте в срм информацию по этому ПО:
[#Software inventory table#]
 
С уважением,
Системный администратор crm

 

P.S. В скрипте, приведенном выше, ещё и гиперссылки на карточки сущностей в срм формируются.

 

 

 

 

Я однажды делал подобное следующим образом:
в БП в элементе "Задание-сценарий" вычитывал в коллекцию какие-то значения.
После кодом формировал html-код в виде:
<table>
<tbody>
  <tr>
    <td >Номер</td>
    <td >Колонка 1</td>
    <td >Колонка 2</td>
  </tr>
  <tr>
    <td >1</td>
    <td >Значение 1</td>
    <td >Значение 2</td>
  </tr>
</tbody>
</table>

где Значение 1 и Значение 2 значения из коллекции.
После использовал элемент БП "Отправка письма", где в тело подсовывал html-код в виде строки.
После отправки получатель увидит заполненную html-таблицу

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

Всем доброго времени суток!

 

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

 

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

 

Может где-то есть настройки работы таймера, чтобы проверить, все ли корректно работает и сравнить с тестовой платформой? Заранее благодарю!

Нравится

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

Я бы посмотрел в сторону Quartz, возможно с ним какие-то проблемы https://academy.terrasoft.ru/docs/developer/elements_and_components/qua…

 

Для начала увеличить значение в веб конфигах на более высокое (по умолчанию там 5), затем перезапустить iis.

<add key="quartz.threadPool.threadCount" value="5" />

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

Есть вероятность что таймеры попадают на то время когда пул приложения спит, тут может помочь настройка согласно публикации https://community.terrasoft.ru/articles/bespereboynaya-rabota-zadaniy-q…

 

Но в целом что стоит сравнить так это внешний Web.config с обеих сред. Возможно достаточно будет их заполнить одинаково, или если у вас на прод среде в разы больше задач для Quartz может понадобится настройка согласно статье https://academy.terrasoft.ru/docs/7-17/developer/elements_and_component…

 

Если это не поможет, было бы неплохо уточнить формулировку "журнале событие есть, схема точно рабочая, но никаких действий вовсе нет" не совсем понятно что именно тут происходит, а что нет.

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

Добрый день!

Два вопроса по таймеру в процессах:

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

2. Можно ли задавать время запуска в системных настройках?

Нравится

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

Настройки для работы системы берутся из настроек ОС где устанавливается система и настроек часового пояса в ней. Так как в большинстве случаев администраторы ОС пренебрегают настройками часового пояса при установке системы, то я бы посоветовал обратить внимание для начала туда. А настройка часового пояса по умолчанию производится в системной настройке "Часовой пояс по умолчанию", но она все же больше сделана для настройки работы календаря и связанных с ней частей системы.

А зачем тогда настройка часового пояса в стартовом сигнале процесса Timer?
 

Владимир Соколов,

Добрый день!

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

 

Подобные примеры доступны в статьях на академии: 

https://academy.terrasoft.ua/docs/user/biznes_processy/primery_nastrojk…

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

Добрый день.

Заметил особенность - оператор "включающего или" при  синхронизации действует схожим образом, как оператор "исключающего или".

Т. е. при вхождении в него 2 и более активированных ветвей,  он ожидает завершение первой пришедшей ветки. 

Ожидаемое поведение (цитата из Википедии):

  • Оператор включающего «или» (inclusive gateway) активирует одну или более исходящих ветвей, в случае, когда осуществляется ветвление. Если оператор используется для синхронизации, то он ожидает завершения выполнения всех активированных ветвей и активирует выходной поток.
  • Оператор исключающего «или», управляемый данными (англ. data-based exclusive gateway). Если оператор используется для ветвления, то поток управления направляется лишь по одной исходящей ветви. Если оператор используется для синхронизации, то он ожидает завершения выполнения одной входящей ветви и активирует выходной поток.

Ниже привожу пример БП.

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

Нравится

Поделиться

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

Добрый день!

Согласно Т.З. необходимо реализовать следующие пункты...

У нас есть раздел "Заказ на выполнение работ", а в нем реализована деталь "Перечень работ". При создании нового "Заказа на выполнение работ" с помощью бизнес-процесса в деталь "Перечень работ" добавляется 5 записей. Для обновления реестра детали необходимо использовать механизм отправки сообщений с серверной на клиентскую сторону, содержимое детали должно автоматически обновляться после завершения работы действия.

БП создан и правильно добавляет записи в деталь. А что дальше делать? Как и куда что вставлять? Статей по механизму сообщений и Sandbox прочитал не мало, а в кучу собрать информацию для реализации своего задания не получается...

Нравится

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

Посмотрите данную статью, там есть пример https://academy.terrasoft.ru/docs/developer/front-end_development/webso…

 

Для обновления детали подойдет метод 

this.updateDetail({detail: "UsrDetail23d2c003", realoadAll: true})

Его запускать со страницы редактирования, где расположена нужная деталь.

Посмотрите данную статью, там есть пример https://academy.terrasoft.ru/docs/developer/front-end_development/webso…

 

Для обновления детали подойдет метод 

this.updateDetail({detail: "UsrDetail23d2c003", realoadAll: true})

Его запускать со страницы редактирования, где расположена нужная деталь.

Трефилов Павел Сергеевич,

Часть задания вроде бы как удалось сделать. А именно… Повторил в соответствии с примером применительно к своему заданию.

В объекте детали «Перечень работ» создал событийный подпроцесс, который срабатывает при добавлении записи в деталь, и передает Id новой записи детали. Сделал рассылку в созданном замещающем клиентском модуле с родителем ClientMessageBridge . Сделал подписку на сообщение в странице редактирования «Заказ на выполнение работ». Все работает, как и в примере.

Пока не получается обновить реестр детали. Делаю это следующим образом… В странице редактирования «Заказ на выполнение работ» в функции обработчике события полученного сообщения просто пишу this.reloadDetail("UsrListWorks"); (UsrListWorks – название объекта детали).

Что я делаю неправильно?

Pavel Litvinovich,

нужно писать не название объекта, а название делали в коде страницы. Смотрите блок details и там будет название детали. Пример:

		details: /**SCHEMA_DETAILS*/{
			"UsrMaterialDetail23d2c003": {
				"schemaName": "UsrMaterialDetail",
				"entitySchemaName": "UsrMaterial",
				"filter": {
					"detailColumn": "UsrParentMaterial",
					"masterColumn": "Id"
				}
			}
		}/**SCHEMA_DETAILS*/,

И еще я посмотрел как в последнем проекте делал обновление детали, вот такой код использовал, id записи передавал из процесса, в вашем варианте можно убрать проверку на id, т.к. будут обновляться детали на всех открытых страницах с подпиской:

        messages: {
            "RefreshMaterial": {
                "mode": Terrasoft.MessageMode.BROADCAST,
                "direction": Terrasoft.MessageDirectionType.SUBSCRIBE
            }
        },

 

			onEntityInitialized: function() {
				this.callParent(arguments);
				this.sandbox.subscribe("RefreshMaterial", this.reloadFromProcess, this);
			},
 
			reloadFromProcess: function(args) {
				if(args === this.get("Id")) {
					this.updateDetail({detail: "UsrMaterialDetail23d2c003", realoadAll: true});
				}
			},

 

Трефилов Павел Сергеевич,

А что использовать init или onEntityInitialized? В примере используют init. А у меня в methods уже был onEntityInitialized, для реализации другого функционала.

И как проверить работает оно или нет (я имею ввиду обновление реестра с использованием механизма отправки сообщений)? Записи в деталь с помощью только лишь БП и так нормально добавлялись.

В данном случае нет разницы в init или onEntityInitialized, подписка будет работать в обоих случаях.

Если смотреть пример, то там есть строка 

window.console.info("текст");

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

 

А обновление реестра работает или нет, чисто визуально определить. У вас же БП что-то делает, то значит после выполнения бп данные должны обновиться без перезагрузки страницы.

Трефилов Павел Сергеевич,

Дело в том, что БП отрабатывает после создания новой записи в разделе "Заказ на выполнение работ" (а именно добавляет записи на деталь этой страницы). А при нажатии кнопки Сохранить страница автоматически закрывается. И получается что страница при последующем открытии в любом случае будет перезагружена. Хотя если присмотреться, за долю секунды то до того как страница закроется, на детали появляются записи. Походу, получается, работает правильно.

Обнаружил другую более существенную проблему. Если добавлять вручную записи в деталь нажимая на +, т.к. деталь с редактируемым реестром (при работе БП все хорошо), то появляется ошибка: Violation of PRIMARY KEY constraint 'PKOqfXc3lnQVBYwkElsuKFom04KY'. Cannot insert duplicate key in object 'dbo.UsrListWorks'. The duplicate key value is (9d4ea319-42ee-41b3-81ec-f556e4dc4517). The statement has been terminated. Не понятно почему, т.к. если посмотреть в базе данных, то детали с таким Id еще нет.

Pavel Litvinovich,

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

onSaved: function(response, config) {
if(this.isNew) {
config.isSilent;
}
this.callParent(arguments);
}
код не проверял на практике, но должен работать

По поду второй ошибки сложно судить, может где-то ошибка в коде детали

Трефилов Павел Сергеевич,

Спасибо за помощь!

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

Здравствуйте,
мы питаемся в Бизнес процесс добавить подпроцесс, и когда передает только значение Лида, все ок,
но в подпроцессе у нас есть параметр, текстовый, и на него вылетает ошибка:

"Значение не может быть неопределенным. Имя параметра: format"
Пробовали и заполнять этот параметр значением по умолчанию в подпроцессе, и передавать значение с процесса, 
если он присутствует всегда одна и та же ошибка.

Версия: 7.15.4.3055

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

Нравится

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

Уточните, у Вас параметр назвается format или Name? Или это два разных параметра?

Здравствуйте, параметр называется - Name, с названием format у меня ничего нет.

Уверены, что дело именно в этом подпроцессе? Если запускать его из другого процесса, тоже такая ошибка?

Если переименовать Name как-то иначе, то тоже?

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

В одном конкретном подпроцессе или в любом с любым параметром? Просто эти действия довольно обычны, если бы всегда при любом текстовом параметре любого подпроцесса была такая ошибка, это бы давно заметили.

А в логи системы (стандартно в текстовом файле Error.log на веб-сервере) при этом что-то падает? В консоли браузера нет дополнительной информации в момент ошибки?

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