Здравствуйте! Была ли у кого-нибудь такая ситуация, когда на детали сортируешь по определённому полю, и происходит не просто сортировка, а изменяется количество записей, т.е. например до того как отсортировать записи на реестре детали, их было 8, а после - 12?

Нравится

6 комментариев
Лучший ответ

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

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

О, тоже не раз замечал клиент такое. В реестре видит одно количество записей, а в Summaries - другое. И только refresh помогает

Если в Summaries  больше то можно думать в сторону фильтрации и о каком реестре речь о Lookup справочнике или реестре раздела? 

В первом случае можно думать о фильтрации во втром права и тд. А свалов не было в консоли броузера?

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

Если же воспроизводится постоянно, нужно в профайлере смотреть SQL-запросы: может, какое-то хитрое условие фильтрации для этой группы в разделе или условия привязки детали к такому приводят.

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

 

 

Григорий Чех,

В консоли ничего не валится, и я дождался загрузки данных после нажатия "показать ещё". Речь идёт о реестре детали "Пакет документов".

На первом скрине при фильтрации по колонке "Документ", есть 2 записи "Договор аренды" у заявителя, всё хорошо.

https://yadi.sk/i/vH19rH6KcGSXOQ

но потом при фильтрации по колонке "Роль", этих записей у заявителя нет, вот может кто-то объяснит что это?

https://yadi.sk/i/AZFQEA194gzTKQ

Смотрите SQL-запросы при открытии детали.

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

Здравствуйте! Чего-то я не понимаю, но как отсортировать записи справочника в модальном окне по номеру месяца, а не как по умолчанию - названию. т.е. открываем справочник, а там уже отсортировано по номеру месяца.

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

 

Нравится

8 комментариев
Лучший ответ

Дульский Александр,

В схеме модального окна, замещаете и пробуете с условиями либо делаете собственное модальное окно.

А вообще, самый быстрый вариант, если варианты выше не отработали по какой-то причине и нету принципиальной разницы.

Вы можете изменить сами названия в справочнике чтобы сортировалось правильно и будет так: 01.Январь, 02.Февраль ..12.Декабрь и в вашем окне сразу все правильно отобразится

Попробуйте что-то вроде такого: 

initQuerySorting: function(esq) {
  if (!esq.columns.contains("CreatedOn")) {
    var createdOnColumn = esq.addColumn("CreatedOn");
    createdOnColumn.orderPosition = 1;
    createdOnColumn.orderDirection = this.Terrasoft.OrderDirection.ASC; //DESC
  }
 }

 

Как вариант, можете попробовать через Конфигурацию установить колонку сортировки http://prntscr.com/kx2u2z для вашего объекта Справочник.

На сколько я помню - должно сработать.

Литвинко Павел,

А где применить данный метод, если это модальное окно справочника? и сортировка должна быть только по этому справочнику.

Сидоров Александр Валерьевич,

Я пробовал ранее, но к сожалению не работает

Добавить атрибут по полю справочника в страничку, в которой используется справочник. Примерно так:

attributes: {
	"Status": {
		"lookupListConfig": {
			columns: ["Name","UsrMonthNumber"]
			orders: [{columnPath: "UsrMonthNumber"}]
			}
		}
},

 

Григорий Чех,

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

Тогда уточните как вы открываете модальное окно?

Дульский Александр,

В схеме модального окна, замещаете и пробуете с условиями либо делаете собственное модальное окно.

А вообще, самый быстрый вариант, если варианты выше не отработали по какой-то причине и нету принципиальной разницы.

Вы можете изменить сами названия в справочнике чтобы сортировалось правильно и будет так: 01.Январь, 02.Февраль ..12.Декабрь и в вашем окне сразу все правильно отобразится

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

Прошу откликнуться, у кого был опыт по направлению интеграции bpmonline и Яндекс.Метрика/ Google Analytics

Конкретные задачи:

1.       Изображение удалено.CRM       ->       Google Analytics: (важно это сделать до запуска) передавать по Measurement Protocol все данные о статусе заявки, + передавать статусы отказа по заявке. Получим отчет по всей воронке, от кликов с различных источников до выдачи карты. Отказы нужны, что бы понимать качество источников, с которых приходит трафик.

