Скажите, пожалуйста, можно ли в BPMonline 7.6 создавать объекты программным образом, используя MS VS, язык C# и API, описанный в SDK? Например используя классы из пространства имён Terrasoft.Core.Entities? И если можно, то дайте ссылку на хороший пример. Заранее благодарен.

Нравится

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

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

К сожалению, на данный момент разработка схем конфигурации BPMonline на языке C# в MS Visual Studio не поддерживается.

Возможно для Вас будет полезная следующая статья:
Отладка серверного кода
http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/ServerCode…

Да, эту статью я читал.

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

Подскажите, пожалуйста, ещё - как добавлять колонки в существующие родительские и базовые объекты?

Нравится

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

Здравствуйте, Евгений!

Для этого в системе можно создавать замещающие объекты. Подробнее Вы можете ознакомиться в документации http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/SectionCon….

Цитирую:
"Если вам необходимо внести изменения в объект или страницу, которые являются частью базового пакета, в меню [Добавить] выберите [Замещающий объект] либо [Замещающая страница] соответственно, и в свойствах созданной схемы в поле [Родительский объект] или [Родительская страница] укажите схему, которую следует замещать в текущем пакете."

То есть, Вы можете создать замещающий объект и добавить в него желаемые колонки.

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

Здравствуйте, имеется terrasoft 3.3.1.126
Нет возможности удалить пользовательское поле в контрагентах (поле создано мной же), выдается сообщение: Невозможно удалить поле (Имя базы данных) т.к. существует связь FAccount(имя базы данных), использующее это поле..
после нажатия кнопки ок пользовательское поле пропадает из списка, но при следующем открытии terrasoft поле появляется вновь...

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

Прошу помочь советом в данном вопросе, за ранее спасибо.

Нравится

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

Имя базы данных тут, скорее всего, не при чём.
Попробуйте открыть tbl_Account d TSAdmin и удалить элементы, ссылающиеся на это поле в разделах Relations и Indexes.

Спасибо, но когда я удаляю элемент в разделе Relations вылетает сообщение разрушительный сбой.. и TSadmin закрывается.

Мне кажется, Вы что-то недоговариваете. Как называются поле и связь, может у них некорректные с точки зрения системы названия?

Нет нет я честный человек мне не чего скрывать.
В tbl_Account в разделе Field Поле называется type_sagawebID
В разделе Relations Связь называется FAccounttypesagawebID
В разделе Indexes ничего с таким названием не нашел
На сколько они не корректны судить не могу...
так же ещё нашел в элементе tbl_AccountLog в разделе fields, 2 поля type_sagawebID и type_sagawebName

Какого типа поле и если справочник, то на какой раздел ссылается?

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

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

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

Добрый день всем!

В Salesforce есть такое понятие, как связанные активности (емейлы, таски и тд). И есть такая кнопка View All, которая генерит вебстраницу, на которой отображены все связанные с parent record активности в развернутом виде (сабжект, описание, кто создал, когда и тд).

Такое представление очень удобно саппорт-инженерам, чтобы в один клик просмотреть всю переписку с пользователем.

Скажите, есть ли такая фича в BPMOnline? Сложно ли такого добиться?

С уважением,
Андрей

Нравится

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

Похожее делает стандартный отчёт «Досье контакта». Там есть раздел «История взаимодействия».
досье

Смотря что вы имеете в виду под "parent record". Если это инцидент, то связанные активности видны на детали "Активности" в том виде, который пользователь себе сконфигурирует

"Владимир Соколов" написал:

Смотря что вы имеете в виду под "parent record". Если это инцидент, то связанные активности видны на детали "Активности" в том виде, который пользователь себе сконфигурирует

Владимир, спасибо за ответ!
Нашел, настроил - сделано здорово.
Единственное, в режиме Tile View при выводе поле Body содержимое отображается в виде html-кода.

"Andrey Baranov" написал:Единственное, в режиме Tile View при выводе поле Body содержимое отображается в виде html-кода.

Тут решали похожую задачу - http://www.community.terrasoft.ua/forum/topic/9406

Но у вас bpm'online 7?

Да, у меня BPM 7, я уже заметил, что не в ту ветку форума запостил..

