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

 

Подскажите, пожалуйста, как в визировании (в бизнес-процессе) при отказе сделать причину отказа обязательной для заполнения?

 

Без средств программирования, пожалуйста.

Нравится

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

Попробуйте через мастер детали настроить такое бизнес-правило обязательности поля 'Причина отказа' от статуса визы.

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

Как подготовка к аттестации в целом? 

Попробуйте через мастер детали настроить такое бизнес-правило обязательности поля 'Причина отказа' от статуса визы.

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

Екатерина, получилось ли сделать причину отказа обязательной ? Нигде не могу найти решение этой задачи.

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

Добрый день!

Возникла необходимость поменять карточку объекта на новую. Я создал новую схему, наследованную от BaseModulePageV2, и подставил её Uid из таблицы SysSchema в столбец CardSchemaUid таблицы SysModule. Но, к сожалению, этого оказалось недостаточно, по прежнему запись в разделе открывается в старой карточке. Подскажите, пожалуйста, что мне ещё необходимо сделать чтобы всё корректно заработало.

Нравится

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

Аналогично нужно сделать в таблице

SysModuleEdit

Григорий Чех,

Сделал, как Вы сказали. Теперь ругается на параметр "operation":

На всякий случай обобщу свои действия:

1. Создал схему модели представления карточки, с родительским объектом BaseModulePageV2 (ESN).

2. Наполнил её:

define("MyEntityPage", [], function() {

    return {

        entitySchemaName: "MyEntity",

        attributes: {},

        modules: {},

        details: {},

        businessRules: {},

        methods: {},

        dataModels: {},

        diff: [{}]

    };

});

3. Получил UId из таблицы SysSchema, записал его в поле CardShemaUid таблиц SysModule  и SysModuleEdit.

Видимо, что-то ещё упустил.

Иван Небеддаг,

Какое именно сообщение об ошибке и когда оно возникает

Григорий Чех,

Там была прикреплена картинка, но она куда-то исчезла. Может быть, в этот раз мне повезёт:

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

Господа, сталкивался ли кто-то с такой проблемой? И если да, то как вы её решили? Есть ли какая-то последовательность действий, которая поможет заменить карточку в разделе?

Иван Небеддаг,

Ломалось из-за строчки "diff: [{}]", фигурные скобки здесь вводят парсер в заблуждение. Пустая карточка должна выглядеть примерно так (с метками для дизайнера):

 define("MyEntityPage", [], function() {

    return {

        entitySchemaName: "MyEntity",

        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,

        attributes: {},

        modules: {},

        details: {},

        businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,

        methods: {},

        dataModels: {},

        modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,

        dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,

        diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/

    };

});

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

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

Нравится

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

Переопределите обработчик нажатия на кнопку [+] добавления новой записи. Обычно она называется AddRecordButton. Обработчик кнопки реализуйте аналогично примера на Академии. В методе openDocumentLookup накладывайте нужные фильтры, чтобы уже добавленная запись в списке выбора не появлялась.

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

 

Так же для добавления можно создать свою мини карточку детали тут

Переопределите обработчик нажатия на кнопку [+] добавления новой записи. Обычно она называется AddRecordButton. Обработчик кнопки реализуйте аналогично примера на Академии. В методе openDocumentLookup накладывайте нужные фильтры, чтобы уже добавленная запись в списке выбора не появлялась.

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

Подскажите как убрать значки быстрого создания активности из полоски кейсов?

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

 

Нравится

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

Заместить SectionActionsDashboard"

и

		{
			"operation": "remove",
			"name": "CallMessageTab"			
		},
		{
			"operation": "remove",
			"name": "EmailMessageTab"
		},
		{
			"operation": "remove",
			"name": "SocialMessageTab"
		},
		{
		   "operation": "remove",
		    "name": "TaskMessageTab"
		}

 

Вам нужно переопределить методы getSectionPublishers и getExtendedConfig в SectionActionsDashboard.

