MainPage
SysMainPageShell
Технические вопросы
5.x

Добрый день.

Подскажите как из SysMainPageShell бросить сообщение в MainPage с параметрами. Или как получить параметр из SysMainPageShell ?

Или как получить в SysMainPageShell Process.InstanceUId для MainPage.

Нравится

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

Добрый день!
Это можно сделать только путем регистрации клиентского js скрипта.
В "MainPage" на загрузке вы должны на клиенте в какую-то переменную записать идентификатор процесса страницы.
А в "SysMainPageShell" зарегистрировать клиентский скрипт, который вычтет этот идентификатор и бросит сообщение (можно и с параметрами).
Пока в системе нет примеров реализации такой логики.

Показать все комментарии
dlData
SystemUser
update
база
база данных
Записи
запись
запрос
запросы
значение
значения
логи
логов
окно редактирования
ошибка
поле
поля
событие
событие окна
событие поля
События
события окна
события полей
таблица
Таблицы
триггер
Технические вопросы
Разработка

В процессе администрирования базы данных возникла необходимость определить причину возникновения ошибки. Определенный объём информации импортируется в базу данных, с которым далее пользователи работают. В процессе заполнения определенного набора полей автоматически высчитывалась итоговая сумма в поле «Итого». Но в определённый промежуток времени использования продукта начали появляться ошибки, связанные с несоответствием значения поля «Итого» сумме полей из которых оно вычисляется («Сумма покупки», «Наценка», «Сбор» и т.д.). Так как ошибку не получалось явно повторить, необходимо было разработать механизм для решения данной проблемы.

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

В основу решения было положено создание двух таблиц в базе данных для ведения логов, что происходят с записью набора данных. Первая таблица WindowLog, а вторая TriggerLog.

Первая таблица WindowLog включает в себя поля «Дата создания»(CreatedOn), «Идентификатор записи» (RecordID), «Ответственный» (WindowsUser), «Имя поля породившего событие»(FieldName), «Итого» и поля из которых оно вычисляется («Сумма покупки», «Наценка», «Сбор» и т.д.). Для наполнения таблицы было использованы события невизуального компонента окна dlData: dlDataOnDatasetDataChange, dlDataOnDatasetBeforePost и dlDataOnDatasetAfterPost. В скрипте в событиях была создана функция, которая формировала SQL запрос к таблице WindowLog базы данных с фиксацией информации по указанным полям на момент срабатывания события.

Запрос:

INSERT INTO WindowLog (*набор полей*)
SELECT (*набор полей*) -- Dataset('поле1'), Dataset('поле2'), Dataset('поле2')

Вторая таблица TriggerLog включает в себя поля «Дата создания»(CreatedOn), «Идентификатор записи» (RecordID), «Состояние» (до изменения записи и после), «SystemUser», «Итого» и поля из которых оно вычисляется («Сумма покупки», «Наценка», «Сбор» и т.д.). Для заполнения данной таблицы был создан триггер на инструкцию UPDATE проблемной таблицы с двумя запросами вставки значений в таблицу. В одном запросе вставлялись значения до изменений, а во втором после.

Запрос №1:

INSERT INTO TriggerLog (*набор полей*)       
SELECT (*набор полей*)
FROM deleted

Запрос №2:

INSERT INTO TriggerLog (*набор полей*)       
SELECT (*набор полей*)
FROM inserted

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

Проанализировав записи в таблице TriggerLog было установлено, что в результате выполнения инструкции UPDATE было внесено некорректное значение. Сопоставив даты создания записей в таблице TriggerLog и WindowLog было установлено, что инструкция UPDATE была вызвана не в результате манипуляций с окном редактирования, а иным источником. На основании поля «SystemUser» таблицы TriggerLog было установлено что изменения были внесены с помощью импортера данных.

Таблицу TriggerLog возможно расширить, добавив в нее поля, которые помогут ускорить процесс обнаружение источника изменений записи базы данных. Список дополнительных полей может выгладять следующим образом: ApplicationName, LoginName, HostName.

PS: Принимаю предложения на доработку вашей конфигурации!!! Для более детальной информации можно связаться по следующему e-mail адресу: providnui@ukr.net !!!

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

Всем удачи в этом не легком процессе!!!

Нравится

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

Не отображаются картинки в BPMOnline CRM 7.0.0.167
Поддержка: попробуйте переразвернуть, вот ответ:
В чем может заключатся не правильная конфигурация IIS сервера? На этом сервере развернуты сайты, как версии 7.0.0.167 так и версии 7.0.0.235, поведение сайтов аналогичное. Сайты переразворачиваются, как минимум 1 раз в неделю, ошибка повторяется.

Нравится

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

Добрый день, Сергей!
Сообщите, пожалуйста, версию IIS сервера и версию операционной системы на которой он развернут.
Эта информация нужна нам для воспроизведения вашего пользовательского окружения.

Операционная система: Windows Server 2008 R2, WINDOWS 7 X64 Ultimate.
IIS 7.
SQL SERVER 2008 R2.
NET Framework 4.5

Спасибо за информацию, будем пробовать воспроизвести у себя.
Есть ли у Вас возможность попробовать развернуть BPMonline на IIS 8 ?

