Добрый день,

Необходимо реализовать связь определенного Сервиса и Договора с конкретным Приоритетом обращения.
Например;
Сервис 1 Договор 1 всегда соответствует Приоритету Обращений "Высокий",
Сервис 1 Договор 2 всегда соответствует Приоритету Обращений "Критический",
Сервис 2 Договор 1,Договор 2 всегда соответствует Приоритету обращений "Низкий" и т.д.

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

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

bpm'online ITIL service 7.5.0

Нравится

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

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

Добрый день, Маргарита!

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

В вашем кейсе пользовательскими средствами описанную Вами логику можно реализовать только при помощи бизнес-процесса. Настраиваемый процесс может устанавливать приоритет Обращения, в зависимости от значения поля "Рекомендуемый приоритет" в Сервисном договоре.

Настроенный процесс будет подобного вида:

1. Стартовый сигнал. Процесс должен стартовать при создании нового Обращения.
2. Чтение данных. Должны быть прочитаны данные Обращения.
3. Чтение данных. Прочитать данные Сервисного договора.
4. Изменение данных. В обращении указать приоритет из Сервисного договора.

Спасибо, Елена,

Что-то меняется, если я буду использовать рекомендуемый приоритет не из Сервисного договора, а именно из "Сервиса в договоре" ?

1. Стартовый сигнал. Процесс должен стартовать при создании нового Обращения.
2. Чтение данных. Должны быть прочитаны данные Обращения.
3. Чтение данных. Прочитать данные "Сервиса в Сервисном договоре" (есть ли отдельно такой объект???).
4. Изменение данных. В обращении указать приоритет из "Сервиса в сервисном договоре".

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

Еще столкнулась со следующей проблемой:

в деталь Сервис в сервисном договоре внесла изменения
http://*****/0/NUI/ViewModule.aspx?vm=DetailWizard#PageDesigner/eebab1d7-5d03-431c-82a0-7ded2ad9aad0

Добавила поле "Рекомендуемый приоритет" (UsrRecPriority), которое заполняется выбором из справочника Приоритет Обращения (файл вложение UsrRecPriority).
Сохранила изменения.

После этого невозможно стало открыть карточку Сервиса в сервисном договоре (В сервисном договоре выбираю Сервис -> Изменить и далее повисает загрузка)

Uncaught Terrasoft.NullOrEmptyException: Заголовок для подписи "UsrRecPriority8adadf8d-f129-4759-a983-ae4b85227674" не был найден.Ext.define.generateLabel @ ViewGeneratorV2.js:718Ext.define.generateControlLabel @ ViewGeneratorV2.js:1082Ext.define.generateModelItem @ ViewGeneratorV2.js:974Ext.define.generateStandardItem @ ViewGeneratorV2.js:444Ext.define.generateItem @ ViewGeneratorV2.js:348Ext.define.generateGridLayoutItem @ ViewGeneratorV2.js:558(anonymous function) @ ViewGeneratorV2.js:533Terrasoft.utils.common.each @ all-combined.js:177Ext.define.generateGridLayout @ ViewGeneratorV2.js:532Ext.define.generateStandardItem @ ViewGeneratorV2.js:387Ext.define.generateItem @ ViewGeneratorV2.js:348(anonymous function) @ ViewGeneratorV2.js:667Terrasoft.utils.common.each @ all-combined.js:177Ext.define.generateContainer @ ViewGeneratorV2.js:666Ext.define.generateStandardItem @ ViewGeneratorV2.js:405Ext.define.generateItem @ ViewGeneratorV2.js:348(anonymous function) @ ViewGeneratorV2.js:667Terrasoft.utils.common.each @ all-combined.js:177Ext.define.generateContainer @ ViewGeneratorV2.js:666Ext.define.generateStandardItem @ ViewGeneratorV2.js:405Ext.define.generateItem @ ViewGeneratorV2.js:348(anonymous function) @ ViewGeneratorV2.js:319Terrasoft.utils.common.each @ all-combined.js:177Ext.define.generateView @ ViewGeneratorV2.js:318(anonymous function) @ ViewGeneratorV2.js:2084(anonymous function) @ ViewGeneratorV2.js:306context.execCb @ require.js:1597Module.check @ require.js:845Module.enable @ require.js:1113Module.init @ require.js:758(anonymous function) @ require.js:1379
/core/d54981d60c4636c80f841807acce5440/Terrasoft/amd/core.js:555 user: Supervisor/7f3b869f-34f3-4f20-ab4d-7480a5fdf647
file: http://******/0/configuration/6b9e368ad158690f72393cdc46655ef4/ViewGeneratorV2.js
line: 718
message: Uncaught Terrasoft.NullOrEmptyException: Заголовок для подписи "UsrRecPriority8adadf8d-f129-4759-a983-ae4b85227674" не был найден.
date: Thu Jun 25 2015 12:53:11 GMT+0300 (RTZ 2 (зима))

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

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

