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

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

message: Cannot read property 'source' of undefined

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

Нравится

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

Здравствуйте, Константин!
Уточните, пожалуйста, версию, на которой воспроизводится ошибка и в каком именно разделе.
Ошибка может быть связана с нарушением иерархии объектов при замещении, что приводит к тому, что метод страницы вызывается до построения объекта и обращается к нему, и, соответственно, не находит.
Спасибо, что сообщили об ошибке!

build 7.0.1.234
на 7.0.1.335 удалось это исправить повторным созданием всех LocalizableString и Images. Замещаемый модуль - ViewModule, тоже самое происходит и в ProfileModule

Кстати, безумно не удобно, и приходиться тратить большое количество времени, на переопределение всех LocalizableString, Dependencies, Images и Messages у замещаемого модуля. Уж если происходит замещение родителя, то логично было бы (ИМХО) наследовать все его свойства

Константин, то, что LocalizableString, Dependencies, Images и Messages не копируются в замещающий объект - это нормальное поведение системы, которое в дальнейшем, возможно, будет изменено.
Дополнительный вопрос по поводу ошибок.
После создания замещающего модуля Вы генерировали метаданные и исходный код, компилировали всю сборку заново, чистили Redis?

"Андрей Каспаревич" написал:

После создания замещающего модуля Вы генерировали метаданные и исходный код, компилировали всю сборку заново, чистили Redis?

С уважением,

Каспаревич Андрей

Эксперт 3-й линии поддержки

Естественно.

Константин, в таком случае ошибка была вызвана тем ,что изначально Вы не добавили LocalizableString, Dependencies, Images и Messages в замещающий модуль.
Базовая логика работы системы предусматривает, что при замещении модуля необходимо полностью реализовать его функциональность.

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

Добрый день, нужна ваша консультация,
Задача такая: Страница карточки задачи(TaskEditPage) надо сделать не активными связи(Юр. Лицо, Физ. Лицо, Воздействие ….) , смотрим на права пользователя если есть делать активным а если нет то делаем не активным, как это можно реализовать? Может вы дадите идею как сделать правильнее, если можно с примерами, заранее спасибо.

Версия BPMOnline: 5.1.1.155

Нравится

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

В скрипт PageLoadComplete что нибудь вроде

if ((currentUserContactId == VedId1) || (currentUserContactId == VedId2)){
			Page.GoodsLookupEdit.Enabled = true;
}else{
Page.GoodsLookupEdit.Enabled = false;
}

"Шамуилов Александр" написал:

В скрипт PageLoadComplete что нибудь вроде

if ((currentUserContactId == VedId1) || (currentUserContactId == VedId2)){

                        Page.GoodsLookupEdit.Enabled = true;

}else{

Page.GoodsLookupEdit.Enabled = false;

}

В этом участке кода вы проверяете только на два пользователя if ((currentUserContactId == VedId1) || (currentUserContactId == VedId2)){, а если будет 500 -600 пользователей?
Как этим быть?

ну это я для примера, условие какое проверять -- любое, Ваша фантазия неограниченна :wink:

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

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

Создал объект детали, создал страницу, перенес изменения из тестовой базы. При добавлении детали в Рабочих местах указываю объект, получаю ошибку :
Exception Message: Элемент с идентификатором "5341c111-59a5-4f60-9fe5-5cc2d543239f" не найден
Exception Type: Terrasoft.Common.ItemNotFoundException
Exception Source: Terrasoft.Core
В чем может быть дело ? (BPMonline 5.4)
Посмотрел конфигурацию - получается что объект и страница не перенеслись в конфигурацию. В основной не открываются, только в тестовой

Нравится

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

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

Спасибо, генерация помогла

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

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

Нравится

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

Антон, общий алгоритм решения задачи сводится к следующему:
1) регистрация View в базе данных (таблица [SysModuleGrid] и [SysModuleGridView]);
2) создание соответсвующего объекта в конфигурации;
3) привязка созданного представления к разделу.

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

"Андрей Каспаревич" написал:

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

С уважением,

Каспаревич Андрей