2.       Изображение удалено.Google Analytics        ->        CRM: передавать данные о кликах и источниках трафика из GA в CRM. Это позволит все данные о воронке хранить на нашей стороне, плюс визуализировать отчеты по воронке внутренними инструментами от Террасофт (возможно для визиаулизации и не понадобиться Power BI)

3.       Изображение удалено.CRM        ->       Яндекс.Метрика: передавать все данные о статусе заявки, + передавать статусы отказа по заявке. Получим отчет по всей воронке, от кликов с различных источников до выдачи карты. Отказы нужны, что бы понимать качество источников, с которых приходит трафик. Необходимо для оптимизации контекстной рекламы на Яндексе.

5.       Отдельно нам надо трекать в CRM действия наших клиентов, заходят они в интернет банк или мобильный банк, какие операции и где выполняют.

Нравится

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

Делал загрузку данных с Яндекс.Метрика и самое сложное - это правильно составить запрос + обработать данные. 

Все из того, что вы описали, делается простыми http-запросами, так что проблем возникнуть не должно. Остаются нюансы площадок (кол-во запросов в день, полечение oauth-токена, на гугле вообще приложение вроде как надо регистрировать)

А в чем проблема со стороны сервера на C# делать запросы к этим сервисам. Делал в свое время к Гугл-аналитике по АПИ, прекрасно работало. Понятно, что сама Гугл-аналитика в ВРМ передавать ничего не будет.

А получалось связывать клики с конкретным клиентом, который заведен в CRM? Как определяли?

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

Здравствуйте! Такая ситуация когда выполняется вызов метода получения UserConnection

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

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

 

Нравится

2 комментария
Лучший ответ

Добрый день, Александр.

Получение экземпляра UserConnection из объекта HttpContext (контекст запроса) возможно только в рамках веб-запроса к сервису. При вызове метода сервиса вручную (например, если создать экземпляр класса сервиса и вызвать нужный метод) нет контекста запроса, поэтому, при получении вы получаете ошибку.

При написании веб сервисов хорошая практика - не писать код обработки непосредственно в методах сервиса, а писать её в рамках некоторого вспомогательного класса. В класс следует добавить конструктор, который принимает объект UserConnection.

При вызове из метода сервиса, вы можете создать экземпляр данного вспомогательного класса и передать в конструктор экземпляр UserConnection, получив его из объекта HttpContext (как вы делаете в примере), а затем вызвать нужный метод вспомогательного класса.

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

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

var userConnection = Get<UserConnection>("UserConnection");
​var userConnection = context.UserConnection;

В рамках процессов объектов можно воспользоваться одноименным свойством - UserConnection.

Добрый день, Александр.

Получение экземпляра UserConnection из объекта HttpContext (контекст запроса) возможно только в рамках веб-запроса к сервису. При вызове метода сервиса вручную (например, если создать экземпляр класса сервиса и вызвать нужный метод) нет контекста запроса, поэтому, при получении вы получаете ошибку.

При написании веб сервисов хорошая практика - не писать код обработки непосредственно в методах сервиса, а писать её в рамках некоторого вспомогательного класса. В класс следует добавить конструктор, который принимает объект UserConnection.

При вызове из метода сервиса, вы можете создать экземпляр данного вспомогательного класса и передать в конструктор экземпляр UserConnection, получив его из объекта HttpContext (как вы делаете в примере), а затем вызвать нужный метод вспомогательного класса.

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

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

var userConnection = Get<UserConnection>("UserConnection");
​var userConnection = context.UserConnection;

В рамках процессов объектов можно воспользоваться одноименным свойством - UserConnection.

Семенов Александр Евгеньевич,

Спасибо большое за ответ, разобрался всё работает)

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

Здравствуйте! Подскажите пожалуйста, есть ли возможность сделать в bpm используя класс Insert, запрос такого вида:

Insert into "имя сторонней базы"."имя таблицы этой базы" (...) values (...);

т.е. сделать инсерт в другую стороннюю базу, или прочитать от туда таблицу. Если да, то как сделать.

Нравится

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

Скорее всего нет. Особенно, если система в облаке)

Хотя я бы потестил на локальной версии. Пользователю, под которым BPM лезет в бд, выдал права на другую базу, и запрос бы оформил через CustomQuery