Добрый день!
версия 3.4.1
В карточке контакта и контрагента есть средство связи типа email, при его заполнении и нажатии на значок письма почему-то открывается не письмо с подставленным адресом, а пустая страничка браузера.
Почему? Как исправить?

Нравится

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

Здравствуйте.
Проверьте, пожалуйста, что запущена сборка, бинарные файлы которой зарегистрированы. Также нужно удостовериться, что включена и работает интеграция с Outlook. Далее нужно проверить, что Outlook установлен, как почтовый клиент по умолчанию (Файл\Параметры\Сделать Outlook используемой по умолчанию программой для электронной почты...).

Спасибо.
Скажите, пожалуйста, еще можно ли сделать следующее:
есть раздел e-mail - в реестре отображается только сообщения учетных данных данного пользователя.
остальным пользователям можно просматривать эти сообщения в разделе контакты на закладке e-mail.
Скажите, можно ли как-то сделать так:
чтобы системный администратор мог искать в разделе e-mail письма других учетных записей
(например, настроить динамическую папку там, ввести соответствующий адрес и видеть письма в этой папке)
Мне почему-то казалось, раньше была такая возможность..

Дарья, эта фильтрация задаётся в scr_MailWorkspace

function ApplyMailsWorkspaceFilter() {
	ApplyStandardWorkspaceFilter();
	ApplyDatasetFilter(BaseWorkspace.GridDataset, 'OwnerID',
		Connector.CurrentUser.ContactID,
		!BaseWorkspace.GroupsDataset.ValAsBool('IsFiltered'));
}

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

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

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

Часто встречается задача - менять видимость поля по определённому условию. Это можно сделать привязав функцию к свойству "visible" разметки, либо через правила. Дополнительно нужно стирать уже ненужное / некорректное значение из поля, когда visible = false. Я это делал через attributes -> depenedencies, подозреваю также, что можно прибиндиться на свойство "value" в разметке.

Вопрос - как лучше это сделать (сбрасывать значение когда поле становится невидимым?) Нет ли такой возможности в правилах bind parameter? Вот допустим в правилах фильтрации есть настройка "autoClean: true". Нет ли чего-то подобного в bind parameter rules?

Пример через правила.

"UsrCandforVac": {
        "BindParameterVisibleUsrCandforVacByUsrCandGlobalStatus": {
                ruleType: BusinessRuleModule.enums.RuleType.BINDPARAMETER,
                property: BusinessRuleModule.enums.Property.VISIBLE,
                logical: Terrasoft.LogicalOperatorType.AND,
                "conditions": [{
                        "leftExpression": {
                                "type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
                                "attribute": "UsrCandGlobalStatus"
                        },
                        "comparisonType": Terrasoft.ComparisonType.EQUAL,
                        "rightExpression": {
                                "type": BusinessRuleModule.enums.ValueType.CONSTANT,
                                "value": "5fc83e17-0996-4642-bb22-1f93869c6ebc" // UsrCandGlobalStatus == 'Employee'
                        }
                }]
        },

Спасибо

Нравится

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

Добрый день!

К сожалению, других на данный момент способов нет.
Если Вы хотите, чтобы данное поле очищалось при условии, то Вам необходимо биндиться на атрибут «Visible» и добавить собственный обработчик, который будет при false стирать значение.

Спасибо за ответ. Получается функция, которая должна отвечать за видимость и возвращать true/false, будет еще и совершать побочное действие - изменение значения :) Хотя, наверное это самый простой способ на данный момент..

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

Добрый день!

Подскажите, делал ли кто-то интеграцию с ВКонтакте?
Версия 7.3

Нравится

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

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

По информации от руководителя команды проектных разработок, пока, примеров такой реализации нет.

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

Добрый день,
Каким образом можно реализовать отправку сообщений автору Обращения при появлении сообщения в Ленте?
Если это бизнес-процесс, то что должно выступать в качестве начального события?

bpm'online ITIL service 7.5.0

Нравится

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

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

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

Если Вы будете реализовывать бизнес процесс, стартовый сигнал должен быть от объекта Сообщение/комментарий.

Пример реализации стартового сигнала Вы можете найти во вложении.

Спасибо Елена,
Воспользуюсь вашей рекомендацией

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

Всем здрасьте,