"Andrey Baranov" написал:Да, у меня BPM 7, я уже заметил, что не в ту ветку форума запостил..

Точно не подскажу, но думаю, что настройкой css можно добиться, чтобы в реестре показывать html. Картинки, ведь, показывают в Opportunity, и фото в Contact

Андрей, для объекта «Статья базы знаний» реализовано поле «Решение без HTML тегов». Для активности можно создать аналогичное поле, которое будет называться, например, «Тело без HTML тегов».

Пример кода Вы можете посмотреть в «KnowledgeBasePageV2». В блоке diff для контрола, в который выводиться значение поля «Notes», реализован байндинг «plainTextValue» на поле «NotHtmlNote».

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

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

Отвечает ли требованием безопасности (напр, настройка протокола TLS 1.2) BPMOnline SD?

Заранее большое спасибо.

С уважением,

Гюнель

Нравится

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

Здравствуйте.
Не совсем прозрачна формулировка вопроса. Если имеется в виду возможность работы BPM'online с использованием шифрования по протоколу TLS 1.2, то "да", такая возможность есть.

А в bpm'online 7.x уже нет?

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

"Александр Зубков" написал:Здравствуйте.
Есть.

Мне ТП ответила:

"TLS является развитием SSL. Возможность использования TLS включена в Roadmap функциональности bpm'online. Эта функциональность запланирована на версию 7.10. Однако Roadmap может быть изменен. Крайний срок реализации TLS в bpm'online - версия 7.11"

Очень ждем 7.11 и TLS

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

Маю задачу відображати візуально кількість нових пов"язаних звернень для поточного користувача.
В динамічних групах є група "!Связанные обращения", в ній показуються всі звернення данного користувача.

На даний момент бачу два варіанти вирішення задачі:
1) Створити динамічну підгрупу "Новые". Для цієї підгрупи в позиції назви динамічно показувати кількість нових звернень;
2) На головній сторінці добавити кнопку за прикладом кнопки вхідних email-ів і зав"язати на ній схожий функціонал, тільки не для email-ів, а для нових пов"язаних звернень.

Який з цих варіантів є більш прийнятним ?
Можливо знайдуться ще якісь варіанти ?

Нравится

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

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

Почав з варіанту (2).
Відразу зіткнувся з необхідністю розмістити зображення на кнопці.
Вибрав png-файл 16x16 (в інших розмірах відображається лише лівий верхній сегмент від зображення), підтягнув його на кнопку і тепер маю наступне:
- коли кнопка активна (Включить [x]), то на кнопці проявляється зображення з файлу;
- коли кнопка неактивна, то на кнопці пусто - тільки жовтий фон.

І як це лікувати ?

"Котенко Александр" написал:настроить соответствующую динамическую группу с просмотром количества записей в строке итогов

Цей варіант не зовсім підходить, бо він передбачає необхідність зайти в групу.
Замовник хоче, щоб на групу не треба було заходити, але щоб кількість нових пов"язаних звернень відображалася десь безпосередньо перед очима, - це і має спонукати замовника зайти на групу для роботи з цими зверненнями.

Варіант (1) в моєму викладі передбачає постійне оновлення кількості звернень в позиції назви групи, а не в ітогах.

"Ігор Андрусенко" написал:
- коли кнопка активна (Включить [x]), то на кнопці проявляється зображення з файлу;

- коли кнопка неактивна, то на кнопці пусто - тільки жовтий фон.

А если поместить кнопку в групу контролов и включать-выключать активность у группы, то такое же поведение?

Я її розмістив поміж кнопками
UnreadEmailCountButton і NewRemindingsCountButton
в групі NavigationButtonsControlLayout.
Включенні-виключення групи дає той же самий ефект.

Я так розумію, що є якийсь секрет в "приготуванні" файлу-зображення для кнопки, який заствляє зображення вести себе правильно, бо параметри самої кнопки співпадають з аналогічними параметрами "правильних" кнопок.

Да, сss стили :)
Заходите в консоль, далее на кнопку с лупой ("обзор элементов"), тыкайте на вашу кнопку, и посмотрите что там за стили применяются в момент нажатия. Вполне возможно, что position -161px какой нибудь устанавливается.
Там можно сразу и подредактировать и проверить эффект. Когда добьетесь своего, запоминаете название Ccs класса (вроде .base-text-edit .on-hover) который вы редактировали, созадете свой модуль, во вкладку less копируете исправленный класс, и подключаете его в define страницы: "имяМодуля!css".