Эксперт 3-й линии поддержки

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

BPMONLINE 7

К сожалению пока в BMPonline 7.0 простого способа реализации добавления представлений для реестра не предусмотрено. Возможно они появятся в будущем.
Сейчас альтернативой может послужить использование настроенных динамических групп.
В вашем случае это будет настройка по типу Приход/Расход.

С уважением,
Фещенко Денис
Разработчик BMPonline

"Фещенко Денис" написал:

К сожалению пока в BMPonline 7.0 простого способа реализации добавления представлений для реестра не предусмотрено. Возможно они появятся в будущем.

Денис, а не простой способ?

Реализовать представления ,так как Вы нарисовали на скриншоте (в меню вкладок) без доработок в базовых модулей невозможно.
Нашел немного другой способ, который, думаю, вас устроит:
Вы можете в разделе зарегистрировать действие для каждого представления:

this.actions = [
{
		caption: “Приход”,
		methodName: 'showIncome'
}]

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

this.methods. showIncome= function() {
			this.set("OperationFilterType", ‘Income’);
			this.set('tabName', ‘Операции - Приход’);
			this.clear(this.get('currentTabName'));
			this.load(this.get('currentTabName'));
		}; 

И все что Вам останется это – дополнительно в разделе определить метод modifySelectQuery. В котором вы на основе этого атрибута дополнительно наложите фильтр на запрос.