Можно создать view с запросом на выборку, триггерами вместо вставки, изменения и удаления в стороннюю базу. Затем создать привязанную к ней схему с такими же колонками и проставленным признаком «представление» и работать с ней так же, как с обычной.

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

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

Здравствуйте! Может кто-нибудь подскажет как решать проблему, с отображением данных уведомлений.

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

Сами уведомления приходят, всё хорошо, но они не отображаются "красными кружками", в боковой панели, на "Центр уведомлений". Версия 7.11

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

Нравится

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

Механизм уведомлений будет работать корректно при правильно настроенных сокетах. С порядком настройки сокетов можно ознакомиться здесь. Также следует обратить внимание на тот факт, что обязательно должен быть активирован компонент "WebSocket Protocol". Ниже прикреплен скриншот для наглядности:

Мотков Илья,

Cпасибо за ответ, сделал как написано, в консоли отобразилась надпись 

WebSocket-connection opened for url:ws://demo.bpmonline.com/0/Nui/ViewModule.aspx.ashx

а так же типа такого периодически сыпется

Уведомления всё равно не появляются, т.е. сами уведомления приходят, но оповещений на уведомления так и не появляются.

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

Насколько понимаю Ваш сайт размещен локально. В данном случае Вам следует обратить внимание на следующие факторы:

1. Должна использоваться только регламентированная Terrasoft операционная система (только Windows в качестве сервера для разворачивания и для клиентской ПК. Также для клентского ПК еще может использоваться MAC OS но только в браузере Safari);

2. Должен использоваться только регламентированный Terrasoft браузер (Chrome, Mozilla последней актуальной версии, Safari под MAC OS);

3. Должны быть открыты и корректно настроены веб-сокеты, ссылка выше.

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

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

Выполнил загрузку пакета по инструкции: 

https://academy.terrasoft.ru/documents/technic-sdk/7-12/zagruzka-paketo…

Командой: 

C:\bpmonline7.9.2\Terrasoft.WebApp\DesktopBin\WorkspaceConsole\Terrasoft.Tools.WorkspaceConsole.exe -packageName=userPackage -workspaceName=Default -operation=InstallFromRepository -sourcePath=C:\SavedPackages -destinationPath=C:\TempPackages -skipConstraints=false -skipValidateActions=true -regenerateSchemaSources=true -updateDBStructure=true -updateSystemDBStructure=true -installPackageSqlScript=true -installPackageData=false -continueIfError=true -logPath=C:\Log

Где параметр "-packageName=userPackage" заменил на собственное название пакета.

Вместе с моим пакетом, подтянулись все другие пакеты, включая базовые. Сейчас стоит вопрос о том, как можно(если можно) вернуть Bpm  в исходное состояние(до загрузки нового пакета), а так же стоит вопрос, по какой причине такое могло произойти, если на параметр "-packageName" должен устанавливать только указанный пакет? 

Нравится

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

Можно предположить, что остальные пакеты поставились от того, что нужный от них зависел. Проще будет откатить из бекапа.

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

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

Очередь настроена так:

Активность:

- Категория: Email

- Тип сообщения: Входящее

- Статус: Не начата

 

Проблема:

1) в списке Единого окна отображается разное кол-во записей. У одного пользователя не видны некоторые записи. Например у Supervisor 10 входящих, а у Artem 8 входящих, 2 записи должны отображаться, но их нет.

2) в списке Единого окна есть записи у которых Статус = Завершена, хотя в фильтре установлено отображать только Не начатые.

 

Как это окно работает, почему эти проблемы появились?

Нравится

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

Здравствуйте, Дмитрий!

По порядку:

1) В Едином окне будут отображаться записи, на которые есть доступ у  пользователя. Проверьте права доступа на запись. 

Так же запись должна быть в Едином Окне в статусе "Не обработана" или "В работе", тогда она будет отображаться.

http://prntscr.com/k45uj4

2) Вы можете построить в разделе, по которому строится "Единое Окно", фильтр из очереди, чтобы убедиться в том какие записи попадут в очередь. По данному вопросу необходимо увидеть какие у Вас выполнены настройки в очереди. Возможно у Вас стоит условие фильтрации "ИЛИ", вместо "И"

 

