Подскажите кто-нибудь - почему, в BPMonline 7.6, у работающего процесса не визуализируется входящая в состав его схемы преднастроенная страница. Вот (с некоторыми сокращениями - оставлены кнопка и поле) код модуля страницы, подключённой к преднастроенной странице:

define("RIBContactGuarantorsListModule", [/*"RIBContactGuarantorsListModuleResources", "Contact"*/],
        function(/*resources, Contact*/) {
                return {
                        // Название схемы объекта страницы редактирования.
                        //entitySchemaName: "Contact",
                        // Методы, опредёленные на странице.
                        methods: {
                                // Обработчик нажатия на кнопку [Предылущий].
                                OnPreviouseButtonClick: function() {
                                        this.showInformationDialog("Вызов метода кнопки [Предылущий] из модуля RIBContactGuarantorsListModule.");
                                }
                        },
                        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
                        diff: [{
                        // Метаданные для добавления поля [Идентификатор]:
                                // Указать на то, что выполняется опера*/ция добавления элемента на страницу.
                                "operation": "insert",
                                "parentName": "Header",
                                "propertyName": "items",
                                // Имя добавляемого полоя.
                                "name": "Id",
                                // Дополнительные свойства поля:
                                "values": {
                                        // Настройка расположения поля на странице.
                                        "layout": { "column": 0, "row": 2, "colSpan": 15}
                                }
                        },
                        {
                        // Метаданные для добавления кнопки [Предыдущий], по нажатию на которую
                        // выполнется переход на предыдущую запись в таблице поручителей:
                                // Указать на то, что выполняется операция добавления элемента на страницу.
                                "operation": "insert",
                                // Указать имя системного контейнера на странице, в который будет добавлена кнопка.
                                "parentName": "LeftContainer",
                                // Указать, что кнопка добавляется в коллекцию элементов управления в контейнере,
                                // имя которого указано в parentName.
                                "propertyName": "items",
                                // Мета-имя добавляемой кнопки.
                                "name": "PreviouseButton",
                                // Дополнительные свойства кнопки:
                                "values": {
                                        // Тип добавляемого элемента - кнопка.
                                        itemType: Terrasoft.ViewItemType.BUTTON,
                                        // Привязка заголовка кнопки к локализуемой строке схемы.
                                        caption: { bindTo: "Resources.Strings.PreviouseButtonCaption"},
                                        // Привязка метода-обработчика нажатия кнопки.
                                        click: { bindTo: "OnPreviouseButtonClick"},
                                        // Настройка расположения кнопки на странице.
                                        "layout": { "column": 0, "row": 1, "colSpan": 1}
                                }
                        }
                        ]
                };
        });
Для создания модуля страницы выбирал в конфигурации: Добавить/Расширенные/Схема модели представления карточки. Свой модуль - RIBContactGuarantorsListModule - унаследовал от BaseModulePageV2 ( NUI ). Прописал в ресурсах для модуля все строки (она - только одна). В процесс, при запуске которого должна выводиться эта страница, добавил элемент "Преднастроенная страница", в её окне, открывающемся при её добавлении в процесс, определил: Клиентский модуль: "Анкета физического лица; Поручители (для РИБ)" - это такой заголовок у модуля. Объект привязки: "Заявка" - есть такой объект (правда пока не наполнен записями). Вот только в качестве Экземпляра объекта привязки пришлось выбрать "[#Страница списка поручителей.Ответственный#]" - ничего другого система не принимала. Дал бизнес-процессу название и подпись. В его свойстве tag прописал строку "Business process". В меню запуска присутствует название процесса. После его запуска, в Журнале процессов видно, что он выполняется. Т.е., запуск и выполнение происходят без ошибки. Но на экран страница почему-то не выводится. Что у меня сделано неправильно? Ребята, помогите, пожалуйста.

Нравится

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

