Добрый день!

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

Нравится

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

На примере базовой детали:

 

define("ContactCareerDetailV2",
	["ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"],
	function() {
		return {
			attributes: {
				IsEditable: {
					dataValueType: Terrasoft.DataValueType.BOOLEAN,
					value: true
				}
			},
			diff: /**SCHEMA_DIFF*/[
				{
					name: "DataGrid",
					operation: "merge",
					values: {
						activeRowAction: {bindTo: "onActiveRowAction"},
						activeRowActions: [
							{
								className: "Terrasoft.Button",
								imageConfig: {bindTo: "Resources.Images.SaveIcon"},
								markerValue: "save",
								style: Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
								tag: "save"
							},
							{
								className: "Terrasoft.Button",
								imageConfig: {bindTo: "Resources.Images.CardIcon"},
								markerValue: "card",
								style: Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
								tag: "card"
							},
							{
								className: "Terrasoft.Button",
								imageConfig: {bindTo: "Resources.Images.CancelIcon"},
								markerValue: "cancel",
								style: Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
								tag: "cancel"
							},
							{
								className: "Terrasoft.Button",
								imageConfig: {bindTo: "Resources.Images.RemoveIcon"},
								markerValue: "remove",
								style: Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
								tag: "remove"
							}
						],
						changeRow: {bindTo: "changeRow"},
						className: "Terrasoft.ConfigurationGrid",
						generateControlsConfig: {bindTo: "generateActiveRowControlsConfig"},
						generator: "ConfigurationGridGenerator.generatePartial",
						initActiveRowKeyMap: {bindTo: "initActiveRowKeyMap"},
						multiSelect: false,
						onGridClick: {bindTo: "onGridClick"},
						unSelectRow: {bindTo: "unSelectRow"}
					}
				}
			]/**SCHEMA_DIFF*/,
			methods: {
				getSwitchGridModeMenuItem: Terrasoft.emptyFn,
				onActiveRowAction: function(buttonTag, primaryColumnValue) {
					switch (buttonTag) {
						case "card":
							var row = this.getGridData().get(primaryColumnValue);
							this.saveRowChanges(row, function(p) {
								this.editRecord(row);
							}, this);
							break;
						case "remove":
							this.deleteRecords();
							break;
						case "cancel":
							this.discardChanges(primaryColumnValue);
							break;
						case "save":
							this.onActiveRowSave(primaryColumnValue);
							break;
					}
				},
				openCardByMode: function() {
					var cardState = this.get("CardState");
					var editPageUId = this.get("EditPageUId");
					var primaryValueUId = this.get("PrimaryValueUId");
					//в любом случае открываем страницу редактирования записи детали
					this.openCard(cardState, editPageUId, primaryValueUId);
 
					//кусок базовой логики
					/*if (this.getIsEditable() && cardState !== enums.CardStateV2.EDIT) {
						this.addRow(editPageUId);
					} else {
						this.openCard(cardState, editPageUId, primaryValueUId);
					}*/
				}
			},
			mixins: {
				ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities"
			}
		};
	});

 

На примере базовой детали:

 