this.methods.modifySelectQuery = function(select, tabName, event) {
		var operationFilterType = this.get('OperationFilterType'); 
		if (operationFilterType === ‘Income') {
				/*Накладываем фильтр на select* /
		}
}

Надеюсь это решение Вам подойдет.

"Фещенко Денис" написал:

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

Нашел немного другой способ, который, думаю, вас устроит:

Вы можете в разделе зарегистрировать действие для каждого представления:

this.actions = [

{

                caption: “Приход”,

                methodName: 'showIncome'

}



]

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

this.methods. showIncome= function() {

                        this.set("OperationFilterType", ‘Income’);

                        this.set('tabName', ‘Операции - Приход’);

                        this.clear(this.get('currentTabName'));

                        this.load(this.get('currentTabName'));

                };

И все что Вам останется это – дополнительно в разделе определить метод modifySelectQuery. В котором вы на основе этого атрибута дополнительно наложите фильтр на запрос.

this.methods.modifySelectQuery = function(select, tabName, event) {

                var operationFilterType = this.get('OperationFilterType');

                if (operationFilterType === ‘Income') {

                                /*Накладываем фильтр на select* /

                }

}

Надеюсь это решение Вам подойдет.

Что-то у меня не получилось с методом modifySelectQuery добавил вот такой код

		this.actions = [
			{
				caption: 'Приход',
				methodName: 'showIncome'
			},
			{
				caption: 'Расход',
				methodName: 'showExpense'
			}
		];
		this.methods.showIncome = function() {
			this.set("OperationFilterType", 'Income');
			this.set('tabName', 'Операции - Приход');
			this.clear(this.get('currentTabName'));
			this.load(this.get('currentTabName'));
		};
		this.methods.showExpense = function() {
			this.set("OperationFilterType", 'Expense');
			this.set('tabName', 'Операции - Расход');
			this.clear(this.get('currentTabName'));
			this.load(this.get('currentTabName'));
		};
		this.methods.modifySelectQuery = function(select, tabName, event) {
			var operationFilterType = this.get('OperationFilterType');
			if (operationFilterType === 'Income') {
				select.filters.addItem('IncomingFilter', Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.EQUAL,
						'OperationType', ConfigurationConstants.Incoming.Code));
			}
			if (operationFilterType === 'Expense') {
				select.filters.add('IncomingFilter', Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.EQUAL,
						'OperationType', ConfigurationConstants.Expense.Code));
			}
		};

Фильтры не отрабатывают

Антон, будьте внимательней.
Метод "select.filters.addItem" принимает 1-н параметр - сам фильтр. Из-за этого он у Вас не отрабатывает.
А Ваш код для наложения фильтров при OperationFilterType = "Expense" должен работать (если вы правильно построили сам фильтр). Только что проверил аналогичное использование фильтрации.

Денис, исправил фильтр.
Но дело в том, что у меня метод modifySelectQuery не вызывается вообще

Добрый день, Антон!
Возможно у Вас старая версия базовых пакетов.
Загляните в модуль "SectionViewModelGenerator" есть ли там в методе "getSelect" вызов функции "modifySelectQuery".
Если есть - то вам нужно в "дебаге" посмотреть чего она у Вас не вызывается.
Если нет - то нужно просто обновить базовые пакеты.

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

Добрый день !!!
У меня возникла проблема с созданием детали с полями:
1. Первое я не могу добавить зависимости(Dependency) (Конфигурация - Добавить - Схема модели представление детали с полями)
2. Не могу понять как строится представление детали (где описываются контролы и так далее), смотрел на схемы: NUI.AnniversaryDetail.js, NUI.AddressDetail.js, хотелось бы описание что за что атрибут/метод отвечает и что делает если можно

Нравится

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

Добрый день, Сергей.

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

7.0.1.328
Почти разобрался, щас еще разбираюсь.
1. Не добавлялась так как вначале представление не было создано, после создание зависимости и так далие добавляются.
2. Половину разобрал осталась вторая
Я бы хотел что бы можна было добавлять групу контролов но не в столбец, а в строку и еще как можна добавить простой лейбл ?

И еще одно к детали можно применять бизнес правила ?
Не работает, но на атрибуте работает это правило, проверял

{
	name: 'accountInternetActivityDetail',
	schemaName: 'AccountInternetActivityDetail',
	type: Terrasoft.ViewModelSchemaItem.DETAIL,
	filterPath: 'Account',
	filterValuePath: 'Id',
	caption: 'Work',//resources.localizableStrings.accountInternetActivityDetail,
	visible: true,
	collapsed: false,
	leftWidth: '60%',
	rightWidth: '40%',
	wrapContainerClass: 'control-group-container',
	rules: [
	      {
		ruleType: BusinessRuleModule.enums.RuleType.BINDPARAMETER,
		property: BusinessRuleModule.enums.Property.VISIBLE,
		conditions: [
		    {
		       leftExpression: {
			  type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
			  attribute: 'LocationDisposal'
		       },
		       comparisonType: Terrasoft.ComparisonType.EQUAL,
		       rightExpression: {
		            type: BusinessRuleModule.enums.ValueType.CONSTANT,
			    value: '965b0ead-4809-4a21-9151-907174066a0f'
		        }
		}
	     ]
	   }
	]
}

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

"Maxim Gritsenko" написал:

Сергей, лейбл пока вывести нельзя. Недавно этот функционал был добавлен и будет доступен в сборках ~7.0.1.500+.

Касательно остального, сейчас уточняем у разработки.


А можно это как-то сделать своими силами ? типа добавить HTML тег или чтото в этом роде ?

Доброе утро, Сергей.

Я попробовал из контекста функции отрендерить лейбл через Ext в контейнер:

Ext.create('Terrasoft.controls.Label', {
renderTo: Ext.get('autoGeneratedLeftContainer'),
caption: "ABVGD"
});

Получилось так:

Нашел такие свойства у Terrasoft.controls.Label:

: String
Свойство обеспечивает более короткую альтернативу для создания объектов, чем при использовании полного имени класса. ...

caption : String
Текстовая надпись внутри элемента ...

classes : ObjectVIRTUAL
Объект для спецификации CSS-классов компонента указанных в шаблоне. ...

destroyed : Boolean
Флаг уничтожения объекта. ...

enabled : Boolean
Признак указывает на то что компонент включен ...

font : String
Шрифт элемента ...

hasListeners : ObjectREADONLY
This object holds a key for any event that has a listener. ...

html : String
Строка готовой HTML-разметки для вставки в DOM. ...

inputId : String
Id элемента к которому привязан label ...

instanceId : String
Идентификатор экземпляра ...

isComponent : String
Признак, указывающий на то, что данный объект является компонентом. ...

isObservable : Boolean
true in this class to identify an object as an instantiated Observable, or subclass thereof. ...

markerValue : String
Значение маркерного dom-атрибута data-item-marker. ...

renderTo : ObjectVIRTUAL
Указывает ссылку на Ext.Element в который будет рендериться элемент управления. ...

rendered : BooleanREADONLY
Признак, который указывает на то, что комонент отрендерен. ...

rendering : BooleanREADONLY
Признак, который указывает на то, что комонент находится в фазе рендеринга. ...

styles : ObjectVIRTUAL
Объект для спецификации inline-стилей компонента указанных в шаблоне. ...

tabIndex : Number
Индекс фокуса ...

tag : String
Строка дополнительных параметров компонента. ...

tplData : ObjectVIRTUAL
Объект содержащий параметры для шаблона элемента управления. ...

visible : Boolean
Признак указывает на видимость элемента управления. ...

width : String/Number
Ширина элемента, если установлено число тогда ширина будет вычисляться в пикселях, если установлена строка - то согла...

wordWrap : Boolean
Разрыв строки, по умолчанию true (включен) ...

Правильно ли я понимаю:
Метод Ext.create, создает контрол и вставляет его куда я захочу ? а функцыя Ext.get('autoGeneratedLeftContainer') возвращает нам елемент куда мы его будем вставлять ? Как мне взять узнать имя куда его вставлять ? Так как я пробую имена своих груп мне возвращает undefined. Я этот метод вызываю где, в userCode? или гдето в другом месте ?
И как обстоят дела с бизнес правилами к детали и групам ? и построения контролов в ряд а не в столбец ? Видел подобное в карточке Счета к "напомнить ответственному"но если сменить имя контрола оно уже не будет строить в ряд... я так полагаю это гдето выше персится и меняется

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

"Олейник Дмитрий" написал:

Да, все верно.

Можно добавлять кнопки, лейблы и т.д.

Имена контролов куда рендерить можно узнать в консоли, через инспектор объектов:

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

1.png
226.26 кб

С уважением,

Олейник Дмитрий

Эксперт 3-й линии поддержки


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

Добрый день.

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

"Maxim Gritsenko" написал:Добрый день.

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


что нужно дорабатывать ? Страницу генерации ? или css классы ? если нужно css классы то как их добавить ?

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

"Maxim Gritsenko" написал:

Сергей, перенаправляю вопрос разработчикам.

В поддержке не реализовывали, необходимой информацией не владеем.

В ближайшее время постараемся предоставить ответ от департамента разработки.


Ок, спасибо. Надеюсь ответ долго не заставит себя ждать =)

Добрый день.

Специалисты департамента разработки предлагают следующее решение:
Можно задавать обтекание для контейнера используя свойство styles:

styles: {
wrapStyles: {
'float': 'left'
}
},

Чтобы использовать эту возможность нам нужно сгенерировать представление, в котором мы будем что-то менять. Для этого нужно использовать функцию getCustomItemView.
При помощи определения этой функции в своей детали мы можем отдать полный конфиг представления для элемента детали. Использование этой функции можно посмотреть в детали средств связи.

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

Всем привет, кто нибудь сталкивался с задачкой, где необходимо отправлять GET/POST запросы на сторонние сервера и получать ответы на эти запросы и далее с ними работать? Если да, то поделитесь своим опытом пожалуйста.

Нравится

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

Добрый день!

Можно посылать веб серверу POST(GET, etc) запросы: для этого нужно использовать объект ActiveXObject. Пример получения курса валют от веб сервера, с помощью GET запроса:

var webAddress = "http://cbr.ru/scripts/XML_daily.asp";
var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.6.0");
xmlHttpReq.open("GET", webAddress, false); //or “POST”            
xmlHttpReq.send();
var WebServAnswer = xmlHttpReq.responseText;
Показать все комментарии

Сделал деталь к разделу Продукция, зарегистрировал.
В объекте детали две колонки, справочники на объект этого же раздела. Одна из них связь с объектом раздела, вторая аналог продукции.
При добавлении новой записи на деталь все в порядке, выбираются значения из справочника.
После сохранения записи детали сразу же в реестре записей детали в этих колонках Нет доступа> пишет и если открыть карточку записи детали в соответствующих полях то же самое.

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

Нравится

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

Александр. Похожая проблема. Поддержка молчит.
http://www.community.terrasoft.ru/forum/topic/9727

Складывается ощущение, что проблема в как раз в том, что колонки-справочники ссылаются на сам объект раздела.........
Костылей не хочется делать......
Только если в вашем случае я еще как то могу понять, то у меня вообще колонки в другом объекте, пусть это и объект детали раздела.
Надо ТП раскочегарить!

"Шамуилов Александр" написал:Складывается ощущение, что проблема в как раз в том, что колонки-справочники ссылаются на сам объект раздела.........

+1 :smile:

"Александр Кудряшов" написал:
Шамуилов Александр пишет:

Складывается ощущение, что проблема в как раз в том, что колонки-справочники ссылаются на сам объект раздела.........

+1 :smile:


Приятно, но толку то? :wink:

Молчат. Как рыбы. :smile:
Придется писать "костыль".

"Шамуилов Александр" написал:Молчат. Как рыбы. :smile:
Придется писать "костыль".

Да рад бы подсказать, но не могу воспроизвести... но видел я такое точно.
Вместо костыля могу предложить попробовать удалить и пересоздать эти поля в объекте, а затем и на странице. Кстати то что "нет данных" на уровне карточки редактирования и реестра - говорит о проблеме объекта...

Не "нет данных", а <Нет доступа>!!!!!

Объект только что создан

"Шамуилов Александр" написал:

Не "нет данных", а <Нет доступа>!!!!!

Объект только что создан


Опечатался :) то что он создан не значит что все в нем корректно создалось, потому и предлагаю эксперимент по пересозданию
Как вариант отлаживать традиционным Page.BaseMessagePanel.AddMessage - смотреть что там за Id в этом поле подтягивается и так далее

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

Объект создался нормально, все галки типа "Отображаемое значение" и загрузка данных в реестре все выставлено правильно. Три раза проверял.

Записи в БД корректные.

Проблема конкретно в том, что при существовании в объекте детали раздела колонки-справочника для которой источником стоит объект этого же раздела, отображение данных не работает.

Я хочу знать: это баг или фича?
Баг -- исправляйте.
Фича -- объясните за каким лешим так и всё равно исправляйте, потому что так не должно быть.

И не морочьте мне голову.

"Шамуилов Александр" написал:Я хочу знать: это баг или фича?
Баг -- исправляйте.
Фича -- объясните за каким лешим так и всё равно исправляйте, потому что так не должно быть.

И не морочьте мне голову.


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

Сорри, думал Вы из Террасофта :smile:.

Да есть текстовое поле, стоит для отображения.

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

Что то создается у меня ощущение, что "департамент разработки" и /dev/null в террасофте синонимы :smile:

Гыуки негодуют, работать хотят, начальство в ярости, а /dev/null и ныне там.....

Александр здравствуйте, предлагаю попробовать такое решение. Такое поведение наблюдается когда у объекта, на который ссылается ваша колонка из детали не выбрано "Отображаемое значение". Но в данном случае при создании нового объекта детали, при попытке выбрать данный объект, в странице выбора из справочника при ее открытии отображается сообщение о том, что не выбрано отображаемое значение в данном объекте. Вы писали "нормально, все галки типа "Отображаемое значение" и загрузка данных в реестре все выставлено правильно". Пытаюсь уточнить насчет того, правильно ли вы все сделали, потому что галка "Отображаемое значение" не галка, а выбираемое значение текстовой колонки объекта. Предлагаю еще раз проверить наличие "Отображаемого значения" и если оно все же выбрано, то удалить его и опубликовать объект. После этого проверить поведение системы (При этом так же должно в поле реестра детали отображаться "Нет доступа", но и при выборе из справочника, при создании новой детали должно отображаться сообщение о недоступности отображаемого значения). После этого попробовать заново выбрать "Отображаемое значение" и снова проверить поведение системы. Ждем от Вас ответа, спасибо.

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

Мда... Мне кажется, за dev/null и за "И не морочьте мне голову" можно было бы и извиниться по прошествии двух суток бездействия.

Правда ваша, прошу прощения, эмоции...

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

Можно ли в рамках существующей лицензии поднять "рядом" еще один сервер bpm для разработки и отладки? И как организовать процесс переноса изменений? Через метаданные?

Для тех, кому интересно, обсуждение продолжено сюда :wink:

"Крюков Н.А." написал:

Александр здравствуйте, предлагаю попробовать такое решение. Такое поведение наблюдается когда у объекта, на который ссылается ваша колонка из детали не выбрано "Отображаемое значение". Но в данном случае при создании нового объекта детали, при попытке выбрать данный объект, в странице выбора из справочника при ее открытии отображается сообщение о том, что не выбрано отображаемое значение в данном объекте. Вы писали "нормально, все галки типа "Отображаемое значение" и загрузка данных в реестре все выставлено правильно". Пытаюсь уточнить насчет того, правильно ли вы все сделали, потому что галка "Отображаемое значение" не галка, а выбираемое значение текстовой колонки объекта. Предлагаю еще раз проверить наличие "Отображаемого значения" и если оно все же выбрано, то удалить его и опубликовать объект. После этого проверить поведение системы (При этом так же должно в поле реестра детали отображаться "Нет доступа", но и при выборе из справочника, при создании новой детали должно отображаться сообщение о недоступности отображаемого значения). После этого попробовать заново выбрать "Отображаемое значение" и снова проверить поведение системы. Ждем от Вас ответа, спасибо.

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

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

В процессе эксплуатации BPM я понял, что если у меня есть реестр в детали или основной реестр в разделе, то перейти к "связанным" записям (например Договор - поле "Контрагент", "Контакт", и так далее) можно через контекстное меню "Перейти к..." только если в реестре отображается колонка с соответствующим полем.
А если полей-справочников много, все колонки мне видеть совершенно ни к чему, но переход к этим записям все же нужен? Понятно, что можно сделать свое контекстное меню с нужными пунктами:smile:
Но наверняка есть некий простой способ добиться отображения всех "связанных" объектов в штатном меню независимо от настроек реестра?

И сразу же второй вопрос - а от какого параметра/хитрого скрипта зависит то, что из детали раздела можно перейти к соответствующей записи в разделе? Скажем из детали "Продукты" в "Документах" перейти в раздел "Продукты"? Нет ведь такой возможности по-умолчанию.

Нравится

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

Здравствуйте, Александр!
Формирования списка меню "Перейти к" формируется в mainPage в обработчике события "PageLoadComplete", а если конкретнее, то начиная с 159 строки:

var entitySchemaQuery = new EntitySchemaQuery(entitySchemaManager, "SysModule");
entitySchemaQuery.Cache = UserConnection.SessionCache.WithLocalCaching(TSConfiguration.CacheUtilities.WorkspaceCacheGroup);
EntitySchemaQueryColumn entitySchemaColumn = entitySchemaQuery.AddColumn("SysModuleEntity.SysEntitySchema");			
EntitySchemaQueryColumn pageSchemaColumn = entitySchemaQuery.AddColumn("SysPageSchema");
entitySchemaQuery.Filters.Add(entitySchemaQuery.CreateIsNotNullFilter("[SysModuleInSysModuleFolder:SysModule].Id"));
entitySchemaQuery.CacheItemName = "window.modules";
EntityCollection modulesCollection = entitySchemaQuery.GetEntityCollection(Page.UserConnection);
var modules = new Dictionary<string, Guid>();
foreach(var module in modulesCollection) {
	var pageSchemaId = entitySchemaQuery.GetTypedColumnValue<Guid>(module, pageSchemaColumn.Name);
	var schemaId = entitySchemaQuery.GetTypedColumnValue<Guid>(module, entitySchemaColumn.Name);
	string key = "'"+schemaId.ToString()+"'";
	if ((pageSchemaId != Guid.Empty) && (schemaId != Guid.Empty) && (!modules.ContainsKey(key))) {
		modules.Add(key, pageSchemaId);
	}
}

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

Андрей, посмотрел данный код... результатом его является просто список некоторых реквизитов ВСЕХ модулей системы. Не вижу формирования элемента контекстного меню. Нет назначения элементу меню обработчика.
Формирование меню где-то глубже...

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

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

Андрей, а можно ли уточнить принципы формирования - они совершенно не понятны. Примеры я привел - деталь Продукты в Документах, нет перехода к продукту (1). В реестре есть переход только к тем объектам, соответствующие которым колонки вынесены в реестр (2). Но, несмотря на (2), в детали продукты поле Продукт (справочник!) в реестр вынесено и перехода по-прежнему нет...
Можно сформулировать это как пожелание - чтобы в реестрах был всегда переход ко всем связанным объектам (как это всегда работало в продуктах линейки 3.х)
Переход из дочерней детали (пример 1) в раздел, допускаю что сделать сложнее, но опять же выскажу это пожелание...

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

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

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

Нравится

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

Вот тоже такую ошибку видел. Причина - на рабочем сервере у вас данные уже в этой таблице есть, а вы создаете новое поле либо модифицируете существующее, установив обязательность заполнения.
У меня получилось обойти так: опубликовать без признака обязательно к заполнению, а затем опубликовать, установив признак.
А как "выбрать действие для исправления" нам расскажет, надеюсь, поддержка:smile: сам с удовольствием почитаю

Обязательность лучше выставлять "на уровне приложения", во избежание.

"Зверев Александр" написал:Обязательность лучше выставлять "на уровне приложения", во избежание.

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

Так признак обязательности и выставлен "на уровне приложения"

Илья, а не пробовали установить каскадную связь?
Если после установления каскадной связи проблема останется, прошу предоставить данные для удаленного доступа.

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

У меня на сервере есть html файл как его отобразить в системе

Нравится

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

Нужно передать ваш html на клиент в виде строки. Например через сервис конфигурационный.
html разметку нужно вставить в Terrasoft.Component.
Созданный компонент добавить во view
Пример создания Terrasoft.Component:

var html = '<img id = "' + name + '-img-control" class = "' + className + '" src="' + imageUrl + '">';
var component = {
	className: 'Terrasoft.Component',
	html: html,
	selectors: {
		wrapEl: '#' + name + '-control'
	}
};

Александр, мне нужно при нажатие на кнопку просмотреть в Реестре вывести на экран не страницу редактирования со значениями а html форму сформированную на сервере

Возможным вариантом решения есть создание своего модуля.
По нажатию на кнопку "Просмотреть" в реестре, можно его загрузить через sandbox вместо модуля карточки.
А уже в модуле можно определить 'Terrasoft.Component', как описано выше.
Html разметку сможете получить ajax запросом из созданного модуля к вашему серверу.

"Фещенко Денис" написал:

Возможным вариантом решения есть создание своего модуля.

По нажатию на кнопку "Просмотреть" в реестре, можно его загрузить через sandbox вместо модуля карточки.

А уже в модуле можно определить 'Terrasoft.Component', как описано выше.

Html разметку сможете получить ajax запросом из созданного модуля к вашему серверу.

Если можно пример кода:sad:

Точного примера для вашего запроса в системе нет.
Могу прислать следующее:
Пример кода по загрузке модуля из модуля раздела:

var sandbox = this.getSandbox();
var newCardModuleId = 'ViewModule_CardModule_' + this.entitySchema.name;
sandbox.loadModule('CardModule', {
			renderTo: this.getContainer(),
			id: newCardModuleId,
			keepAlive: true
		});

Вместо 'CardModule' - подставляете имя своего модуля.
newCardModuleId - генерируете свой идентификатор для модуля.

Примером произвольного модуля для вас может послужить например DashboardSection.
По примеру вместо контейнеров для графиков вы определите один 'Terrasoft.Component' для вашего html.

Денис, большое спасибо все получилось

Антон, рад был помочь!

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