Вопрос

Приветы,

 

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

на столбце где ссылка контакта "Петров И. А." - затем открывается страница редактирования этого контакта. Когда пользователь закрывает страницу редактирования то на странице (разделе/секции) контакты заново отрисовывается выбранная строка, вопрос: какое событие возникает, как этот факт обработать? 

 

Где-нибудь есть полный список событий и типовые примеры как их обрабатывать? Хотя бы сигнатуры.

У меня такой же вопрос

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

Добрый день!

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

Еще вариант - это в Chrome Developer Tools просмотреть исходный код прямо на странице. Так как он прокоментирован можно разобраться какой метод чем занимается. Плюс ко всему вы можете использовать там CallStack чтобы отследить вызовы методов. Ну или посмотреть исходники тут:

https://academy.terrasoft.ua/documents/technic-sdk/7-11/javascript-api-klientskoy-chasti-yadra-platformy

Если вам нужно знать какой метод-обработчик конкретно вызывается для перерисовки реестра, то вероятнее всего вы ищите reloadGridData. Если же - в каком месте производится локальное изменение записи реестра после закрытия карточки, то посмотрите в loadGridDataRecord, там идет точечное изменение записи.

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

Спасибо. Но примеров там нет или почти нет. 

"Много событий описаны в академии, но очень разбросаны по статьям. А консолидированного списка - нет." (Вот что-то открыл - https://academy.terrasoft.ru/api/jscoreapi/7.11.3/?_ga=2.110357765.1829… )

Их для роботов (гугла, яндекса) писали? Или для людей, как так... 

Приходится лазить в исходниках, но, зачем, я же не в Террасофте работаю.

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

Напишите книгу, чтобы ее можно было читать, с "консолидированными данными". Хороший образец MSDN :) Думаете часто приходится лезть в исходники asp.net?

Притом ответы с академии от ребят у которых другая версия (из предыдущих) не работают. (У нас 7.11.3 ентерпрайз сейлз) приемственности нет...

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день подскажите пожалуйста...
Мне требуется вывести модальное окно когда выбираем контакт при создании продажи.
Пакет OpportunitySectionV2

Я создал кастомный пакет, зависимость поставил от OpportunitySectionV2
Что мне сейчас нужно сделать ? Замещающий клиентский модуль или замещающая страница?

У меня такой же вопрос

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

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

Замещающий клиентский модуль. Замещающая страница создается для редактирования интерфейса страниц, созданных в версии 5.Х.

Войдите или зарегистрируйтесь, чтобы комментировать

Добрый день!

Подскажите, каким образом можно найти и переопределить обработчики событий стандартных контролов(например, кнопки Сохранить)?
Возможно ли изменить их стиль?

Спасибо!

У меня такой же вопрос

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

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

По сути это две задачи:
1) Изменить стиль (BasePageV2CSS)
2) Изменить обработчики (метод onCardAction, который вызывается при нажатии на кнопку "Сохранить")

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте. Я знаю C# и T-SQL, но в BPM'online только начал работать. Я прошу вас помочь мне в следующем.
1) Создать бизнес процесс, который по событию добавления/обновления записи выгружает информацию в шлюзовую таблицу и вызывает хранимую процедуру (которая, как я понимаю, перезаписывает данные из шлюзовой таблицы в целевую). Как это сделать?
2) Выполнить интеграцию по клиентам (физ. лицам, юр. лицам и индивидуальным предпринимателям), договорам, заявкам - после создания в СРМ системе клиента информация попадает в БД на MS SQL Server. После обновления данных информация попадает в БД на MS SQL Server. Как это сделать?
3) Выполнить первичный импорт даннных в CRM-систему из БД на MS SQL Server. Как это сделать?

У меня такой же вопрос

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

Здравствуйте, Евгений!
По вашим второму и третьему вопросам созданы отдельные темы:
http://www.community.terrasoft.ua/forum/topic/12869
http://www.community.terrasoft.ua/forum/topic/12870

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

Для отслеживания создания/изменения/удаления записи Вы можете использовать начальный элемент сигнал. В сигнале необходимо указать объект в bpm'online, в котором должны произойти изменения. Далее элементом "Чтение данных" Вы считываете измененный объект.
Далее элементом "Задание сценарий" Вы можете либо:

  1. вызвать веб сервис для интеграции (описание вызова веб сервиса прикреплено)
  2. вызвать хранимую процедуру