define("ContactCareerDetailV2",
	["ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"],
	function() {
		return {
			attributes: {
				IsEditable: {
					dataValueType: Terrasoft.DataValueType.BOOLEAN,
					value: true
				}
			},
			diff: /**SCHEMA_DIFF*/[
				{
					name: "DataGrid",
					operation: "merge",
					values: {
						activeRowAction: {bindTo: "onActiveRowAction"},
						activeRowActions: [
							{
								className: "Terrasoft.Button",
								imageConfig: {bindTo: "Resources.Images.SaveIcon"},
								markerValue: "save",
								style: Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
								tag: "save"
							},
							{
								className: "Terrasoft.Button",
								imageConfig: {bindTo: "Resources.Images.CardIcon"},
								markerValue: "card",
								style: Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
								tag: "card"
							},
							{
								className: "Terrasoft.Button",
								imageConfig: {bindTo: "Resources.Images.CancelIcon"},
								markerValue: "cancel",
								style: Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
								tag: "cancel"
							},
							{
								className: "Terrasoft.Button",
								imageConfig: {bindTo: "Resources.Images.RemoveIcon"},
								markerValue: "remove",
								style: Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
								tag: "remove"
							}
						],
						changeRow: {bindTo: "changeRow"},
						className: "Terrasoft.ConfigurationGrid",
						generateControlsConfig: {bindTo: "generateActiveRowControlsConfig"},
						generator: "ConfigurationGridGenerator.generatePartial",
						initActiveRowKeyMap: {bindTo: "initActiveRowKeyMap"},
						multiSelect: false,
						onGridClick: {bindTo: "onGridClick"},
						unSelectRow: {bindTo: "unSelectRow"}
					}
				}
			]/**SCHEMA_DIFF*/,
			methods: {
				getSwitchGridModeMenuItem: Terrasoft.emptyFn,
				onActiveRowAction: function(buttonTag, primaryColumnValue) {
					switch (buttonTag) {
						case "card":
							var row = this.getGridData().get(primaryColumnValue);
							this.saveRowChanges(row, function(p) {
								this.editRecord(row);
							}, this);
							break;
						case "remove":
							this.deleteRecords();
							break;
						case "cancel":
							this.discardChanges(primaryColumnValue);
							break;
						case "save":
							this.onActiveRowSave(primaryColumnValue);
							break;
					}
				},
				openCardByMode: function() {
					var cardState = this.get("CardState");
					var editPageUId = this.get("EditPageUId");
					var primaryValueUId = this.get("PrimaryValueUId");
					//в любом случае открываем страницу редактирования записи детали
					this.openCard(cardState, editPageUId, primaryValueUId);
 
					//кусок базовой логики
					/*if (this.getIsEditable() && cardState !== enums.CardStateV2.EDIT) {
						this.addRow(editPageUId);
					} else {
						this.openCard(cardState, editPageUId, primaryValueUId);
					}*/
				}
			},
			mixins: {
				ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities"
			}
		};
	});

 

Спасибо, Данила! Настройка работает.

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

Коллеги, доброго дня!

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

Что то никак не можем записать его в облачную систему.

Подскажите,  какие варианты есть. Спасибо!

Нравится

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

По идее, если на сайте перед отправкой, преобразовать файл в BLOB, то никаких проблем со вставкой в BPM возникнуть уже не должно

Как вариант, можно не использовать механизм лендингов, а по веб-форме, не связанной с bpm'online, генерировать и отправлять письмо со вложениями.

Затем в bpm'online его разбирать как обычное письмо со вложениями. Подробнее см. обсуждение похожего вопроса.

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

Коллеги, спасибо!  Таки уже реализовали через лендинг). Проблема была, что лендинг только с одной табл.работает. Только преобразование файла в BLOB результата не дает. Нужно  положить файл в другую табл. Трудоемко конечно получилось, но работает).

Елена К,

Елена, добрый день! Нам тоже необходимо передавать файл в лиде, поделитесь, пожалуйста, деталями настройки)

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

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

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

Нравится

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

Это определяется атрибутом CommentsVisible в схеме SocialMessageHistoryItemPageV2:

 * Comments block visibility attribute.
 */
"CommentsVisible": {
	"dataValueType": this.Terrasoft.DataValueType.BOOLEAN,
	"type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
	"value": false
},

И его состояние считывает и инвертирует та самая ссылка-переключатель «Комментарии (1)»:

/**
 * Toggle comments block visibility and load first portion of comments if it is visible and empty.
 * @protected
 */
toggleCommentsVisibility: function() {
	if (this.get("CommentCount") < 1) {
		return;
	}
	var newVisibilityState = !this.get("CommentsVisible");
	this.set("CommentsVisible", newVisibilityState);
	if (newVisibilityState && this.get("ShownCommentMessagesCount") === 0) {
		this.onLoadNextComment();
	}
},

Нужно смотреть и экспериментировать, достаточно ли поменять атрибут на true, или нужно будет при открытии ещё принудительно вызывать логику загрузки комментариев.

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

Всем доброго времени суток. Версия 7.12.

Настроили для раздела Обращений несколько страниц редактирования, в соответствии со схемой: https://academy.terrasoft.ru/documents/common/7-12/kak-nastroit-svoystv…

После переноса пакета на другую площадку в разделе остаётся одна страница - основная CasePage.

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

Нравится

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

Такая проблема все время проявляется при добавлении страниц редактирования для стандартных разделов. Мы её решаем добавлением в пакет sql скрипта, который принудительно прописывают связи для разных страниц.

Вот такой, например(этот скрипт применялся для разных страниц редактирования продукта). Поэтому посмотрите БД и попробуйте аналогично