Собсна сабж. Методом тыка не подобрал, поиском по форуму не нашел (

Спасибо!

Нравится

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

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

function btnGPSOnClick(Control) {
        var xmlhttp = getXmlHttp();
        var str = 'http://geocode-maps.yandex.ru/1.x/?geocode=' + dlData.Dataset.Values('Address');
        xmlhttp.open('GET', str, true);
        xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4) {
                if(xmlhttp.status == 200) {
                        var PosElem = xmlhttp.responseXML.getElementsByTagName('pos');
                                var GPS = PosElem[0].text;     
                                var sqGetGPS = Services.GetNewItemByUSI('sq_GetGPS');
                                sqGetGPS.Parameters.ItemsByName('StringGPS').Value = GPS;
                                var dsGetGPS = sqGetGPS.Open();
                                if (System.MessageDialog('Координаты получены. X = ' + dsGetGPS.Values('GPSX') + ', Y = ' + dsGetGPS.Values('GPSY') + '. Сохранить?', mdtConfirmation, mdbYes + mdbNo, 0) == mrYes) {
                                        dlData.Dataset.Values('GPSX') = dsGetGPS.Values('GPSX');
                                        dlData.Dataset.Values('GPSY') = dsGetGPS.Values('GPSY');
                                        } else {
                                        return;
                                                };
                                }
                                }
                        };
        xmlhttp.send(null);
}

Пробовал более простой код, всё равно на методе send() - "Отказано в доступе":

var webAddress = 'http://geocode-maps.yandex.ru/1.x/?geocode=' + dlData.Dataset.Values('Address');
var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.6.0");
xmlHttpReq.open("GET", webAddress, false);            
xmlHttpReq.send();

Может кто-то сталкивался с такой проблемой, или просто знает, как ее решить?

Нравится

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

Может, дело в этом:


В бесплатной версии API Карт можно делать не более 25 000 запросов к геокодеру в сутки. Чтобы сократить число обращений, одинаковые ответы геокодера можно кешировать. Заодно это снизит нагрузку на ваш сайт или сервис.

Или же смотрите в их правилах, могут быть и другие тонкости. Там же адрес службы поддержки сервиса.

"Зверев Александр" написал:

Может, дело в этом:

Цитата:

В бесплатной версии API Карт можно делать не более 25 000 запросов к геокодеру в сутки. Чтобы сократить число обращений, одинаковые ответы геокодера можно кешировать. Заодно это снизит нагрузку на ваш сайт или сервис.


нет... проблема была в настройках IE...

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

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

Есть страница справочника, для загрузки файла на нее добавлен FileUploadEdit.
Обработчик FileUploadEditChange такой:

Page.DataSource.ActiveRow.SetStreamValue("FileData", new MemoryStream(Page.FileUploadEdit.FileBytes));
Page.DataSource.ActiveRow.SetColumnValue("FileName", Page.FileUploadEdit.FileName);
if (!IsNew && !IsCopy) {
        Page.DataSource.ActiveRow.Save();
}

При выборе файла для существующей записи (т.е. при редактировании) все работает, но при создании/копировании данные в полях FileData и FileName не сохраняются.
Пробовала сохранять данные в параметры процесса и затем редактировать Entity в событии DataSourceSaved и еще несколько вариантов, но так или иначе не получилось.
Помогите, пожалуйста

Версия bpm 7.3

Нравится

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

Добрый день!

Page.DataSource.ActiveRow.SetStreamValue("FileData", new MemoryStream(Page.FileUploadEdit.FileBytes));
Page.DataSource.ActiveRow.SetColumnValue("FileName", Page.FileUploadEdit.FileName);
if (!IsNew && !IsCopy) { //тут явно указано, что файл сохранять только для редактируемой записи
        Page.DataSource.ActiveRow.Save();
}

Дело в том, что файлы объекта это деталь, и каждая запись должна иметь связь с существуюущей записью. Так как новая запись или копия еще не записаны в базе, то и идентификатора у записи еще нет, и файл не может быть связан с ней.
Добавление файла может происходить только после сохранения записи (в новом интерфейсе это происходит автоматически).

"Вильшанский Дмитрий" написал:

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

Добавление файла может происходить только после сохранения записи (в новом интерфейсе это происходит автоматически).

Дмитрий, у меня это все одна таблица, никаких деталей нет.
Я так думала, что при создании записи по кнопке ОК данные должны сохраниться (поле FileName, кстати, сохраняется, а вот FileData - нет).
А вот это

if (!IsNew && !IsCopy) {
        Page.DataSource.ActiveRow.Save();
}

просто промежуточное сохранение записи(!), а не файла отдельно, как Вы пишите.

Лариса, по-моему строка, которая отвечает за сохранение изменений в базе:

Page.DataSource.ActiveRow.Save();

в случае создания новой/копирования текущей записи не выполнится, т.к. явно же стоит условие:

if (!IsNew && !IsCopy) 

Предполагаю, что если сделать так:

Page.DataSource.ActiveRow.SetStreamValue("FileData", new MemoryStream(Page.FileUploadEdit.FileBytes));
Page.DataSource.ActiveRow.SetColumnValue("FileName", Page.FileUploadEdit.FileName);
//if (!IsNew && !IsCopy) {
        Page.DataSource.ActiveRow.Save();