А и да, еще в Diff потом в кнопку в свойство "controlConfig" нужно добавить "classes".
Я так делал, когда нужно было поменять поведения правой кнопки в текстовом контроле:

controlConfig: {
 
				"classes": ["lookup-edit-right-icon-custom"],
 
			}

Це в дизайнері сторінки ?

css подключается в дизайнере страницы, да. А создается в элементе с типом "модуль" во вкладке LESS.

но не спешите, сначала отладьте все в консоли:

Ох, простите, мои рекомендации относительно 7.х. У вас, я так понимаю, 5.х.... Тогда, к сожалению, тут вам не помогу :(

З файлу SolutionResources.xml витягнув зображення для кнопки непрочитаних email-ів (UnreadEmailCountButton) в коді Base64.
Розкодував код у файл image.png
Виявилось, таки правда, - хитро приготований файл для іконки.
По його прикладу приготував свій файл для нових пов'язаних звернень 16x64.
Ось така організація:

Игорь, с таким форматом файла кнопка заработала как надо?

На сторінці [MainPage] створив нову кнопку [NewServiceRequestLinkedButton].
Добавив лічильник нових пов'язаних звернень в SQL-функцію [fn_GetContactCounters],
в [MainPageEventsProcessSchema].[PageLoadCompleteScriptTask] добавив код обробки для новоствореної кнопки у змінній [remindingTimerScript]:

PageContainer_NewServiceRequestLinkedButton.
	setEnabled(userCounters.newIncidentsLinkedCount > 0);
PageContainer_NewServiceRequestLinkedButton.
	setCaption(userCounters.newIncidentsLinkedCount.toString());
if (userCounters.newIncidentsLinkedCount && userCounters.newIncidentsLinkedCount > 0) { 
	PageContainer_NewServiceRequestLinkedButton.setButtonStyle('yellow');
} else {
	PageContainer_NewServiceRequestLinkedButton.setButtonStyle('blue');											   
}

На даний момент маю ось такий результат:
Якщо є нові пов'язані звернення:

І якщо немає:

То есть решение было и в правильной картинке, и в выставлении Enabled, и в выставлении стиля?

Тепер ще треба до кнопки прив'язати функціонал переходу в розділ [Обращения] і забезпечити, щоб активною ставала динамічна група.

"Зверев Александр" написал:То есть решение было и в правильной картинке, и в выставлении Enabled, и в выставлении стиля?

Так. Без правильної картинки при відсутності потрібних звернень картинка взагалі не відображалася.
При чому зображення не відображалося вже в самому дизайнері.

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

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

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

Во время удаление сервиса выдает следующую ошибку:

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

Как можно узнать каким именно объектам данный сервис привязан?

Заранее большое спасибо.

Нравится

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

я обычно узнаю, пытаясь повторить это удаление в SQL Server Management Studio.
Тогда в тексте ошибке будет название ограничения.
По этому названию нахожу, что мешает удалению (в последней строке поставьте название ограничения):

SELECT
OBJECT_NAME (f.parent_object_id) AS [Table],
ept.value AS [Table description],
COL_NAME (fc.parent_object_id, fc.parent_column_id) AS [Column],
epc.value AS [Column description],
OBJECT_NAME (f.referenced_object_id) AS [Referenced table],
ept_ref.value AS [Referenced table description],
COL_NAME (fc.referenced_object_id, fc.referenced_column_id) AS [Referenced Column],
epc_ref.value AS [Referenced Column description],
ix.name AS [Unique referenced table],
[Unique type referenced table] =
CASE
WHEN ix.is_primary_key = 1 THEN 'Primary key'
WHEN ix.is_unique_constraint = 1 THEN 'Unique constraint'
WHEN ix.is_unique = 1 THEN 'Unique index'
END,
delete_referential_action_desc AS [Delete referential action],
update_referential_action_desc AS [Update referential action]
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc ON f.object_id = fc.constraint_object_id
INNER JOIN sys.indexes as ix ON (f.referenced_object_id = ix.object_id)
AND (f.key_index_id = ix.index_id)
LEFT JOIN sys.extended_properties AS epc ON epc.minor_id = fc.parent_column_id
AND epc.major_id = fc.parent_object_id AND epc.Name = 'MS_Description'
LEFT JOIN sys.extended_properties AS ept ON ept.minor_id = 0
AND ept.major_id = fc.parent_object_id AND ept.Name = 'MS_Description'
LEFT JOIN sys.extended_properties AS epc_ref
ON epc_ref.minor_id = fc.referenced_column_id
AND epc_ref.major_id = fc.referenced_object_id AND epc_ref.Name = 'MS_Description'
LEFT JOIN sys.extended_properties AS ept_ref ON ept_ref.minor_id = 0
AND ept_ref.major_id = f.referenced_object_id AND ept_ref.Name = 'MS_Description'
WHERE f.name = 'FKpeg4kcj9DjjyMAlGPzQ78EpM';

Ну, и на живой базе это лучше не делать
Может, есть более простой способ?

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

Можно выводить исключение SQL со связями, препятствующими удалению, прямо в bpm'online.

Инструкция прилагается ниже.

vyvod_sql_preduprezhdeniya_v_bpmonline.docx

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

Здравствуйте , есть несколько объектов Entity (родитель Базовый Объект) в которых есть каскадное \ связанное обновление реализованное на событиях. Скажите можно ли инициализировать изменения в одном из них, так чтобы для низ лежащих не проверялись права для того кто инициировал изменение в родителе.

Или вообще инициировать изменение или сохранение объекта Entity из под другого логина например?.

Права на объекты настроены на уровне записей.

Предметно:

Есть лист согласования который согласует заявление на отпуск, в котором должны поставить визы руководители и отдел кадров. У заявление на отпуск в детали есть записи указанных дней отпуска (Персональные дни), для каждого сотрудника (Контакт). В этих днях, есть кол-во использованных дней, которое по закрытие заявления рассчитываются. Права на изменение и добавление есть у отдела кадров, у сотрудника только на чтение, для того чтобы формировать заявление. Если лист согласование завизирван всеми участниками успешно то меняется заявление (изменяет состояние), и далее заявление на уровне объект (Entity) меняет те дни которые указанны в детали. И получается: чтобы всё прошло успешно - необходимо выдавать права на изменение на всё это хозяйство - всем кто должен подписать отпуск. Что не есть хорошо.

пример изменения по событие в entity

if (daysCount == daysUsed  &&  (daysUsed > 0)) {
   Entity.SetColumnValue("FreeDayStatusId", Terrasoft.Configuration.FreeDayStatusConst.used);
}

Я понимаю можно было написать update, или сделать на уровне SQL Server триггером, в первом случае придется воротить много одинаковых update со всех мест которые меняют объекты, во втором нагрузка на БД а не на IIS и условия изменения в данных не позволяют использовать триггер бд.

Нравится

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

Если вместо UserConnection использовать UserConnection.AppConnection.SystemUserConnection, то права будут игнорироваться.

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

Как можно сделат так что бы, при нажатие кнопки "Сервис" на карточки активности, открылся справочник "Сервис" с филтрацией с полем "Тип обращения"? (прик. файл)

Заранее большое спасибо.

Нравится

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

Активность по инциденту?
Если да, то аналогично этому, но сначала получаем значение IncidentId у задачи. Если оно заполнено, то вытягиваем тип этого обращения при помощи функции GetEntityTypedColumnValue и по этому типу и фильтруем.

В обработчике события ServiceEdit процесса страницы карточки задача добавила следующий код:

Page.ServiceEdit.PrepareLookupFilter += delegate(object sender, LookupEditEventArgs e) {
/*var typeOfServiceRequestIncidentId = (Guid)Terrasoft.Core.Configuration.SysSettings.GetValue(UserConnection, "TypeOfServiceRequestIncident");
var typeOfServiceRequestServiceCallId = (Guid)Terrasoft.Core.Configuration.SysSettings.GetValue(UserConnection, "TypeOfServiceRequestServiceCall");
var typeOfServiceRequestMassIncidentId = (Guid)Terrasoft.Core.Configuration.SysSettings.GetValue(UserConnection, "TypeOfServiceRequestMassIncident");*/
var currentTypeId = Page.DataSource.ActiveRow.GetTypedColumnValue("SubTypeId");
//currentTypeId = currentTypeId == typeOfServiceRequestMassIncidentId ? typeOfServiceRequestIncidentId : currentTypeId;
//if (currentTypeId == typeOfServiceRequestIncidentId || currentTypeId == typeOfServiceRequestServiceCallId) {
e.Filters.Add(new Dictionary {
{"comparisonType", FilterComparisonType.Equal},
{"leftExpressionColumnPath", "TypeOfServiceRequest"},
{"useDisplayValue", false},
{"rightExpressionParameterValues", new object [] {currentTypeId}}
});
};

Но к сожалению не зарабола.. (( Где я ошиблась?

Такой код нужно размещать на Init, а не в обработчике нажатия.

Начинает выдавать следующую ошибку при выборе справочника "Сервисы" на карточки активности: (прик. файл)

Date: 05.08.2015 15:12:11
Date (UTC): 05.08.2015 10:12:11

Exception Message: Значение с именем "SubTypeId" не найдено
Exception Type: Terrasoft.Common.ItemNotFoundException
Exception Source: Terrasoft.Core

Значит, у Вас в объекте «Активность» нет поля «SubTypeId» или оно не так называется.

Но вам же надо не тип активности, а тип обращения, по которому эта активность.
Вычитайте Id обращения, а потом с помощью функции GetEntityTypedColumnValue получите её тип.

Что-то у меня не получилась(( Не могли бы пожалуйста если не трудно подробно объяснит куда и что нужно добавит?

Заранее большое спасибо.

Но я же не знаю структуры Вашей базы и как называются поля.
Что-то вроде:

var serviceRequestId = Page.DataSource.ActiveRow.GetTypedColumnValue("ServiceRequestId");
var subTypeId = Terrasoft.Configuration.CommonUtilities.GetEntityTypedColumnValue<Guid>(UserConnection, "ServiceRequest", "SybType.Id", serviceRequestId);
Показать все комментарии

Добрый день!

Engagement Center 7.6
стандартный процесс - создание обращение через CTI-панель по входящему звонку
В процессе есть параметры ContactID и AccountID
Звонит какой-то пользователь в системе( Supervisor, допустим) другому пользователю.
У этого Supervisor заполнен Контрагент-Наша компания.

Сам процесс на входе как-то получает значения параметров ContactID и AccountID ( звонящий пользователь и его контрагент).
Где это происходит, в каком месте, скажите, пожалуйста?

Нравится

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

Добрый день!

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

Настройка процессов для CTI панели
Перечень процессов, который отображается в cti панели настраивается в справочнике "Действие cti панели". В справочнике можно добавлять/удалять кнопки запуска процессов, указывать текст кнопки, сам процесс для запуска и порядок расположения.

Обязательное условие для корректного запуска процесса из cti панели - наличие параметров ContactId, AccountId, PhoneNumber. В эти параметры передаются данные контрагента или контакта по звонку. В процессе можно использовать эти данные для быстрого поиска обращений по абоненту или созданию новой записи с данными из cti панели.
ContactId – принимает идентификатор контакта в звонке, тип данных – справочник, справочник контактов
AccountId – принимает идентификатор контрагента в звонке, тип данных – справочник, справочник контрагентов
PhoneNumber – принимает номер абонента в CTI панели, строка, 250 символов

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

Передача параметров реализована на CTI панеле. Когда пользователь "кликает" по нужному процессу, система передает описанные выше параметры в процесс.

"Передача параметров реализована на CTI панеле. Когда пользователь "кликает" по нужному процессу, система передает описанные выше параметры в процесс."

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

В itil transitions при добавлении действия в CTI-панель происходит почему-то только передача параметра-контакта, а его контрагент почему-то не передается в параметр.
Хотелось бы понять почему.

Дарья, добрый день!

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

В Engagement Center у вас все же идентифицируется и контакт, и его контрагент. По крайней мере, подставляется и контакт, и его контрагент. Где же в таком случае происходит идентификация контрагента?

Дарья, идентификация Контакта и Контрагента производится процессом "ContactIdentification", который находится в пакете "OperatorCustomerEngagementCenter". В рамках данного процесса сначала производится поиск Контакта, а затем из найденной карточки контакта считывается Контрагент, что видно на скриншоте.

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

Елена, спасибо.
Посмотрите, на схему его теперь, пожалуйста.

В самом начале, идет ветвление:

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

Если же определен либо Контакт, либо Контрагент, то происходит сразу же выход из-под процесса
( эта стрелка самая верхняя - в ней условия [#Контакт#] != Guid.Empty || [#Контрагент#] != Guid.Empty).
Как вы видите, в этом ветке не происходит никакого считывания контрагента.
После создается обращение по процессу - в котором заполнены и контакт, и контрагент.
Вопрос - где в данном случае происходит определение контрагента? Полагаю, что и контрагент, и контакт передаются как входящие параметры в процесс.
Это возвращает нас к моему первоначальному вопросу:
"Расскажите подробнее, пожалуйста, где именно в пакете CTIProcessActions реализована функциональность передачи параметров в процесс." Где именно, в каком сервисе, каком пакете это определяется?

Дарья, процесс определения Контакта и Контрагента происходит в CTI-панели при входящем звонке, далее эти параметры передаются в процессы.

Ниже привожу код функции, которая определяет параметры в CTI-панели и зашита в коде объекта.

getActionProcessParameters: function() {
var parameters = {
PhoneNumber: this.getLastAbonentNumber()
};
var subscriberKey = this.get("IdentifiedSubscriberKey");
if (!subscriberKey) {
return parameters;
}
var subscriberCollection = this.get("IdentifiedSubscriberPanelCollection");
var subscriberPanel = subscriberCollection.get(subscriberKey);
switch (subscriberPanel.get("Type")) {
case CtiConstants.SubscriberTypes.Contact:
case CtiConstants.SubscriberTypes.Employee:
parameters.ContactId = subscriberPanel.get("Id");
break;
case CtiConstants.SubscriberTypes.Account:
parameters.AccountId = subscriberPanel.get("Id");
break;
default:
break;
}
return parameters;
},

Спасибо. Можете сказать, в каком именно объекте зашита эта функция? Название сервиса?

Дарья, данная функция находится в объекте CtiPanel.

Добрый день!
Про engagement center поняла - спасибо.
по аналогии открыла конфигурацию ITIL transitions 7.5
нашла в объекте CTIPanel эту функцию.
Функция есть и она имеет вид

getActionProcessParameters: function() {
var parameters = {
PhoneNumber: this.getLastAbonentNumber()
};
var subscriberKey = this.get("IdentifiedSubscriberKey");
if (Ext.isEmpty(subscriberKey)) {
return parameters;
}
var subscribers = this.get("IdentifiedSubscribers");
var subscriber = subscribers.get(subscriberKey);
switch (subscriber.SubscriberType) {
case CtiConstants.SubscriberTypes.Contact:
case CtiConstants.SubscriberTypes.Employee:
parameters.ContactId = subscriber.Id;
break;
case CtiConstants.SubscriberTypes.Account:
parameters.AccountId = subscriber.Id;
break;
default:
break;
}
return parameters;
}

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

Но почему-то в ITIL Transitions в процессе при этом будет заполнен только параметр контакт, в результате процесс пойдет по верхней ветке (т.к. там условие заполненности контакта или контрагента), но при этом создается обращение только с заполненным контактом.

Что не так в этой стандартной функции в определении параметров для ITIL?
Может быть исправлено это было в более новых сборках? Я сейчас рассматриваю 7.5.0.1054

Дарья, здравствуйте.

CTIPanel определяет только ИЛИ контакт ИЛИ контрагент и передает их значения в бизнес-процесс.

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

Case.BaseCasePage

onEntityInitialized: function() {
if (this.isAddMode() || this.isCopyMode()) {
this.setCaseNumber();
}
this.Terrasoft.SysSettings.querySysSettingsItem(this.statusDefSysSettingsName, function(value) {
this.set("StatusDefSysSettingsValue", value);
}, this);
this.updateOriginals();
var contact = this.get("Contact");
if (contact && !this.get("Account")) {
var account = contact.Account;
if (account) {
this.set("Account", account);
}
}
this.set("PreviousStatus", this.get("Status"));
this.callParent(arguments);
},

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