Гриценко Игорь пишет:

Так же запись должна быть в Едином Окне в статусе "Не обработана" или "В работе", тогда она будет отображаться

Это неправильно. Поскольку отсутствует возможность настроить очередь. Я не знаю как, но там появились записи, которые не соответствуют фильтру и в статусе В работе или Не завершена. Такого не должно быть, это нонсенс. Человек ожидает - настроил фильтр очереди - и в этом списке четко именно те записи, которые удовлетворяют фильтру. Я считаю это баг, или вы недостаточно проработали этот вопрос. 

Гриценко Игорь пишет:

Вы можете построить в разделе, по которому строится "Единое Окно", фильтр из очереди, чтобы убедиться в том какие записи попадут в очередь

Эта опция не работает! сколько угодно строишь очередь, меняешь фильтр, все одно - записи не соответствуют фильтру. Там какой-то баг дополнительно. У меня все правильно с фильтрами, это самое простое что можно сделать, фильтр "И". Права раздать элементарно, да и при чем тут права, если записи, которые отображаются - не соответствуют фильтру, там присутствуют кроме фильтра - дополнительные записи. 

Т.е. вывод - этот баг, или недоработка, что в очереди присутствуют записи по фильтру + записи В работе или Не обработана. Вопрос решился только путем удаления старой очереди и создания НОВОЙ, что исключает возможность переноса очереди посредством Данных. это БАГ. Предлагаю рассмотреть этот вопрос и исправить в новых версиях, чтобы записи были только в соответсвии с фильтром, или добавить дополнительный фильтр, которым можно включать выключать фильтр непосредственно очередей (статусы и т.д. ) поскольку реально этими статусами с помощью очереди управлять нельзя.

Добрый день, Дмитрий

Напишите на почту тех. поддержки - support@terrasoft.ru по данной проблеме.

Так же необходим будет кейс воспроизведения данной ошибки на базовой версии(без доработок) bpm'online (https://www.terrasoft.ru/trial?product=service).

Гриценко Игорь,

хорошо спасибо. 

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

Здравствуйте! Возникла следующая задача: есть БП, в нём выполняется шарпный код, по таймеру, и при завершении процесса, в параметры этого процесса, записываются значения, и мне необходимо после выполнения этого БП, на клиенте анализировать эти параметры и выводить соответствующие информационные уведомления. Но я чего-то не пойму как передать в callback, выполнения БП, эти самые параметры?

Нравится

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

Здравствуйте! Попробуйте передавать по каналу web-socket

Код на стороне БП

var userConnection = Get<UserConnection>("UserConnection");
var messageToUser = Get<string>("AbMessageToUser");
Terrasoft.Configuration.MsgChannelUtilities.PostMessage(userConnection, "AbCreatingSmsAudienceProcess", messageToUser);
return true;

На клиенте следующий код

 

define("ContactSectionV2", [], function() {
	return {
		entitySchemaName: "Contact",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		methods: {
			init: function () {
				this.callParent(arguments);
				this.subscriptionFunction();
			},
			subscriptionFunction: function() {
				Terrasoft.ServerChannel.on(Terrasoft.EventName.ON_MESSAGE,
				this.onAbCreatingSmsAudienceProcessMessage, this);
			},
			onAbCreatingSmsAudienceProcessMessage: function(scope, message) {
				if (!message || message.Header.Sender !== "AbCreatingSmsAudienceProcess") {
					return;
				}
				var message2 = message.Body;
				if (!this.Ext.isEmpty(message2)) {
					this.Terrasoft.showInformation(message2);
				}
			}
		},
		messages: {}
	};
});

 

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

 

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

Есть простая возможность (без использования MultiMaskEdit) ограничить ввод в текстовое поле:

- чтобы вводились только цифры

- количество - не более 12ти

(например опциями в diff.values)

?

Нравится

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

Такой возможности вероятнее всего нет из коробки. Стандартными средствами JavaScript обрабатывая клавиатурные события, можно посмотреть, например по ссылке - https://learn.javascript.ru/keyboard-events

Можно, например, добавить обработчик на keypress/keydown, и если это не цифра или в поле ввода уже 12 симоволов просто игнорировать нажатия

Спасибо

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