Подскажите как можно экспортировать пользователей с номерами IP телефонии что занесены в настройки пользователя?

Нравится

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

Вот пример формата поля ConnectionParams - {"debugMode":false,"disableCallCentre":true,"ExtensionName":"123"}

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

Ещё, как вариант, можно написать стандартный sql-запрос insert.

Для выгрузки данных реализуйте sql-запрос.

Если у Вас bpm'online on-site, то можно выполнить запрос прямо на сервере баз данных через Microsoft SQL Server Management Studio.

Если on-demand, то можно установить Модуль для выполнения SQL - скриптов "SQL Executor" и выполнить запрос из него.

И оттуда, и оттуда можно информацию выгрузить в MS Excel.

Алла Савельева,

а в какой таблице хранятся данные о номерах ip телефонии что прикреплены к пользователю? Мне нужно выгрузить таблицу с колонками "контакт; номер телефона avaya"

Александр Тыра,

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

Подозреваю, что речь о настройках телефонии Avaya, которые хранятся в части записей таблицы SysMsgUserSettings сериализированными в формате JSON в поле ConnectionParams. И в SQL-запросе придётся этот JSON парсить, вычленяя номер.

Как вариант, те же номера могут также вестись на детали средств связи в разделе контактов. Если они там есть у контактов этих пользователей, проще выгрузить оттуда.

Вот пример формата поля ConnectionParams - {"debugMode":false,"disableCallCentre":true,"ExtensionName":"123"}

Для разных систем телефонии формат ещё и разный.

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

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

Нравится

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

Александр Тыра,

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

Как вариант можно дернуть вэб сервис, тоже без перезагрузки страницы

Самый очевидный, но возможно не самый правильный вариант - esq.

Дмитрий А.,

Это доступ в базу данных, а я имею введу по событию что бы обновилось не все окно а только одно поле полезли в базу и обновилось. Как заставить это сделать по событию?

Александр Тыра,

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

Как вариант можно дернуть вэб сервис, тоже без перезагрузки страницы

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

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

Есть такой кейс.

В bpm’ часть обращений по электронной почте регистрируются из системы Service Desk одного из Заказчиков. 

Нумерация обращений разная в нашей bpm’ и в Service Desk Заказчика.

В связи с этим, если поступают уведомления/комментарии из Service Desk, то в bpm’ регистрируются дубли обращений.

Темы уведомлений из SD разные, но всегда содержится шестизначный номер обращения и первые две цифры 1 и 0.

Например, 102456.

Создал два параметра процесса:

usrSubject - тема письма.

usrNumber - номер обращения в теме письма, либо NULL - в противном случае.

 

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

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

Спасибо.

Нравится

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

Используйте чтото типа

//Regex pattern = new Regex(@"\d{5}");
Regex pattern = new Regex(@"\b[0-9]{6}\b");
var findNumber = "";
Match match = pattern.Match(text);
    if (match.Success)
        findNumber = match.Value;
    else
        findNumber = null;

 

Используйте чтото типа

//Regex pattern = new Regex(@"\d{5}");
Regex pattern = new Regex(@"\b[0-9]{6}\b");
var findNumber = "";
Match match = pattern.Match(text);
    if (match.Success)
        findNumber = match.Value;
    else
        findNumber = null;

 

Григорий, большое спасибо

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

Подскажите пожалуйста, в чем может быть проблема????!!!

SVN  вдруг внезапно перестал обновлять конфигурацию из хранилища

выдавая такую ошибку :

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

причем копирование базы данных с прода на сервер разработки ничем  не помог.

Новые изменения зафиксировать невозможно потому что требует сперва обновить изменения

а "обновить сейчас"  нельзя потому что пр попытке это сдалать ошибка (см.первый скриншот)

"восстановить из хранилища" - так же выдает туже самую ошибку (см. первый скриншот)

з.ы.

напрямую из TortoiseSVN любые коммиты проходят без ошибок

Нравится

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

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

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

Александр Тыра, прошу прощения - это где?

Посмотрите в дизайнере объекта.

Зверев Александр, интересно то , что такой обьект (SysSchemaDataSource) в конфигураторе отсутствует. Или вы про какой то другой обьект ?

 

Речь об одной из схем, которые Вы недавно создали или меняли вручную или через мастер раздела. На скриншоте видно UId, проверьте по нему.

Зверев Александр, такого Uid нет. Ошибка именно в таком виде более не выдается - осталась только шапка про ошибку SQL

В таком случае проверьте, всё ли в порядке с недавно менявшимися схемами. А зачем Вы пишете жирным курсивом?

