Здравствуйте, нужно отобразить сообщение с полями ввода.
Одно из полей должно быть справочником.
Каким образом можно привязать Control к объекту.
Также необходимо задать обязательность полей.
Пробовал реализовать задачу следующим образом:

inputMessage:function () {
                var callback = function(returnCode, controlData) {
                    if (returnCode === 'ok' && controlData.StartDate.value) {
                        debugger;
                        var StartDate = controlData.StartDate.value;
                    }
                };
                var config= {
                    warehouse: {
                        dataValueType: Terrasoft.DataValueType.LOOKUP,
                        caption:'Для филиала', //resources.localizableStrings.GroupNameInputTitle,
                        entitySchemaName:'SxWarehouses',
                        ReferenceSchemaName:'SxWarehouses',
                        isRequired:true,
                        values: {
                            ReferenceSchemaName:'SxWarehouses',
                            isRequired:true,
                            entitySchemaName:'SxWarehouses'
                        }

                        //value: 0
                    },
                    StartDate: {
                        dataValueType: Terrasoft.DataValueType.DATE,
                        caption:'Дата начала', //resources.localizableStrings.GroupNameInputTitle,
                        isRequired:true
                        //value: 0
                    },
                    DueDate: {
                        dataValueType: Terrasoft.DataValueType.DATE,
                        caption:'Дата завершения', //resources.localizableStrings.GroupNameInputTitle,
                        isRequired:true
                        //value:
                    }

                };
                var caption = 'Отчет';
                //inNew ? resources.localizableStrings.NewGroupInputBoxCaption :
                //  resources.localizableStrings.ExistingGroupInputBoxCaption;
                Terrasoft.utils.inputBox(
                    caption,
                    callback,
                    ['ok', 'cancel'],
                    this,
                    config,
                    {
                        defaultButton: 0,
                        classes: {
                            coverClass: ['cover-calss1', 'cover-calss2'],
                            captionClass: ['caption-calss1', 'caption-calss2']
                        }
                    }
                );
            },

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

Нравится

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

Здравствуйте, Александр!

"Пащенко Александр Сергеевич" написал:Здравствуйте, нужно отобразить сообщение с полями ввода.

Можете, пожалуйста, уточнить где хотите отображать сообщение? В зависимости от сущности, реализация будет разной.

При наступлении определенного события нужно запросить у пользователя данные следующего вида

для этого вызывается метод inputMessage()
Проблема заключается в том, что поле типа lookup не привязано к объекту, следовательно страница справочника не открывается

Здравствуйте, Александр!

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

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

Здравствуйте, Александр!

В InputBox не получится работать с лукапом. Рекомендую Вам посмотреть, как пример, работу страницы SimpleTaskAddModule. Вызывается при работе с представлением "Расписание", в разделе "Активности".

Не очень правильный но самый простой вариант. Отловить событие нажатия на лупу и открыть нужный справочник.

$('.base-edit-right-icon-wrapper').click(function(){
	self.openLookup(configLookup, function(response) {
		// Тут записать данные выбранные из справочника в поле лукапа и в переменную.
	});
	$('.ts-modalbox').css('z-index','3000'); //эта строчка нужна чтобы окно справочника было поверх inputBox
});

А в коллбеке получать выбранное значение из переменной.

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

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

Стоит задача получать от пользователя на определенном этапе некоторые данные, чтобы в дальнейшем их использовать в БП. В частности, нужно использовать какой-нибудь элемент для ввода даты, CalendarControl, например, и NumericEdit.

В БД эти данные сохранять не нужно (по крайней мере, пока), поэтому, как я понимаю, достаточно их записать в параметры БП. Однако сделать это не удается, я пытаюсь обработать событие OnClick единственной в окне кнопки ОК. Вопросы:

1. Как получить запущенный экземпляр БП из обработчика нажатия кнопки? Как я понимаю, GetDiagramByItem() тут не подходит, так же как и GetNewItemByUSI().

2. Для установки параметров диаграммы кажутся подходящими ф-ии WFSetParamValueDirect и WFSetParamValue. В чем их отличия?

3. Как работать с датой из CalendarControl?

4. Описан ли вообще где-то в документации DOM, ф-иям для БП? Без этого как-то очень тяжело :(

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

Нравится

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

Юрий, добрый день.

1) Среди элементов БП есть такой, как "Открытие окна". Вы можете создать своё окно для ввода значений, связать этот элемент с окном и сопоставить поля окна с параметрами бизнес-процесса. Другой вариант - добавить на диаграмму элемент "Скрипт", в обработчике события OnExecute которого написать примерно такой код:

var Window = Services.GetNewItemByUSI(<USI окна редактирования>);
Window.ShowModal();
var ResultValue = Window.ComponentsByName(<Название контрола>).DataField.Value;
............

Далее можно присвоить эти значения параметрам диаграммы.

2) Данные функции отличаются исключительно набором входящих параметров: функция WFSetParamValueDirect работает непосредственно с коллекцией параметров, а WFSetParamValue получает на вход элемент диаграммы (параметры которого извлекаются уже внутри функции). В остальном - никаких отличий.

3) Получить дату из компонента ICalendarControl просто:

var ResultDate = Window.ComponentsByName('CalendarControl').Value;

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

4) Информацию о свойствах и методах элемента БП и диаграммы можно найти в SDK на нашем сайте. События определённых элементов БП, а также другая информация о создании БП описаны в Руководстве администратора, которое поставляется вместе с установочным пакетом системы Terrasoft. Различного рода примеры, ответы на вопросы и другую информацию Вы можете найти и на нашем комьюнити.

Спасибо, со скриптом все получилось!

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

Возможно, Ваше окно wnd_InsertPaymentDate - наследник wnd_BaseEdit, а не wnd_BaseDBEdit, то есть, в нём нет ссылки на датасет. Попробуйте подставить окно с датасетом, всё должно быть корректно. Если же используются контролы без привязки к датасету, тогда лучше вызывать окно из скрипта.

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