Посмотрите пример добавления нового канала в ActionDashboard и реализацию SectionActionsDashboard в пакетах TaskMessagePublisher, EmailMessagePublisher, CallMessagePublisher и SocialMessagePublisher.

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

 

Заместить SectionActionsDashboard"

и

		{
			"operation": "remove",
			"name": "CallMessageTab"			
		},
		{
			"operation": "remove",
			"name": "EmailMessageTab"
		},
		{
			"operation": "remove",
			"name": "SocialMessageTab"
		},
		{
		   "operation": "remove",
		    "name": "TaskMessageTab"
		}

 

Григорий Чех пишет:

SectionActionsDashboard в таком случае удалится везде во всех страницах  в которых  схема карточки SectionActionsDashboard есть в зависимостях! А вот как к примеру удалить только лишь в тех страницах которые на портале

 это юзер на портале и тут все ок



а вот тут уже не портал, это уже среда где сотрудники работают с обращениями и тут не хорошо, что они удалились

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

А можно уточнить такой вопрос?

как возможно убрать DCM из рабочей области

            

или чтоб портальный пользователь не мог на него нажать

 

Andrew Prymenko,

Andrew Prymenko пишет:

или чтоб портальный пользователь не мог на него нажать

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

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

Коллеги, посоветуйте, пожалуйста, лучшие практики реализации Double Opt-In в bpm'online.

Желательно, без использования рассылок bpm'online marketing, чтобы не использовать лицензированные "активные контакты", которые так и не подпишутся на рассылки.

Нравится

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

Для начала бы всем присутствующим знать, что такое «Double Opt-In». Если речь об этом:

Image: a graphic depicting the two steps of the double opt-in process: the signup form, and the opt-in confirmation email.

То это довольно похоже на стандартные механизмы раздела кампаний в bpm'online marketing с добавлениями из лендинга и триггерными рассылками:

 

section_campaigns_landing_condition_flow.png

Естественно, потребуются те самые лицензии на активные контакты.

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

 

Зверев Александр пишет:

То это довольно похоже на стандартные механизмы раздела кампаний в bpm'online marketing с добавлениями из лендинга и триггерными рассылками:

Да, очень похоже. Но пока непонятны некоторые моменты:

- как отлавливать завершение кампании Double Opt-In, чтобы в карточке контакта уже отметить, что он прошёл подписку до конца?

- как унифицировать это решение, чтобы не копировать в каждом landing page, где контакт может подписаться? 

Для этого служит элемент «Выход из кампании». Там отмечают не в карточке, но на детали:

Всем контактам, которые по переходу или согласно настроенным условиям группы попали на этот шаг, на вкладке [Аудитория] в колонке [Текущий шаг] будет установлено значение “Достигли цели”

Движок кампаний поддерживает ветвления, можно попробовать добавить в одной кампании несколько разных элементов «Добавить из лендинга».

Возникли ещё 2 вопроса:



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

2. Процесс, кажется, не отлавливает изменения в детали Campaign participant. По крайней мере, ни разу за день процессы (реальный и тестовый) не сработали, хотя, участники добавлялись и даже дошли до цели:

 

Процесс не запустится по событию на объекте, если добавление или изменение делается не при помощи механизмов EntitySchemaQuery, а посредством классов Insert/Update или напрямую в базе. Вероятно, для этой детали происходит именно так.

Зверев Александр пишет:

Процесс не запустится по событию на объекте, если добавление или изменение делается не при помощи механизмов EntitySchemaQuery, а посредством классов Insert/Update или напрямую в базе. Вероятно, для этой детали происходит именно так.

Интересно, а как тогда люди на bpm'online реализуют такой механизм Double Opt-In? 

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

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

На страницу выведено поле с датой и временем, нужно передать в него время из справочника при изменении значения в выпадающем списке. Стандартные js способы new Data(dataCode) не работает

Нравится

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

Добрый день!

А что именно "стандартное" не работает? Какой тип у dataCode? Возможно просто напросто вы не можете создать дату? Так как значение устанавливается просто. Например:

//...
attributes: {
	"SomeDate": {
		"dataValueType": this.Terrasoft.DataValueType.DATE_TIME,
		"type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
		"dependencies": [{
			columns: ["Type"],
			methodName: "setSomeDate"
		}]
	},
	"Type": {
		"lookupListConfig": {
			columns: ["CreatedOn"]
		}
	}
},
//...
methods: {
	setSomeDate: function () {
		var value = (this.get("Type") || {}).CreatedOn || null;
		this.set("SomeDate", value);
	}
}
//...

И Вам, наверное, стоит заглянуть в консоль, там скорее всего ошибка, которая прояснит ситуацию

Добрый день!

А что именно "стандартное" не работает? Какой тип у dataCode? Возможно просто напросто вы не можете создать дату? Так как значение устанавливается просто. Например:

//...
attributes: {
	"SomeDate": {
		"dataValueType": this.Terrasoft.DataValueType.DATE_TIME,
		"type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
		"dependencies": [{
			columns: ["Type"],
			methodName: "setSomeDate"
		}]
	},
	"Type": {
		"lookupListConfig": {
			columns: ["CreatedOn"]
		}
	}
},
//...
methods: {
	setSomeDate: function () {
		var value = (this.get("Type") || {}).CreatedOn || null;
		this.set("SomeDate", value);
	}
}
//...

И Вам, наверное, стоит заглянуть в консоль, там скорее всего ошибка, которая прояснит ситуацию

Лопатин Константин Николаевич,

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

Пробовал this.set("dataColume", new Date(); - не работает, хотя в js даёт текущую дату и время. Так же пробовал из другого поля скопировать дату this.set("date", new Date(this.get("date2").toString()))

И

this.set("date1", this.get("date2"))

Prime Source,

А в каком методе Вы это делаете? По событию? Запрос может быть к базе какой-то выполняете? Контекст верный? Вариант с

this.set("SomeDate", new Date());

очень даже рабочий. Тяжело помочь, когда не видишь полной картины

Лопатин Константин Николаевич,

define("PsPPsPApprovalPuRequests1Page", [], function() {
	return {
		entitySchemaName: "PsPApprovalPuRequests",
		attributes: {
			"PsPDateTimeApproval": {
				dataValueType: Terrasoft.DataValueType.FLOAT,
				dependencies: [
					{
						columns: ["PsPsPMatchResult"],
						methodName: "approvalDate"
					}
				]
			}
		},
		modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		businessRules: /**SCHEMA_BUSINESS_RULES*/{
			"PsPsPMatchResult": {
				"b7a163a0-228d-4005-bfd3-3d19229a6328": {
					"uId": "b7a163a0-228d-4005-bfd3-3d19229a6328",
					"enabled": true,
					"removed": false,
					"ruleType": 0,
					"property": 1,
					"logical": 0,
					"conditions": [
						{
							"comparisonType": 3,
							"leftExpression": {
								"type": 3,
								"value": "CurrentUserContact",
								"dataValueType": 10
							},
							"rightExpression": {
								"type": 1,
								"attribute": "PsPApprovalMan"
							}
						},
						{
							"comparisonType": 1,
							"leftExpression": {
								"type": 1,
								"attribute": "PsPsPMatchResult"
							}
						}
					]
				}
			},
			"PsPComent": {
				"e39449ef-895f-4341-8133-2e773a4dec7d": {
					"uId": "e39449ef-895f-4341-8133-2e773a4dec7d",
					"enabled": true,
					"removed": false,
					"ruleType": 0,
					"property": 1,
					"logical": 0,
					"conditions": [
						{
							"comparisonType": 3,
							"leftExpression": {
								"type": 3,
								"value": "CurrentUserContact",
								"dataValueType": 10
							},
							"rightExpression": {
								"type": 1,
								"attribute": "PsPApprovalMan"
							}
						}
					]
				}
			}
		}/**SCHEMA_BUSINESS_RULES*/,
		methods: {
			approvalDate: function() {
				var matchResult = this.get("PsPsPMatchResult");
				if (matchResult) {
					var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "PsPMatchResult"});
					//esq.addColumn("PsPTimeLimit", "PsPTimeLimit");
					debugger;
					esq.getEntity(matchResult.value, function(result) {
						if (!result.success) {
							// обработка/логирование ошибки, например
							this.showInformationDialog("Ошибка запроса данных");
							return;
						}
						this.set("PsPDateTimeApproval", new Date());
					}, this);
				}
			}
		},
		dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "PsPApprovalMan",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 1,
						"layoutName": "Header"
					},
					"bindTo": "PsPApprovalMan"
				},
				"parentName": "Header",
				"propertyName": "items",
				"index": 0
			},
			{
				"operation": "insert",
				"name": "PsPsPMatchResult",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 2,
						"layoutName": "Header"
					},
					"bindTo": "PsPsPMatchResult",
					"labelConfig": {
						"caption": {
							"bindTo": "Resources.Strings.PsPsPMatchResultLabelCaption"
						}
					},
					"enabled": true,
					"contentType": 5
				},
				"parentName": "Header",
				"propertyName": "items",
				"index": 1
			},
			{
				"operation": "insert",
				"name": "PsPComent",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 3,
						"layoutName": "Header"
					},
					"bindTo": "PsPComent"
				},
				"parentName": "Header",
				"propertyName": "items",
				"index": 2
			},
			{
				"operation": "insert",
				"name": "PsPDateTimeApproval27fcf723-04c0-4c5d-86d1-e4ef52f8b467",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 0,
						"layoutName": "Header"
					},
					"bindTo": "PsPDateTimeApproval",
					"enabled": false
				},
				"parentName": "Header",
				"propertyName": "items",
				"index": 3
			}
		]/**SCHEMA_DIFF*/
	};
});

 