Евгений, в случае использования преднастроенной или автогенерируемой страниц в БП часто возникают проблемы с web-сокетами.
Для решения проблемы попробуйте поменять параметр defaultPort="2001" на любой другой, не использующийся в системе, в т.ч. и другими сайтами BPM.

<wsService type="Terrasoft.Messaging.SuperWSService.SuperWSService, Terrasoft.Messaging.SuperWSService" defaultPort="2001" encrypted="false" portForClientConnection="44310" maxConnectionNumber="100" clearIdleSession="false" clearIdleSessionInterval="120" />

Находится в ...\Ваш сайт\Terrasoft.WebApp\Web.config

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

Здравствуйте. Те, кто хорошо знает модуль BankModuleUtilites - скажите, пожалуйста, что представляет собой конструкция utilites, начинающаяся с 172-й строки в этом модуле и заканчивающаяся на 357-й строке? Это какой-то особый список функций ? Или что ?

Нравится

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

А BankModuleUtilites — это в какой версии и какой верикали системы?

Модуль BankModuleUtilites - в версии BPMonline 7.2. Используется в приложении кредитного конвеера для Гагаринского банка.

Здравствуйте. Функции, описанные в модуле BankModuleUtilities, используются в продукте bpm'online bank 7.2.2 для создания представлений модулей. Эти функции возвращают конфигурации элементов управления, на основе заданных параметров.

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

Есть блок кода:

if ($.inArray(rslt.activeMasksetIndex, maskForwards) !== -1 &&
               rslt.result !== false & (lowestPos === -1 ||
               lowestPos > rslt.result.pos)) {
        lowestPos = rslt.result.pos;
        lowestIndex = rslt.activeMasksetIndex;
}
В строке
rslt.result !== false & (lowestPos === -1 ||
Интерпретатор в 7.6 выдаёт ошибку: Unexpected use of '&'.
Что нужно сделать для того, чтобы исправить эту ошибку ?

P.S. Когда я взял этот блок кода из 7.2 и перенёс его в 7.6, то исделал только перенос условия на несколько строк из-за того, что интерпретатор в 7.6 выдавал ошибку Line is too long.

Нравится

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

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

Евгений, добрый день!

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

rslt.result !== false && (lowestPos === -1 ||
lowestPos > rslt.result.pos)

Одинарный амперсанд используется в битовых операциях.

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

Переношу JQueryInputMask из 7.2 в 7.6. Есть следующая функция:

var isInputEventSupported = function(eventName) {
                var el = document.createElement("input"),
                                eventName = "on" + eventName,
                                isSupported = (eventName in el);
                if (!isSupported) {
                        el.setAttribute(eventName, "return;");
                        isSupported = typeof el[eventName] === "function";
                }
                el = null;
                return isSupported;
}

В 7.6 интерпретатор показывает ошибку 'eventName' is already defined на строке

eventName = "on" + eventName,
Скажите, пожалуйста, что нужно сделать для исправления этой ошибки ?

Нравится

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

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

Для устранения данного сообщения необходимо вынести присвоение из блока var:

var isInputEventSupported = function(eventName) {
	eventName = "on" + eventName;
	var el = document.createElement("input"),
		isSupported = (eventName in el);
	if (!isSupported) {
		el.setAttribute(eventName, "return;");
		isSupported = typeof el[eventName] === "function";
	}
	el = null;
	return isSupported;
}

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

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

Переношу модуль JQueryINputMask из 7.2 в 7.6. Интерпретатор в 7.6 считает ошибкой следующую трактовку доступа к свойству:
masksets = this.data("_inputmask")["masksets"];
и просит заменить её на:
masksets = this.data("_inputmask").masksets;
В литературе по Javascript допускаются обе трактовки. Почему интерпретатор 7.6 считает мнемонику имя_объекта["имя_свойства"] ошибкой ?

Нравится

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

Евгений, добрый день!

Подобное сообщение можно считать рекомендацией и схема будет успешно сохранена, несмотря на его наличие. Но на самом деле предпочтительным вариантом будет использование названия свойств через точку. Такой вариант удобнее и визуально, и работать будет быстрее. Доступ к свойству через квадратные скобки используется в основном, когда Вам заранее не известно имя свойства и приходится вычислять его через выражение (например, myObject["propName" + i]). В литературе по JavaScript на этот факт также обращается внимание.

Спасибо.

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

Здравствуйте.
Переношу JQueryInputMask из 7.2 в 7.6. Нередко интерпретатор в 7.6 показывает ошибку Line too long либо на совсем пустых строках либо берёт короткую строку, отсчитывает от её конца пробелов 40 - 50, ставит там курсор и показывает ошибку Line too long. Когда щёлкаешь мышью по курсору, установленному в таком месте, то курсор мгновенно перескакивает на фактический конец строки и при нажатии клавиши End на клавиатуре остаётся там. Т.е., фактически - никакой длинной строки в этом месте нет, а интерпретатор - показывает. Почему так?

Нравится

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

Здравствуйте.
Попробуйте для редактирования кода воспользоваться сторонним инструментарием (редактором). Для этого в web.config загрузчика (в корне сайта) установите значение параметра useFileContent="true". Далее в connectionstrings.config (в корне сайта) указать в параметре clientUnitContentPath путь к директории, куда выгружаются и от куда загружаются модули клиентских схем по действиям из конфигурации (обновить клиентские модули из базы или загрузить в базу). Другими словами - выгрузили, отредактировали, загрузили.

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

Уважаемые форумчане, Ave!
Скажите - есть ли среди модулей на JavaScript, которые поставляются в комплекте с BPMonline 7.6, модуль, аналогичный JQueryInputMask ? Пускай и под другим названием. Дело в том, что я сейчас переношу страницу с BPMonline версии 7.2 на версию 7.6 и модуль JQueryInputMask входит в перечень модулей, от которых зависит модуль самой страницы.
При прогоне через интерпретатор на 7.6 исходника JQueryInpytMask, взятого из 7.2, возникает очень много ошибок.
Может в BPMonline 7.6 есть аналог модуля JQueryInputMask, только он по другому называется ?

Нравится

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

Евгений, добрый день!

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

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

Если я переношу страницу из версии 7.2 в 7.6 и среди её зависимостей есть JQueryInputMask, то его замена в 7.6 на ваше решение даст 100% гарантию, что страница будет работать правильно?

P.S. Кстати, вся кириллица, когда я открываю ваши вложения для просмотра переворачивается в каракули.

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

Хорошо, спасибо.

Евгений, пересохранил файлы в формате docx.

Спасибо.

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

Можно ли в модуле JavaScript в BPMonline 7.6 поместить коллекцию в секцию attributes: ? Ведь коллекция это переменная аггрегированного типа.

Нравится

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

Евгений, посмотрите пример в BaseDetailV2 пакета NUI. Там как раз используется коллекция в атрибутах, которая содержит строки реестра:

/**
 * Коллекция данных
 * @type {Terrasoft.BaseViewModelCollection}
 */
Collection: {dataValueType: Terrasoft.DataValueType.COLLECTION},

В моём случае, коллекция содержит (к качестве своих элементов), в частности, определения функций. Это - коллекция $.inputmask в модуле JQueryInputMask, который я пытаюсь перенести из BPMonline 7.2 в BPMonline 7.6.

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

Хорошо, спасибо.

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

Добрый день. Скажите, пожалуйста, в модуле на JavaScript могут повторяться определение секций ? Например может ли там быть несколько секций methods:, attributes: и т.д., следующих в разбивку? Например, в начале модуля - секция attributes:, после неё - methods, затем, скажем - diff:, а после - опять methods: ? Скажите, пожалуйста, можно ли так делать? Мне обязательно надо узнать об этом.

Нравится

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

Евгений, добрый день!

В схеме используется определенный порядок секций diff: {}, attributes: {}, methods: {}, rules: {}... . Повторное использование одного из блоков приведет к некорректной работе приложения.

Я сейчас переношу модуль JQueryInputMask из BPMonline версии 7.2 в BPMonline версии 7.6 и у этого модуля следующая структура: Функции. Потом тернарный условный оператор, в условиях которого вызываются функции. Потом - большая функция, в теле которой определяются другие функции. Потом - коллекция, среди элементов которой присутствуют, в частности, функции. Потом - опять функция. И модуль заканчивается. Как вот в таком модуле расписать секцию methods ? Помогите.

Евгений, добрый день!

При переносе Вам и не нужно придерживаться описанной выше структуры. Такая структура актуальна только для схем, которые наследуются от BaseSchemaViewModel (в частности BaseSection, BasePage, BaseDetail), а другие модули могут иметь произвольную структуру. Упомянутый Вами модуль зависит только от jQuery и не использует другие модули системы, поэтому его структуру можно оставить как есть.

Повторная инициализация свойств объекта (а секции methods, diff, attributes и т.д., которые Вы перечисляете, на самом деле являются свойствами объекта) будет перезатирать их содержимое.

Эх, если бы мне это знать раньше!

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

Здравствуйте. Переношу JavaScript модуль из версии BPMonline 7.2 в версию 7.6. Если интерпретатор, при проходе по этому модулю (в BPMonline 7.6) встречает длинную закомментированную строку, то показывает на ней ошибку "line too long". Например, вот на такой закомментированной строке:

//test definition => {fn: RegExp/function, cardinality: int, optionality: bool, newBlockMarker: bool, offset: int, casing: null/upper/lower, def: definitionSymbol}

Из-за чего это ? Как исправить исходник, чтобы данная ошибка исчезла ?

Нравится

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

Евгений, добрый день!

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

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

//test definition => {
//	fn: RegExp/function,
//	cardinality: int,
//	optionality: bool,
//	newBlockMarker: bool,
//	offset: int,
//	casing: null/upper/lower,
//	def: definitionSymbol
//}

Спасибо, Олег, а вот скажите, пожалуйста, такую вещь - интерпретатор в 7.6 нередко показывает как ошибку то, что строка кода должна находится, не в текущей строке, а, скажем, на строку или на две выше. Это случается, когда, например пишешь открывающую фигурную скобку у блочного оператора, например if(){} не в той же строке, в которой заканчивается описание его условия

if(/* Условие*/) {

а на следующей

if(//Условие)
{

В этом случае интерпретатор трактует как ошибку, то, что какая-либо из строк кода, из числа находящихся ниже, располагается, скажем, не в 49-й строке, а в 50-й, хотя ожидалось, что она будет расположена в 49-й. И вот, в случае разбиения длинной строки комментария на несколько строк, не покажет ли интерпретатор вышеописанную ошибку касательно какой-нибудь из строк исполняемого кода, из числа расположенных ниже комментария?
И второе - скажи, пожалуйста, почему интерпретатор показывает описанную выше ошибку местоположения строки кода ? Ведь у компиляторов C# и C++ такой "странности" нет и в помине.

Заранее благодарен. С уважением

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

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

// некорректное выражение
return
{
	value: myValue
}

Ваша функция вернёт в результате не объект, как ожидается, а неопределённое значение. Поэтому правильно писать в данном случае так:

return {
	value: myValue
}

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

Что касается длинных строк, да, их можно разбивать на несколько, но с добавлением табов в следующих строках. Например:

if ((<Выражение1>) &&
		(<Выражение2>) &&  // 2 таба относительно первой строки
		(<Выражение3>)) { // 2 таба относительно первой строки
	<Содержимое блока> // 1 таб относительно первой строки
}

Отвечая на Ваш вопрос "почему интерпретатор показывает описанную выше ошибку местоположения строки кода?" - данные проверки не являются характерными для языка JavaScript, они дополнительно встроены в ядро системы bpm'online с целью, как я уже упоминал выше, приведения кода к единому стилю и уменьшения количества ошибок.

Спасибо.

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