Добрый день, коллеги!

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

"Candidate": {
	dependencies: [
		{
			columns: ["Candidate"],
			methodName: "onCandidateChanged"
		}
	]
}

, метод onCandidateChanged не вызывается. Для отслеживания изменений значения справочника помогла конструкция в массиве Diff:

                        "values": {

                            ...

                            "change": { "bindTo": "onCandidateChanged" }

                        }

Но для текстового поля такая конструкция не работает.

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

В качестве примера я пробую отловить изменение в текстовом поле стандартного элемента SocialMessagePublisherPage, и тоже ничего не получается. Но на обычных страницах (например, в карточках) всё прекрасно работает, и нужный метод вызывается при изменении значения поля.

Нравится

12 комментариев
define("SocialMessagePublisherPage", [], function() {
	return {
		entitySchemaName: "SocialMessage",
		mixins: {},
		methods: {
			init: function() {
				this.callParent(arguments);
				this.on("change:Message", this.onMessageChanged, this);
			},
			onMessageChanged: function(model, value, event) {
				debugger;
			}
		},
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
	};
});

 

Варфоломеев Данила,

Спасибо! А есть ли вариант отловить события смены текста непосредственно в момент его изменения? В приведенном Вами примере событие срабатывает при потере фокуса у текстового поля.

Небеддаг Иван Владимирович пишет:

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

Есть, но надо конкретно так упороться: 

1) Сворганить свой модуль, наследуется от Terrasoft.ESNHtmlEdit. В нём подменить функции onKeyUp. Сделать так, чтобы всегда отрабатывал fireEvent.

2) В странице SocialMessagePublisherPage переопределить SocialMessagePublisherEdit: className заменить на только что созданный модуль и забиндить свою функцию на event из функции fireEvent

3) Ну и как итог своя функция будет отрабатывать на каждый введенный/удаленный символ в поле.

Варфоломеев Данила,

забиндить свою функцию на event из функции fireEvent 

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

Не могли бы вы поподробнее рассказать (или выложить кусочек кода) о том как "забиндить свою функцию на event из функции fireEvent". Никак не  получается сделать. Предыдущие шаги выполнить удалось!

Варфоломеев Данила,

"и забиндить свою функцию на event из функции fireEvent" - не могли бы Вы подробнее объяснить, каким образом это сделать?

Иван, видимо, он имел в виду как тут, только не на onClick, а на onKeyUp:

// Генерирует событие canExecute.
// Возвращает true, если можно продолжить выполнение метода onClick().
canExecute: function(config) {
    var args = config.args;
    var event = args[args.length - 1];
    // Если метод onClick() был вызван из миксина CheckModuleDestroyMixin как callback-функция,
    // то в него последним параметром передается событие, которое сигнализирует о прерывании выполнения.
    if (event && event.isComeBack) {
        return true;
    }
    // Добавление в аргументы события прерывания выполнения метода.
    // Необходимо для остановки выполнения метода при вызове onСlick из callback-функции.
    Array.prototype.push.call(config.args, {
        isComeBack: true
    });
    // Применение текущего контекста.
    Ext.apply(config, { scope: this });
    // Генерация события canExecute.
    var canExecute = this.fireEvent("canExecute", config);
    return canExecute;
},

Небеддаг Иван Владимирович,

mcNosferatum,

Извиняюсь за длительный ответ. В принципе да, Илья правильно объяснил. Если вы откроете ESNHtmlEditModule и посмотрите на функцию onKeyUp, то конкретно этот кусок кода 

this.fireEvent("keyUp", keyboardEvent, this);

отрабатывает только по условию (заключен в if). Конкретно для вашего случая нужно, чтобы сигнал посылался на каждое нажатие клавиши, поэтому fireEvent нужно вынести из под всех условий.

Upd. по быстрому набросал

Код модуля

define("UsrHtmlEditModule", ["ESNHtmlEditModule"],
	function() {
		
	//Ext.ns("Terrasoft.controls.UsrHtmlEditModule");
	/**
	 * @class Terrasoft.controls.HtmlEdit
	 * Html editor control class.
	 */
	Ext.define("Terrasoft.controls.UsrHtmlEditModule", {
		extend: "Terrasoft.ESNHtmlEdit",
		alternateClassName: "Terrasoft.UsrHtmlEditModule",

		onKeyUp: function(keyboardEvent) {
			this.callParent(arguments);
			this.fireEvent("keyPressed", keyboardEvent, this);
		},

		setInitConfig: function() {
			this.callParent(arguments);
			this.addEvents("keyPressed");
		},

	});
	return Terrasoft.UsrHtmlEditModule;
});