Лопатин Константин Николаевич,

attributes: {
	"PsPTimeLimit": {
		dataValueType: Terrasoft.DataValueType.FLOAT,
		dependencies: [
			{
				columns: ["PsPProcurementType"],
				methodName: "calculateTimeLimit"
			}
		]
	}
},
methods: {
	onEntityInitialized: function() {
		this.callParent(arguments);
		this.calculateTimeLimit();
		this.calculateDepartment();
	},
	calculateTimeLimit: function() {
		var recordId = this.get("PsPProcurementType");
		var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "PsPProcurementType"});
		esq.addColumn("PsPTimeLimit", "PsPTimeLimit");
		if (recordId) {
			esq.getEntity(recordId.Id, function(result) {
				if (!result.success) {
					// обработка/логирование ошибки, например
					this.showInformationDialog("Ошибка запроса данных");
					return;
				}
				var timeLimit = result.entity.get("PsPTimeLimit").toString();
				this.set("PsPTimeLimit", {
					displayValue: new Date(timeLimit)
				});
			}, this);
		}
	}
}

Это из базы уже

Prime Source,

А что Вы ожидаете получить в целом? Колонка PsPTimeLimit имеет  тип FLOAT, и в нее различными способами пытаются запихнуть дату, логично что не работает. А способ

this.set("PsPTimeLimit", { displayValue: new Date(timeLimit) });

Вы где подсмотрели?

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

Лопатин Константин Николаевич,

Спасибо, тип изменил и все заработало, нужно больше спать)))

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

Добрый день!

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

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

П.С. На всякий случай уже пробовал условие с использованием роли "Текущий пользователь = Системный администратор" - не прокатило :(

Нравится

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

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

Вот ссылки на Академию: Механизм блокировки полей страницы редактирования и Как полностью заблокировать поля страницы редактирования.

Добрый день. Вам подойдет способ проверки прав доступа на операцию. Без кода сделать не получится. Загляните в эту тему: https://community.terrasoft.ru/questions/kak-ubrat-deistvie-kopirovatiz…

Дмитрий А.,

А есть решение другое, как для аналитика, а не программиста?

Семенов Михаил,

Посмотрите это расширение

оно позволяет делегировать права пользователя/роли другому пользователю.

Григорий Чех,

не совсем понимаю как это расширение поможет. У меня основная идея отказаться от администрирования по колонкам (ради одной колонки настраивать почти сотню остальных как то не очень)

Семенов Михаил пишет:

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

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

Вот ссылки на Академию: Механизм блокировки полей страницы редактирования и Как полностью заблокировать поля страницы редактирования.

Спасибо, есть с чем потренироваться)

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