Зверев Александр, не сразу разобрался где отключается жирный курсив. Не совсем очевидно было, а он включен по умолчанию.

 

насчет схем - действительно нашел одну проблематичную. Именно она не обновляется, не восстанавливается  и не удаляется. Как ее убить ?

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

Если именно удалить, то всё можно через базу, но нужно соблюдать осторожность.

Зверев Александр, решил проблему иначе и проще. временно перенес сбойный модуль из пакета в CUSTOM что дало возможность восстановить пакет из хранилища :))) после чего всеошибки исчезли

 

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

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

Нам в суппорт ответили, что у нас возникает ошибка  из-за того что не выполняется отписка от сообщения. "Вам нужно либо выполнять отписку самостоятельно либо попробовать использовать ClientMessageBridge https://academy.terrasoft.ua/documents/technic-sdk/7-14/clientmessagebridge-obrabotchik-websocket-soobshcheniya-na-storone-klienta

"


У нас на клиенте подписка на сообщение с сервера. Как нам отписываться от него?

Вот подписка на клиенте:

init: function() {

    this.callParent(arguments);

    this.subscriptionFunction();

},

subscriptionFunction: function() {

    Terrasoft.ServerChannel.on(Terrasoft.EventName.ON_MESSAGE,

        this.bpListenerMessage, this);

},

bpListenerMessage: function(scope, message) {

    if (!message || message.Header.Sender !== "MessageForDetail") {

        return;

    }

    var message2 = message.Body;

    if (!this.Ext.isEmpty(message2) && message2 === "UpdateDetail") {

        this.reloadEntity();

        this.showInformationDialog("Актуализация дат окончена");

    }

    else if (!this.Ext.isEmpty(message2) && message2 === "UpdateDetailFix") {

        //Здесь в какой-то момент возникает ошибка

        this.reloadEntity();

    }

}

 

а вот отправка сообщения на сервере (кусок кода)

 

Terrasoft.Configuration.MsgChannelUtilities.PostMessage(uc, "MessageForDetail", "UpdateDetailFix");

Нравится

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

Добрый день.

Решение подобного вопроса обсуждается в этом посте.

Алла Савельева,

Это нам подходит? У нас не Sendbox.

А так будет работать?:

    bpListenerMessage: function(scope, message) {

                            if (!message || message.Header.Sender !== "MessageForDetail") {

                                return;

                            }

                            var message2 = message.Body;

                            if (!this.Ext.isEmpty(message2) && message2 === "UpdateDetail") {

                                this.reloadEntity();

                                this.showInformationDialog("Актуализация дат окончена");

                            }

                            else if (!this.Ext.isEmpty(message2) && message2 === "UpdateDetailFix") {

                                this.reloadEntity();

                            }

            },

            destroy: function() {

                this.Terrasoft.ServerChannel.un(Terrasoft.EventName.ON_MESSAGE, this.bpListenerMessage, this);

                this.callParent(arguments);

            },

 

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

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

Нравится

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

Эта логика реализована во встроенном БП объекта «Продукт в продаже» (OpportunityProductInterest). Там в обработчике событий сохранения и удаления записей в объекте детали запускается функция CalckOpportunityAmount с кодом:

var oppotrunityAmountSelect = new Select(UserConnection)
	.Column("Amount")
	.From("OpportunityProductInterest")
	.Where("OpportunityId").IsEqual(Column.Parameter(opportunityId)) as Select;
double opportunityAmount = 0.0;
using (var dbExecutor = UserConnection.EnsureDBConnection()) {
	using (IDataReader dr = oppotrunityAmountSelect.ExecuteReader(dbExecutor)) {
		while (dr.Read()) {
			if(!dr.IsDBNull(0)){
				opportunityAmount += (double)UserConnection.DBTypeConverter.DBValueToDecimal(dr[0]);
			}
		}
	}
}
var update = new Update(UserConnection, "Opportunity")
		.Set("Amount", Column.Parameter(opportunityAmount))
		.Where("Id").IsEqual(Column.Parameter(opportunityId));
	update.Execute();

 

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

Спасибо. Нашел - получилось что бы в поле записывалась сумма, но я так понимаю должно быть еще сообщение которое заставляет страницу обновляться (или точнее поле на фронте). Не нахожу таких сообщений в OpportunityPageV2 и наверно с БП объекта тот что отправляет

У страницы OpportunityPageV2 есть много версий в разных пакетах.

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

Я смотрел сразу через дебагер в chrome, что бы видеть все версии сразу

Не оно ли:

details: /**SCHEMA_DETAILS*/{
...
OpportunityProduct: {
	schemaName: "OpportunityProductDetailV2",
	filter: {
		masterColumn: "Id",
		detailColumn: "Opportunity"
	},
	subscriber: {methodName: "onOpportunityProductChanged"}
},
...
methods: {
 
/**
 * Reloads current record.
 * @private
 */
onOpportunityProductChanged: function() {
	this.loadEntity(this.get("Id"));
	this.sendSaveCardModuleResponse(this);
},

 

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

Можно ли как-то переименовать название объекта таблицы (точнее заголовок). При изменении в объекте сама ORM не переименовывает таблицу в базе данных, а если руками переименовать таблицу а потом объект - тогда выдает ошибку "Ошибка сохранения: ORA-00942: table or view does not exist".

И да, база данных Oracle

Нравится

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

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

Именно заголовок сменился нормально, объект опубликовался:

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

я как раз ошибся, мне нужно "название" а не "заголовок" сменить. Но Ваше разьяснее как раз подошло, спасибо. Как вывод - лучше не лезть. А если лесть то по Вашему описанию.

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

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

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

Чтобы не изобретать велосипед, может есть доступ к классу отправки по емейл, который использует элемент "отправить письмо"? Чтобы подгрузились все настройки (что там нужно, отправитель, smpt и подобное).

Нравится

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

Добрый день!

В этой теме рассматривается подобный вопрос.

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

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

Добрый день!

В этой теме рассматривается подобный вопрос.

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

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

Алла Савельева,

Спасибо!)

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

При включении функционала "Деактивации записей" стало возможном деактивировать записи справочников. В инструкции академии указано что возможна деактивация в объектах, но не указано говорится ли о записях не справочниках, типа "Контакты".

Так вот вопрос, можно ли использовать деактивацию записей а "Контактах" и "Компаниях"? При активации этого функционала для данных объектов в классе появилось свойство "Деактивирован" и в базе данных тоже появилась колонка соответствующая, но в справочнике нет такого поля и в расширенном фильтре раздела тоже. Так же при изменении значения в колонке на "1" - запись так же видна в разделе

Нравится

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

На академии в описании данной функциональности написано:

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

На академии в описании данной функциональности написано:

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

Для разделов лучше использовать права доступа на записи.

Алла Савельева,

я правильно понимаю, что в разделах деактиворованые контакты будут видны?

Александр Тыра,

Да, деактивированные контакты в разделе 'Контакты' будут видны.

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

Всем добрый день. Версия 7.12.

В системе реализовано открытие мини-карточек для просмотра подробных данных, с помощью стандартных вызовов такого типа:

this.openMiniPage({
	recordId: Terrasoft.GUID_EMPTY,
	operation: Terrasoft.ConfigurationEnums.CardOperation.ADD,
	entitySchemaName: "UsrInvoice",
	valuePairs: defaultValues,
	isFixed: true,
	showDelay: 0,
	miniPageSchemaName: "UsrInvoicePage",
});

Схема самой мини-карточки наследуется от BaseMiniPage, вызов происходит в стандартной схеме карточки или детали.

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

В чём может быть причина? Возможно не хватает каких-нибудь параметров?

Нравится

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

Меня смущает параметр 

showDelay == 0

Это время показа карточки до закрытия? Попробуйте его убрать или увеличить.

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

Но всё равно иногда закрывается сама собой.

В версии 7.11 при проставлении в поле миникарточки даты через открывающийся календарь происходило произвольное закрытие этой миникарточки.

Такое же поведение, то есть произвольное закрытие миникарточки, наблюдалось, когда пользователю отображается информационное окно showInformationDialog("Какой то текст"); и пользователь нажимает ОК.

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

В 7.12 могло быть аналогичное поведение миникарточек. Осталось ли такое закрытие в нынешних версиях — лучше проверить, развернув демо-версию и использовав там тот же скрипт.

Диалоговое окно поверх мини-карточки открывается нормально.

Карточки закрываются сами по себе без действий пользователя. Причём всегда одни и те же. Отсюда и вопрос - может быть, что т о в параметрах или содержимом карточки мешает?

Сложно сказать, не понимая, в чём между ними разница. Посмотрите в отладке или в HTTP-запросах в Fiddler, что вообще происходит. У меня похожие странности из-за умирания мыши происходили, но тогда не было бы зависимости от конкретных карточек.

Коллеги, вопрос решён с помощью добавления свойства ShowValueAsLink: false в параметрах справочных полей в diff.

Проблема была связана в целом со всплывающими мини-карточками https://academy.terrasoft.ru/documents/technic-sdk/7-14/sozdanie-mini-kartochki

Добрый день! 

Подскажите, свой-во ShowValueAsLink: false в diff какого объекта добавляется?

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