//}

все заработает :)

Если нет, предлагаю отладиться: к примеру, выводите длину потока MemoryStream:

MemoryStream memStream = new MemoryStream(Page.FileUploadEdit.FileBytes);
string memStreamLength = memStream.Length.ToString();

Вместо вызова Page.DataSource.ActiveRow.SetStreamValue можно вызвать Page.DataSource.ActiveRow.SetBytesValue с параметром Page.FileUploadEdit.FileBytes
Тогда не нужно будет создавать MemoryStream из массива бит.

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

Page.DataSource.ActiveRow.SetStreamValue("FileData", new MemoryStream(Page.FileUploadEdit.FileBytes));
Page.DataSource.ActiveRow.SetColumnValue("FileName", Page.FileUploadEdit.FileName);
Page.DataSource.ActiveRow.Save();

то для новой записи есть две проблемы:
1) если не заполнены обяз. поля, то exception
2) если поля заполнены и нажали ОК, то "Нарушение "PK3wdCGYrpgy5znnXrWkxqbuBPszM" ограничения PRIMARY KEY."
т.е. либо нужно провести валидацию перед сохранением новой записи (1 случай), либо установить какой-то признак, что запись уже сохранили (2 случай)
а в идеале это нужно скомбинировать

"Олейник Дмитрий" написал:

Если нет, предлагаю отладиться: к примеру, выводите длину потока MemoryStream:

MemoryStream memStream = new MemoryStream(Page.FileUploadEdit.FileBytes);

string memStreamLength = memStream.Length.ToString();


это пробовала, поток не пустой

Пробовала сохранять данные в параметр процесса с типами "Файл" и "Двоичные данные", при этом в скрипте записи значений в параметр все ок, а вот в другом скрипте (после сохр. записи) при обращении к параметрам уже ошибка "ссылка на объект не указыавет на экземпляр объекта"

Чтобы отключить валидацию при сохранении, можно выставить соответствующий параметр в false:

public bool Save(bool validateRequired = true)
Показать все комментарии

Добрый день!
Подскажите, пожалуйста, как и где можно поменять шрифт по-умолчанию в детали "Описание" на "Times New Roman"?
Сейчас там стоит "Arial" - http://joxi.ru/1A5RqYYsYlM0rE

Нравится

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

Тут писали, что программно менять шрифт можно, но сложно:

"Олейник Дмитрий" написал:

как оказалось, тут все не так просто. RichDataControl в BLOB поле хранит данные в RTF формате. Поэтому чтобы программно с кода изменить, к примеру, размер шрифта необходимо через RichDataControl.DataField.Value считать содержимое RTF файла, далее, соответственно спецификации формата RTF, найти и заменить строку fs12 на, к примеру, fs10. (что означает что размер шрифта будет не 12, а 10 пунктов). Для изменения других параметров шрифта необходимо также заменить RTF теги на любые требуемые Вам в RichDataControl.DataField.Value.

Подробнее про RTF теги: http://www.codenet.ru/progr/formt/rtf1.php

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

"Зверев Александр" написал:

Тут писали, что программно менять шрифт можно, но сложно:

Олейник Дмитрий пишет:

как оказалось, тут все не так просто. RichDataControl в BLOB поле хранит данные в RTF формате. Поэтому чтобы программно с кода изменить, к примеру, размер шрифта необходимо через RichDataControl.DataField.Value считать содержимое RTF файла, далее, соответственно спецификации формата RTF, найти и заменить строку fs12 на, к примеру, fs10. (что означает что размер шрифта будет не 12, а 10 пунктов). Для изменения других параметров шрифта необходимо также заменить RTF теги на любые требуемые Вам в RichDataControl.DataField.Value.

Подробнее про RTF теги: http://www.codenet.ru/progr/formt/rtf1.php

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


Спасибо! Буду пробовать

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

Добрый день!
В бизнес-процессе есть автогенерируемая страница , в которой в качестве элементов созданы два поля типа дата: дата начала(NeedStartDate) и дата окончания(NeedEndDate).
Соответственно на данной странице необходимо будет заполнить эти два поля.

Скажите, пожалуйста, как в скрипте бизнес-процесса впоследствии правильно обратиться к значению этих двух полей ( свойств объекта автогенерируемая страница).

Нравится

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

Добрый вечер, Дарья!

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

В случае, если Вы хотите использовать введенные пользователем параметры в элементе "Задание-сценарий", тогда обратиться к параметру Вы можете следующим образом:
AutoGeneratedPageUserTask[N].FieldName,
где AutoGeneratedPageUserTask[N] - название автогенерируемой страницы в процессе (именно название, а не заголовок), а FieldName - код элемента на автогенерируемой странице (задается при создании).

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