Хранимая процедура предварительно должна быть создана в системе (для этого перейдите в конфигурацию и на вкладке SQL-сценарии добавьте процедуру.

Большое спасибо за помощь.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

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

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

В основу решения было положено создание двух таблиц в базе данных для ведения логов, что происходят с записью набора данных. Первая таблица 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 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Подскажите как по нажатию на кнопку открыть определенную страницу?

У меня такой же вопрос

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

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

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

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

В этой теме описан пример реализации нужного Вам функционала (открыть карточку по нажатия на кнопку).

Все спасибо, получилось.

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

Коллеги,
Хакинг BPMonline продолжается и его невозможно остановить. Кто ещё не знает, вы можете подписаться на клиентское событие, предшествующее аналогичному серверному событию для какого-либо контрола. Достаточно одной строчки. Добавлять нужно на PageLoadComplete. Выглядит это так (обязательно со скобками и т.д.):

string script = @" function(){ //тело функции } ()";
Page.SomeControl.AjaxEvents.SomeEvent.OnClientEvent=script;

Зачем это нужно? Порядок запуска методов будет такой: ClientEventScript ->AJAX-> ServerPageInit -> ServerPageLoad -> ServerEventScript
И вы получаете уникальную возможность сделать что-то со страницей ещё до того, мы зайдем на сервер и его события Init и PageLoad. Например, вам нужно знать, была ли нажат кнопка сразу же на PageLoad после того, как она была нажата. Если вы сделаете флаг нажатия в ServerEventScript, то он будет установлен уже после того, как сработает Init, а если вы такой флаг добавите в клиентскую часть, то его можно вычитать на PageLoad и узнать, что кнопка была нажата(как передавать параметры между клиентом и сервером, расскажу отдельно). Кроме того, некоторая часть логики недоступна на сервере или её выставление на сервере будет ненужным-поздним.

Ниже пример, как это делается, а также кое-какие другие возможности.

string script = @" function(){
var savetofileparam = new Object();
savetofileparam.MenuItem = itemIndex;
var SaveMenuItemParams = Ext.util.JSON.encodeObject(savetofileparam, 3);
Terrasoft.AjaxMethods.ThrowClientEventWithParameters('"
+ InstanceUId + @"', 'SaveToFileCustomEvent',SaveMenuItemParams, {eventMask:{showMask:false}, isUpload: true}  ); } ()";
Page.SaveFileButton.AjaxEvents.MenuItemClick.OnClientEvent=script;

Тут мы добавляем функцию на клик пункта меню у кнопки, а также кидаем другое событие, которому передаём параметры в виде JSON-словаря SaveMenuItemParams (itemIndex-номер пункта, это передаётся в параметрах события, я узнал это опытным путём, у каждого клиентского события свои параметры). Также передаём параметры showMask и isUpload именно на клиенте, так как на сервере их передача не приводит к желаемому эффекту, потому что вычитываются они ранее ещё на клиенте. 'SaveToFileCustomEvent' – это произвольный message-событие. Если событие с таким названием определить на сервере, то можно его перехватить и выполнить свой код, при этом вычитав параметры, которые были упакованы, вот так ():

Dictionarystring, object> SaveMenuItemParams = context.ThrowEventArgs as Dictionarystring, object>;
if (SaveMenuItemParams != null) {
if (SaveMenuItemParams.ContainsKey("MenuItem")) {
  //код работы с  SaveMenuItemParams["MenuItem"]
 }
}

Поделиться

0 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать
Публикация

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

Вот простой пример:
Диаграмма процесса

И скрипт

//-----------------------------------------------------------------------------
// wd_Test1Script
//-----------------------------------------------------------------------------


function Item3OnFinish(FinishItem) {
        ShowInformationDialog('Вариант 1')
}

function Item4OnFinish(FinishItem) {
        ShowInformationDialog('Вариант 2')
}

Какой вариант ответа на вопрос ни выбери, сообщается, что выбран первый...

Версия 3.3.2.97

Поделиться

0 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать

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

Не могу понять в чем проблема. Террасофт версия 3.1.1.6.
Не отрабатываются события OnKeyPress, OnKeyDown и OnKeyUp.
Например, вешаю простой вывод в лог на DataGrid в окне wnd_OfferingsGridArea, а при нажатии на любую кнопку ничего не происходит. Вообще ничего.
В чем может быть проблема?

У меня такой же вопрос

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

Это кажется ошибка ядра, исправленная в более поздних версиях.

Э-э-э... в более поздних версиях бинарников? Или вообще всей системы?

добрый день.

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

Terrasoft Support Team

Бинарников. В 3.3 все нормально. А когда-то сам столкнулся с тем что OnKeyPress не работал в гриде

Ну, одно дело получить обновление бинарников для 3.1.1.6, а другое дело перейти на систему версии 3.3. :)

Проверила, на последних 3.1.1 не работает, а вот уже в 3.2.0 все ок:)

Замечательно... :( Значит, как сказала Коваленко Ирина, ждем, что скажет отдел разработки программного продукта...

Алексей, занимаемся указанной проблемой.

"Ключник Алексей" написал:Александр, занимаемся указанной проблемой.

Алексей. :)

Да, извините, исправился :)

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

Войдите или зарегистрируйтесь, чтобы комментировать