Код страницы

define("SocialMessagePublisherPage", ["UsrHtmlEditModule"], function() {
	return {
		entitySchemaName: "SocialMessage",
		mixins: {},
		methods: {
			userPressedKey: function(event) {
				debugger;
			}
		},
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "merge",
				"name": "SocialMessagePublisherEdit",
				"values": {
					"className": "Terrasoft.UsrHtmlEditModule",
					"keyPressed": {bindTo: "userPressedKey"}
				}
			}
		]/**SCHEMA_DIFF*/
	};
});

 

Событие keyPressed действительно теперь отрабатывает при нажатии на каждую кнопку, но почему то this.Get("SocialMessagePublisherEdit") присылает не обновленное значение!

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

mcNosferatum пишет:

присылает не обновленное значение!

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

//в модуле:
this.fireEvent("keyPressed", keyboardEvent, this.getTypedValue(), this);

в странице:
userPressedKey: function(event, typedValue) {
	var message = this.get("Message");
	debugger;
}

 

Данила, спасибо! Все получилось, как хотел. Использовал :

var message = typedValue; - для получения текущего значения
var message = this.get("Message"); - теперь постоянно возвращает "undefined".
Показать все комментарии
Фильтры
фильтр
UpdateQuery
7.12
sales

Можно ли каким-то образом построить такой запрос на клиенте:

update KitTrackingInformation

set

    TrackingNumber = @TrackingNumber

from KitTrackingInformation

        join BTSample on BTSample.BTKitIDLookupId = KitTrackingInformation.KitId

            join BTSampInShipment on BTSampInShipment.BTSampleIDId = BTSample.Id

where SampInShipment.BTShipmentId = @ShipmentId

Понятно, что это будет выглядеть приблизительно так:

                    var updateTrackingInfo = Ext.create("Terrasoft.UpdateQuery", {

                        rootSchemaName: "KitTrackingInformation"

                    });

                    updateTrackingInfo.setParameterValue("TrackingNumber", trackingNumber,

                        Terrasoft.DataValueType.SHORT_TEXT);

                                       updateTrackingInfo.filters.addItem(updateTrackingInfo.createColumnFilterWithParameter(

                        this.Terrasoft.ComparisonType.EQUAL,

                        "<путь по связям для фильтрации>", shipmentId));

                    updateTrackingInfo.execute(function(response) {

                        if (response.success) {

                            debugger;

                        }

                    }, this);

Из всего вышеописанного следует 2 вопроса:

1) каким образом построить путь для фильтрации

2) можно ли вообще реализовать UpdateQuery с фильтрацией по полю связанной таблицы

Нравится

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

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

Вот пример даже тройного join-а:

[SysAdminUnit:Contact:Owner].[SysUserInRole:SysUser:Id].[SysAdminUnit:Id:SysRole].Id

Ещё один:

[SysAdminUnit:Contact].[SysUserInRole:SysUser].SysRole

Сработает ли для update, нужно тестировать, глядя на получающиеся запросы в SQL-профайлере.

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

Спасибо за ответ.

А какие sql-запросы получаются в итоге по этим примерам?

К сожалению, нет возможности посмотреть в профайлере код запросов.

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

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

На клиенте нужно вставить запись в некоторую таблицу, одним из значений параметров есть Id записи контакта, его нужно получить из таблицы Contact запросом.

Например, вот так:

            setLoggerActivatorParameter: function(clinic) {

                var loggerActivatedById;

                if (this.Ext.isEmpty(clinic)) {

                    return loggerActivatedById;

                }

                var esqContact = Ext.create("Terrasoft.EntitySchemaQuery", {

                    rootSchemaName: "Contact"

                });

                var esqAccountFilter = esqContact.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,

                    "Account", clinic.value);

                var esqDataLoggerActivatorFilter =

                    esqContact.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,

                    "DataLoggerActivator", true);

                esqContact.filters.add("esqAccountFilter", esqAccountFilter);

                esqContact.filters.add("esqDataLoggerActivatorFilter", esqDataLoggerActivatorFilter);

                esqContact.getEntityCollection(function(result) {

                    if (result.success && result.collection.getCount()) {

                        loggerActivatedById = result.collection.first().get("Id");

                        return loggerActivatedById;

                    }

                }, this);

            }