Здравствуйте!

Хотим сделать чтобы в редактируемом реестре записи отображались как ссылки для удобного перехода, нашел что для этого необходимо добавить признак useLinks: true для DataGrid и метод-обработчик linkClicked, но это почему-то не меняет ситуацию, строки отображаются как обычно... ошибок в консоли нет

Код DataGrid:

{
    "operation": "merge",
    "name": "DataGrid",
    "values": {
        "className": "Terrasoft.ConfigurationGrid",
        "generator": "ConfigurationGridGenerator.generatePartial",
        "generateControlsConfig": {"bindTo": "generatActiveRowControlsConfig"},
        "changeRow": {"bindTo": "changeRow"},
        "unSelectRow": {"bindTo": "unSelectRow"},
        "onGridClick": {"bindTo": "onGridClick"},
        "activeRow": {"bindTo": "ActiveRow"},
        "selectedRows": {"bindTo": "SelectedRows"},
        "activeRowActions": [
            {
                "className": "Terrasoft.Button",
                "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                "tag": "save",
                "markerValue": "save",
                "imageConfig": {"bindTo": "Resources.Images.SaveIcon"}
            },
            {
                "className": "Terrasoft.Button",
                "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                "tag": "card",
                "markerValue": "card",
                "imageConfig": {"bindTo": "Resources.Images.CardIcon"}
            },
            {
                "className": "Terrasoft.Button",
                "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                "tag": "cancel",
                "markerValue": "cancel",
                "imageConfig": {"bindTo": "Resources.Images.CancelIcon"}
            },
            {
                "className": "Terrasoft.Button",
                "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                "tag": "remove",
                "markerValue": "remove",
                "imageConfig": {"bindTo": "Resources.Images.RemoveIcon"}
            }
        ],
        "initActiveRowKeyMap": {"bindTo": "initActiveRowKeyMap"},
        "activeRowAction": {"bindTo": "onActiveRowAction"},
        "multiSelect": false,
        "useLinks": true,
        "primaryColumnName": "Id",
        "sortColumnIndex": null,
        "listedZebra": true,
        "type": "listed"
    }
}

 

Посмотрите, пожалуйста, может я что-то упустил

Нравится

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

Добрый день!

Я бы Вам рекомендовал посмотреть в сторону метода addColumnLink в GridUtilitiesV2. Так же можно изучить поподробнее как формируются ссылки в FileDetailV2

Добрый день!

Я бы Вам рекомендовал посмотреть в сторону метода addColumnLink в GridUtilitiesV2. Так же можно изучить поподробнее как формируются ссылки в FileDetailV2

Обрати внимание на флаг showValueAsLink (и выше тебе уже ответили в системе множество примеров, потрать немного времени и разберись)

ПРимер использования ниже

{
    "operation": "insert",
    "name": "UsrURLpage",
    "values": {
        "layout": {
            "colSpan": 12,
            "rowSpan": 1,
            "column": 0,
            "row": 3,
            "layoutName": "Header"
        },
        "labelConfig": {},
        "enabled": true,
        "bindTo": "UsrURLpage",
        "showValueAsLink": true,
        "href": {
            "bindTo": "UsrURLpage",
            "bindConfig": {"converter": "getUsrURLpageLink"}
        },
        "controlConfig": {
            "className": "Terrasoft.TextEdit",
            "linkclick": { bindTo: "onUsrURLpageLinkClick"}
        }
    },
    "parentName": "Header",
    "propertyName": "items",
    "index": 6
}

 

Переопределил метод addColumnLink, спасибо Константину за наводку:

addColumnLink: function(item, column) {
    this.callParent(arguments);
 
    var columnPath = column.columnPath;
    if (columnPath === "UsrProduct") {
        item["on" + columnPath + "LinkClick"] = function() {
            var value = this.get(columnPath);
            return {
                caption: item.values.UsrProduct.displayValue,
                target: "_self",
                title: item.values.UsrProduct.displayValue,
                url: "/0/Nui/ViewModule.aspx#CardModuleV2/ProductPageV2/edit/" + item.values.UsrProduct.value
            };
        };
    }
}

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

focusActiveRowControl: function(columnName) {
    if (!columnName || columnName === "UsrProduct") {
        return;
    }
    var activeRow = this.getActiveRow();
    activeRow.set("Is" + columnName + "Focused", true);
    this.currentActiveColumnName = columnName;
}

 

Всем спасибо за помощь...)

 

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

Добрый день!

При использовании команды "debugger;" появляется сообщение об ошибке "forgotten 'debugger' statement".

Требуется ли дополнительно править что-то в конфигах или подключать в самом js-файле?

Спасибо!

Нравится

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

На это сообщение можно не обращать внимание, оно носит информационный характер.

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

На это сообщение можно не обращать внимание, оно носит информационный характер.

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

Алла Савельева,

Спасибо! А то я тут уже и исходные коды перерыл, и академию с сообществом. :)

Информационное предупреждение JSHint (используется для проверки синтаксиса JS в bpmonline), как написала Алла можно игнорировать это не Error а Warning.

Смысле его в том чтобы не ушел в продакшен код с отладочными операторами/командами информацией и тд!

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

Добрый день!

По кнопке из карточки кастомного раздела запускаю БП.

Он создает по своей логике пачку записей в детали, которая выведена на текущей карточке.

Как после этого обновить реестр детали?

Пользовался следующей ссылкой:

https://academy.terrasoft.ua/documents/technic-sdk/7-13/clientmessagebr…

В ней правда есть только вывод сообщение в консоли.

Это действие планировал заменить как-то так:

//                this.refreshGridData();

или

//                this.location.reload();

Делал все аналогично:

1) бп после сохранения элемента детали

2) логика с родителем ClientMessageBridge 

3) подписка на странице, где выведена деталь

Такое впечатление, что сообщение не доходит и обрывается на каком-то моменте.

Можно ли его судьбу как-то отследить?

Нравится

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

На самом деле проблема в том что конфигурационный параметр команды в этом обсуждении указан неверно: realoadAll. Должно быть reloadAll. Случайно обнаружил.

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

Алексей-Карягин,

А само сообщение, которое должно стать инициатором обновления, можно ли как-то отследить?

Я его по аналогии с примером описал (и источник, и приёмник)

Смотря на каком этапе пропадает. Можно рядом с обновлением детали оставить window.console.info из примера, чтобы видеть, дошло до клиента или нет. Сетевую активность между сервером и браузером можно мониторить в Fiddler, запущенном на том же компьютере, где браузер. Если же до отправки сообщения не доходит на стороне БП на сервере, их тоже можно мониторить.

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

БП по сути только инициирует - там-то проблем быть не должно.

Дальше есть 2 куска логики (клиент и

ClientMessageBridge). Вот у клиента этой логики нет.

Вот для этого и нужно смотреть вышеупомянутыми или другими способами, на каком этапе ещё нормально отработало, а на каком — уже нет.

Добрый день! В моем случае в результате выполнения команды this.updateDetail({detail: "UsrMyDetailName", realoadAll: true}); в детали отображаются все записи из таблицы (как будто слетает фильтр по колонке Id объекта). В чем может быть причина?

Возможно, внутри детали есть какая-то логика, которая при таком запуске не сработала. См. похожие обсуждения тут и тут.

На самом деле проблема в том что конфигурационный параметр команды в этом обсуждении указан неверно: realoadAll. Должно быть reloadAll. Случайно обнаружил.

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

БП выполняется на сервере, а деталь находится в браузере пользователя. Следовательно, нужно посылать туда сообщение по ClientMessageBridge, ссылка в самом верху.

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