update SysModuleEdit set TypeColumnValue = 'C296C34D-D083-4E8C-A318-BBB1647C4B5E', ActionKindCaption=N'Шины', PageCaption=N'Шины' where id = '90986556-A3E8-4882-AFD1-EFD98A08F836'
update SysModuleEntity set TypeColumnUId='AC574603-A4DB-410C-877D-E383C0A6C51A' where Id = '48A9D1A5-2DB8-4474-8E5B-F81DBC5E1454'

 

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



И пробовали ли вы после установки пакета очистить кеш?

Колодяжный Владислав Эдуардович,

схемы все переносятся и отображаются в пакете.

Однако в свойствах раздела после переноса установлена настройка "Использовать одну страницу редактирования", причём изменить эту настройку невозможно.

Смородинов Денис,

А данные из SysModuleEdit Вы переносили?

Посмотрите обсуждение здесь.

Такая проблема все время проявляется при добавлении страниц редактирования для стандартных разделов. Мы её решаем добавлением в пакет sql скрипта, который принудительно прописывают связи для разных страниц.

Вот такой, например(этот скрипт применялся для разных страниц редактирования продукта). Поэтому посмотрите БД и попробуйте аналогично

update SysModuleEdit set TypeColumnValue = 'C296C34D-D083-4E8C-A318-BBB1647C4B5E', ActionKindCaption=N'Шины', PageCaption=N'Шины' where id = '90986556-A3E8-4882-AFD1-EFD98A08F836'
update SysModuleEntity set TypeColumnUId='AC574603-A4DB-410C-877D-E383C0A6C51A' where Id = '48A9D1A5-2DB8-4474-8E5B-F81DBC5E1454'

 

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

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

При установке пакета возникла ошибка:

"Не удалось загрузить файл на сервер"

Решение темы https://community.terrasoft.ru/questions/ustanovka-paketov-iz-prilozenia не помогло, в чем еще может быть проблема?

Нравится

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

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

Также см. похожие случаи.

Зверев Александр, ЛОГИ пустые, ни одной строчки!

 

Значит, логирование не настроено или смотрите не там. При каждом сбое должно писать в текстовые log-файлы стек вызова функций и прочее.

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

Шаги воспроизведения:

Сайт клиента:

Версия: 7.12 Service Ent

 

Коллеги, требуется помощь.

По штатному функционалу https://academy.terrasoft.ru/documents/technic-sdk/7-13/rabota-s-obekta….

При добавлении пользователя в коллекцию SysAdminUnitCollection при сохранении вылетает ошибка, хотя при создании, например Контактов - всё ОК:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>4ForbiddenForbiddenSystem.Data.Services.DataServiceException   at System.Data.Services.DataServiceConfiguration.CheckResourceRights(ResourceSetWrapper container, EntitySetRights requiredRights)&#xD;

   at System.Data.Services.Serializers.Deserializer.HandlePostRequest()&#xD;

   at System.Data.Services.DataService`1.HandlePostOperation(RequestDescription description, IDataService dataService)&#xD;

   at System.Data.Services.DataService`1.ProcessIncomingRequest(RequestDescription description, IDataService dataService)&#xD;

   at System.Data.Services.DataService`1.HandleNonBatchRequest(RequestDescription description)&#xD;

   at System.Data.Services.DataService`1.HandleRequest()

Авторизуюсь в сервисе под Supervisor.

Доступ к операциям и Доступ к объекту для внешних сервисов добавлен для SysAdminUnit на чтение, добавление, удаление, изменение.

Заранее благодарен за помощь.

Нравится

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

В коде веб-сервиса жёстко зашиты права только для чтения, если схема начинается на «Sys» или «VwSys» (с небольшим списком исключений).

Значит, добавление по OData для этой таблицы применять нельзя.

Спасибо за информацию!

Ну и дела!

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

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

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

file: undefined
line: undefined
column: undefined
message: Элемент с ключом 33e46153-d870-42af-a250-8d8a9ecae940 Не существует 
 date: Thu Nov 15 2018 16:02:43 GMT+0500 (Екатеринбург, стандартное время)
moduleId: undefined
moduleName: undefined





Пишет что id не найден, смотрел в БД, таблицу SysSchema там реально этого UId нету, но зато есть эта карточка но с другим Id

Почему так могло произойти ? И как это можно исправить ?



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





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

Нравится

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

Уточните, возникают ли какие-то ошибки в консоли просто при открытии этой карточки редактирования?

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