Денис, развернули BPMonline 7 и 5 на IIS 8 все картинки отображаются. Операционная система Windows Server 2012 IIS 8

Добрый день, Антон!
Есть ли у Вас возможность окончательно перенести ваш сайт BPMonline 7 на IIS 8?
P.S. На нашем сервере ondemand все сайты BMPonline уже переведены на использование IIS 8.

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

Нужно добавить кнопку на страницу редактирования в bpmonline 7.0. Как это сделать? Добавить к существующим кнопкам

Нравится

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

Здравствуйте, Антон! Предоставляю пример добавления кнопки на "AccountPage".

Код замещающего модуля:

define('AccountPage', ['terrasoft', 'Account', 'AccountPageStructure', 'AccountPageResources'],
    function(Terrasoft, Account, structure, resources) {
    var viewModel;
    structure.userCode = function() {
        //помещение ссылки на текущий объект вызова в переменную
        var parentThis = this;
        //помещение ссылки на метод init-a в переменную
        //и последующий его вызов из функции
        //таким образом происходит переопределение метода
        var baseInit = this.methods.init;
        this.methods.init = function() {
            if (Ext.isFunction(baseInit)) {
                baseInit.call(this);
            }
        //снова сохраняем ссылку на объект вызова
            viewModel = this;
        //добавление контрола кнопки
            var button = Ext.create('Terrasoft.controls.Button', {
                renderTo: Ext.get('utils-left'),
                caption: "Основной контакт"
            });
        //подписываемся на событие клика
            button.addListener("click", parentThis.methods.move, parentThis);
        };
        //описываем функцию-обработчик события клика
        this.methods.move = function() {
            var primaryId = this.get('PrimaryContact').value;
            if (primaryId) {
                var URL = Terrasoft.workspaceBaseUrl + 'Nui/ViewModule.aspx#CardModule/ContactPage/view/' + primaryId;
                document.location.replace(URL);
            }
        };
    };
    return structure;
});

Ext.get() возвращает элемент страницы по идентификатору, который можно получить используя инспектор элементов в инструментах разработчика браузера (F12 в Chrome):

Большое спасибо, а теперь как мне скрывать и открывать добавленные кнопки:sad:

Антон, с помощью свойства visible при определении кнопки:

var button = Ext.create('Terrasoft.controls.Button', {
                renderTo: Ext.get('utils-left'),
                caption: "Основной контакт",
                visible: false
            });

а также, с помощью метода setVisible( visible ), где visible: boolean:

button.setVisible(true);
Показать все комментарии
7.x
консоль
ошибка
Технические вопросы
5.x

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

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

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)
Технические вопросы
5.x

Добрый день, нужна ваша консультация,
Задача такая: Страница карточки задачи(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:

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

Показать все комментарии
ошибка вывода в ворд
Технические вопросы
Разработка

Так выглядит функция вывода в ворд проблема в том, что вывод не всегда работает а отправляет ворд в процессы и не открывает просто зависает.
function ButtonOnClick(Control) {
//TODO
var TaskDataset = Services.GetNewItemByUSI('ds_Contract');
TaskDataset.Open();
var FileName = 'c:\\1\\eplay.doc';
var Word = new ActiveXObject('Word.Application');
Word.Documents.Open(FileName);
var Selection = new Object();
Selection = Word.Selection;
var cid = edtCustomerName.datafield.Value;
TaskDataset.Close();
WordReplaceMark(Selection,'>',cid);
Word.Visible = true;
}

Нравится

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

Николай, несколько уточняющих вопросов:
1. Зачем Вы открываете Dataset, если нигде не используете?
Попробуйте удалить строки:
var TaskDataset = Services.GetNewItemByUSI('ds_Contract');
TaskDataset.Open();
TaskDataset.Close();

2.Попробуйте заменить
var Word = new ActiveXObject('Word.Application');
на
var Word = System.EmptyValue;
var Word = new ActiveXObject('Word.Application');

Если ошибка будет и дальше воспроизводиться, необходимо провести Debug и посмотреть, на какой строке "зависает" программа.

function ButtonOnClick(Control) {
var FileName = 'c:\\1\\eplay.doc';
var Word = System.EmptyValue;
var Word = new ActiveXObject('Word.Application');
Word.Documents.Open(FileName);
var Selection = new Object();
Selection = Word.Selection;
var eplay1 =edtContractTitle.datafield.Value;
WordReplaceMark(Selection,'<>',eplay1);
Word.Visible = true;
}
Ошибка : Предполагается наличие объекта.

получилось

Николай, рад, что удалось решить проблему.
Приятной работы!

Показать все комментарии
Технические вопросы
5.x

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

Нравится

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

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

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

Показать все комментарии
Технические вопросы
5.x

Как создать 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".
Если есть - то вам нужно в "дебаге" посмотреть чего она у Вас не вызывается.
Если нет - то нужно просто обновить базовые пакеты.

Показать все комментарии
Создания детали с полями (BPM 7.0)
Технические вопросы
5.x

Добрый день !!!
У меня возникла проблема с созданием детали с полями:
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.
При помощи определения этой функции в своей детали мы можем отдать полный конфиг представления для элемента детали. Использование этой функции можно посмотреть в детали средств связи.

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