Но из-за ассинхроности, пока отработает функция setLoggerActivatorParameter, то запись уже добавится в таблицу без значения поля loggerActivatedById.

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

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

Нравится

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

Из других вариантов:

1) сервис

2) использовать chain на клиенте (реализация гуглится по форуму или тут)

3) кривой, но рабочий (более-менее) способ — делать тот же самый esq только при загрузке страницы, где-нибудь в init-е. Ну и складировать результат в переменную. Потом в обработчике уже к переменной обращаться.

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

Коллеги, добрый день!

Регулярно сталкиваемся со следующей проблемой с svn. Есть локальная среда разработки, в ней идет работа с пакетом из svn(сам svn размещен в Azure). И у нас регулярно происходит ситуация что bpm не отмечает файлы пакета как измененные, соотвественно они и не фиксируются в svn.

Пример: создаем страницы редактирования для разных типов продуктов через мастер, настраиваем страницы, сохраняем в svn. Все пока ок. НО если мы зайдем через мастер и изменим эти страницы, то в конфигурации они не заблокируются и при фиксации никакие изменения в svn не зафиксируются. 

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

Кто-нибудь сталкивался с таким поведением системы? Взываем к помощи коллективного разума!)

Нравится

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

Добрый день!

Можете уточнить характер проблемы?

После внесения изменений в страничку через мастер у вас отображается страничка с учетом изменений? (когда файл пакета не отмечен как измененный)

Код старнички до и после точно отличается? Не может ли быть такое, что изменения ушли например в Custom?

Какая версия системы?

В догонку - у вас одна конфигурация системы? Может изменения вносяться в другую?

Золотарев Артем Андреевич,

Артем, добрый день!

После внесения изменений через мастер в первый раз - все корректно сохраняется в пакете и элемент блокируется(зеленый замок). А вот если редактировать 2-ой раз, то элемент выделяется черным шрифтом, но замок не вешается. И при отправке в свн изменения не уходят. Нужно заходить в схему и нажимать сохранить, после чего вешается замок и изменения уходят.

Код странички отличается до и после, в Custom изменения не уходят. Версии - мы сталкивались с это проблемой начиная, на сколько я помню, с 7.10 и до 7.12.0

 

Конфигурация - конечно одна) 

А есть пример какие изменения через мастер на зафиксировались?

Золотарев Артем Андреевич,

Артем, как правило не фиксировались изменения типа:

1. Добавление текстового/целочисленного поля в карточку продукта (для продукта было создано несколько страниц редактирования)

2. Изменение расположения поля на странице редактирования.

Это то, что было из последнего. Причем при попытке фиксации изменений в логе комета мы видим что изменения в файлах ресурсов (en_EN, например) для схемы уходят в свн, а сама схема - нет.

 

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

В любом случае можно попробовать развернуть с нуля последнюю версию и попробовать воспроизвести в ней. Если там работает нормально, то на рабочей базе что-то недоустановилось при одном из обновлений.

Либо же неверно настроено на самом сервере SVN (возможно, те же концы строк).

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

Александр, спасибо за мысль - передам своим разработчикам. Вместе с тем, с этой проблемой мы сталкиваемся на средах разработки последних версий системы для разных клиентов. Так что это точно не наследие от 7.8. Попробуем посмотреть по строкам. Грешим на на то, что SVN у нас в Azure.

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

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

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

Александр, спасибо за попытку разобраться! Понятно, что "доктор по фотографии не лечит") В саппорт уже обращались и там ответили, что о проблеме знают. Вместе с тем она явно редкая, т.к. о проблеме парализующей работу разработчиков уже кричали бы во всех темах. Будем ковырять azure и svn, но идей пока все равно нет(

Если обращались в 2016-17 гг., то тогда это исправляли в 7.8.4.

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

месяц назад) Но вообще у меня появилась мысль, почему это происходит

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

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

Ларчик открылся просто - на стендах некоторых сотрудников пути в ConnectionString были оставлены по умолчанию в Temp. Ну и соответственно затирались ОС. 

Александр, спасибо за информацию!

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

 

День добрый!

На странице редактирования при переходе на вкладку не отображается деталь. Данная проблема происходит примерно в 1 из 5 случаев. Чтобы деталь отразилась на странице необходимо перезагрузить страницу с очисткой кэша.

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

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

Нравится

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