Попробуйте сравнивать наполнение системных таблиц, связанных с разделами (вроде SysModule, SysModuleEdit и т.д.) для этого и для нормально работающего разделов. Либо произведите автоматический поиск по всем полям всех таблиц базы, чтобы найти, где именно записан этот ID 33e46153-d870-42af-a250-8d8a9ecae940.

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

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

В результате имеем двух пользователей, синхронизированных LDAP, но с единым контактом.

Какой нужно выполнить запрос в поднятый бэкап БД для дедубликации или есть ещё какой либо способ. Откат не желателен.

Нравится

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

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

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

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

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

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

Нравится

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

Руслан Хасанов пишет:

Подскажите, пожалуйста, в какой момент происходит публикация сообщения? Или более подробный пример. Спасибо!

Публикацию сообщения делаете тогда, когда получили нужную вам Id, которую хотите куда-либо передать, например выделенную запись, можно сразу передать в isAnySelected так:

this.sandbox.publish("Название сообщения", config, ["_Подпись сообщения для однозначной идентификации"]);
this.sandbox.publish("TestMesag", config, ["_TestMesag"]);



Так же не забываем добавить сами сообщения на странице:

 

messages: {
			"TestMesag": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.PUBLISH
			}
		}

config - объект нужных параметров, например:

 var config = {
                            Id: rowId,
                            Contract: contractId,
                            Type: typeId
                        };

 

Для выделенной записи реестра:

 

isAnySelected: function() {
	this.callParent(arguments);
	var row = this.getActiveRow();
}

 

Литвинко Павел,

Но как эту переменную row передать из Секции в пейджу?

Можно например через сообщение передать

this.sandbox.publish("RowSelectedz", { Id: rowId }, ["_RowSelectedz"]);

А на странице потом получить

onEntityInitialized: function() {
                this.callParent(arguments);
                this.sandbox.subscribe("RowSelectedz", function(arg) {
                    this.set("И например в атрибут значение установить", arg.Id);
}

Либо, второй вариант, вызывать openCardInChain и туда конфиг параметров передать, но это удобно когда просто карточку открыть новую, а при копировании надо глянуть, что там вызывается и как и доработать

 

var config = {
	sandbox: this.sandbox,
	schemaName: this.getEditPageSchemaName(typeColumnValue),
	operation: ConfigurationEnums.CardStateV2.COPY,
	moduleId: this.getChainCardModuleSandboxId(typeColumnValue),
	defaultValues: defaultValues
};
this.openCardInChain(config);

 

По идее может быть достаточно будет CardStateV2.COPY, поправил в коде выше это

Литвинко Павел,

благодарю за помощь, попробуем сендбоксами.

Подскажите, пожалуйста, в какой момент происходит публикация сообщения? Или более подробный пример. Спасибо!

Руслан Хасанов пишет:

Подскажите, пожалуйста, в какой момент происходит публикация сообщения? Или более подробный пример. Спасибо!

Публикацию сообщения делаете тогда, когда получили нужную вам Id, которую хотите куда-либо передать, например выделенную запись, можно сразу передать в isAnySelected так:

this.sandbox.publish("Название сообщения", config, ["_Подпись сообщения для однозначной идентификации"]);
this.sandbox.publish("TestMesag", config, ["_TestMesag"]);



Так же не забываем добавить сами сообщения на странице:

 

messages: {
			"TestMesag": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.PUBLISH
			}
		}

config - объект нужных параметров, например:

 var config = {
                            Id: rowId,
                            Contract: contractId,
                            Type: typeId
                        };

 

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

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

Нравится

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

Вы можете через SQL сценарии или если есть доступ к SQL серверу выполнить запрос на разблокировку вашего пакета:

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

UPDATE [Название БД].[dbo].[SysPackage]
    SET InstallType = 0, [IsChanged] = 1, [IsLocked] = 1
    WHERE Name = 'Название пакета'
 
В некоторых случаях может потребоваться еще изменение значения Maintainer на Customer

 

Добрый день, вам через svn перенести бы изменения

Вы можете через SQL сценарии или если есть доступ к SQL серверу выполнить запрос на разблокировку вашего пакета:

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

UPDATE [Название БД].[dbo].[SysPackage]
    SET InstallType = 0, [IsChanged] = 1, [IsLocked] = 1
    WHERE Name = 'Название пакета'
 
В некоторых случаях может потребоваться еще изменение значения Maintainer на Customer

 

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

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