"мы террасофт и мы решили хранить ресурсы на hdd сервера" - вот где проблема :)  

1) Проверьте папку #папка_с_bpm#\Terrasoft.WebApp\conf\content. Поищите там файл ITProductReportDetailResources.js. 

2) Проверьте права на папку conf (должны стоять полные права IIS-юзеру)

3) Если нет файла/прав, то действительно надо перегенерировать и скомпилировать конфигурацию.

Ну и если файлы есть, а проблема воспроизводится - то прямой дорогой в ТП. Мб в загрузчике ресурсов накосячили. 

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

Где-то это можно сделать? Вместо "Новая запись" добавить свой текст. Менять нужно в параметрах элемента, или на самой странице?

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

Версия 7.11.

Нравится

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

Обычно название можно менять в разделе «Перевод». Главное не перепутать и изменить именно нужное место с этим текстом.

Но для преднастроенной, насколько понял, заголовок можно менять в её дизайнере

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

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

При выполнении элементов бизнес-процессов "Открытие страницы редактирования" и "Вопрос пользователю" в системе создаются технические активности. По ним удобно отслеживать движение по процессу и отправлять уведомления (главная задача).

Вопрос - можно ли как-то отследить аналогичным образом элементы "Автогенерируемая" и "Преднастроенная страница"? Ведь эти страницы имеют GUID, должны где-то сохраняться..

Нравится

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

Дмитрий, добрый вечер!



Активности типа "Автогенерируемая страница" и "Преднастроеная страница" хранятся в 2 таблицах: SysProcessData и  SysProcessLog. В первой таблице они сохраняются пока находятся в работе, во второй они сохраняются всё время.

Показать все комментарии
комментарии
Бизнес-процессы
7.11
sales

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

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

Нравится

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

Добрый день, Павел!



Для создания нового сообщения в ленту необходимо добавлять запись в объект “Сообщение/комментарий”. Для указания объекта, в ленте которого необходимо создать запись, необходимо заполнить колонку “Экземпляр объекта”.

Пример элемента: http://prntscr.com/jhbo18

Анна Журавель,

Спасибо, Анна! А в поле "Экземпляр объекта" что указывается? 

Коробов Павел Анатольевич,

Добрый день!



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

Анна Журавель,

Подскажите, нужно ли заполнять поле "Схема" (если да, объясните откуда брать данные и что это за объект)? Если заполнить поля "Экземпляр объекта", "Сообщение/комментарий" и "Контакт" - запись не создается. 

http://prntscr.com/nogym3&nbsp; - ошибка

http://prntscr.com/nogz4d - как заполнен БП

Туда нужно записывать Id той схемы (объекта в конфигурации, например «Лид»), к которой идёт комментарий. Посмотреть можно в адресной строке, открыв объект в дизайнере.

Evgenyi, данные берутся там из объекта, который так и называется "Схема", внутри которого есть Uid - именно он и требуется для заполнения поля "Схема".

 

Другими словами, например:

1. добавляете действие "Читать данные" и выбираете объект Схема, далее внутри указываете в фильтр по названию, например, название = "Канал" (тот в котором будет запись вашего сообщения ленты).

2. при добавлении записи в объект “Сообщение/комментарий” поле "Схема" заполняете из созданной вами в первом пункте объекта "Схема" и в параметре находите Uid

 

ps: сам проморочил голову, нигде никто не пишет подробно как вставить uid в поле схема.

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

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

При использовании элемента "Открытие страницы редактирования" в бизнес-процессах в системе создаётся специальная техническая активность, назначаемая на ответственного, которому открывается страница редактирования.

Существует другой БП, который при назначении ответственного на задачу (активность) отправляет уведомления по e-mail о назначении. Старт процесса - сигнал о создании активности.

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

Соответственно вопрос  - можно ли, наоборот, из технической активности вытащить в рамках БП ссылку (GUID) на страницу, которую открываем через "Открытие страницы редактирования". Задача состоит в том, что отправить в email ссылку сразу на эту страницу. В идеале - вытащить ещё некоторые сведения об объекте, страницу которого открываем, чтобы добавить их в письмо.

 

Нравится

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

Дмитрий, добрый вечер!



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

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

Добрый день

в тестовой конфигурации bpm online сделал модификации как форм, так и структуры некоторых таблиц.

Есть ли возможность перенести сделанные изменения, а не реализовывать их повторно в рабочей базе данных

Нравится

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

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

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

спасибо большое

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