Добрый день!
ITIL 7.6
В разделе База знаний есть такое поле как Решение и Решение без HTML-тегов.
Подскажите, пожалуйста, где посмотреть реализацию поля "Решение без HTML-тегов" - где происходит расчет этого поля?

Нравится

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

Добрый день
Стоит задача: сделать новую деталь в разделе "Запрос на изменение". В этой детали должен быть как бы реестр изменения поля "состояние" этого ЗИ: наименование состояния и дата его изменения. Пожалуйста, помогите с порядком действий при добавлении этой детали. она должна быть новая или связанная? Заранее спасибо

Нравится

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

Вам нужно добавить новую деталь.
Связанная — это отображение в виде детали существующего раздела.
О создании детали написано в инструкции на стр. 206.

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

Добрый день.
Подскажите, как можно на клиентском модуле в 7.2 генерировать новые поля по нажатию кнопки?
Имеется ввиду обычный клиентский модуль с getView(), getViewModule(), render() и т.п
Заранее спасибо за помощь!

Нравится

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

Є реєстр запитів на внесення змін.
Редагується конкретний запит.
В ньому є деталь активності.
Редагується активність.
Змінюється статус активності.
По факту зміни статусу активності спрацьовує налаштований процес, який змінює статус запиту.

Все працює, але, ні на сторінці редагування запиту, ні, після його закриття, в реєстрі не відображається факт зміни статусу запиту (звісно, поки не зробиш примусового оновлення).

Запитання:
Як забезпечити візуальне оновлення статусу на сторінці редагування і в реєстрі запитів ?

Нравится

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

Не уверен, что можно из процесса, работающего с данными, достучаться до визуального отображения.
Особенно к уже открытой карточке. Теоретически, БП может сработать и по интеграции, когда никакой карточки и реестра нет.

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

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

Предоставляю упрощённый пример моего кода:

define("SxAssignmentPreconfiguredPageV2", ["CustomProcessPageV2Utilities"],
    function() {
        return {
            messages: {},
            mixins: {
                BaseProcessViewModel: "Terrasoft.CustomProcessPageV2Utilities"
            },
            attributes: {
                "IsAssignment": {
                    type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                    dataValueType: Terrasoft.DataValueType.BOOLEAN,
                    caption: { bindTo: "Resources.Strings.IsAssignmentCaption" }
                },
               "OwnersString": {
                   type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                   dataValueType: Terrasoft.DataValueType.String,
                   dependencies: [{
                       columns: ["IsAssignment"],
                       methodName: "onIsAssignmentChanged"
                   }]
               }

            },
            methods: {
                onIsAssignmentChanged: function(){
                    debugger;
                  if(this.get("IsAssignment"))
                      this.set("OwnersString", "Поле заполнено");
                },
                                        /**
                                 * @overridden
                                 * @returns {string}
                                 */
                                getHeader: function() {
                                        return "PreconfiguredPageV2";
                                },
                                /**
                                 * @overridden
                                 */
                                onEntityInitialized: function() {
                                        this.callParent();
                                },
                                /**
                                 * @overridden
                                 */
                                initHeaderCaption: Ext.emptyFn,
                                /**
                                 * @protected
                                 * @overridden
                                 */
                                initPrintButtonMenu: Ext.emptyFn,
                                /**
                                 * @overridden
                                 * @param {Object} args Параметры
                                 * @param {Object} tag Тег
                                 */
                                loadVocabulary: function(args, tag) {
                                        args.schemaName = this.model.attributes[tag].referenceSchemaName;
                                        this.callParent(arguments);
                                },
                                /**
                                 * @overridden
                                 */
                                onCloseCardButtonClick: function() {
                                        this.sandbox.publish("BackHistoryState");
                                },
                                /**
                                 * @protected
                                 */
                                onNextButtonClick: function() {
                                        this.acceptProcessElement("NextButton");
                                }
            },
            diff:[
                {
                    "operation": "remove",
                    "name": "CloseButton"
                },
                {
                    "operation": "remove",
                    "name": "actions"
                },
                {
                    "operation": "remove",
                    "name": "SaveButton"
                },
                {
                    "operation": "remove",
                    "name": "DelayExecutionButton"
                },
                {
                    "operation": "remove",
                    "name": "ViewOptionsButton"
                },
                {
                    "operation": "insert",
                    "parentName": "Header",
                    "propertyName": "items",
                    "name": "HeaderLabel",
                    "values": {
                        layout: {column: 0, row: 0, colSpan: 12},
                        "itemType": Terrasoft.ViewItemType.LABEL,
                        "caption": { "bindTo": "Resources.Strings.HeaderLabelCaption" },
                        "labelClass": ["new-record-header-caption-label"]

                        /*"classes": {
                            "labelClass": [
                                "t-label "
                            ],
                            "wrapClass": [
                                "label-wrap"
                            ]
                        }*/

                    }
                },
                {
                    // Метаданные для добавления кнопки [Следующий]
                    "operation": "insert",
                    "parentName": "LeftContainer",
                    "propertyName": "items",
                    "name": "NextButton",
                    "values": {
                        caption: {bindTo: "Resources.Strings.NextButtonCaption"},
                        itemType: Terrasoft.ViewItemType.BUTTON,
                        classes: {textClass: "actions-button-margin-right"},
                        style: Terrasoft.controls.ButtonEnums.style.GREEN,
                        click: {bindTo: "onNextButtonClick"}
                    }
                },
                {
                    "operation": "insert",
                    "name": "IsAssignment",
                    "parentName": "Header",
                    "propertyName": "items",
                    "values":{
                        bindTo: "IsAssignment",
                        caption : {bindTo: "Resources.Strings.IsAssignmentCaption"},
                        layout: {column: 0, row: 1, colSpan: 6}
                    },
                    "index": 0
                },
                {
                    "operation": "insert",
                    "name": "OwnersString",
                    "parentName": "Header",
                    "propertyName": "items",
                    "values":{
                        bindTo: "OwnersString",
                        caption :  {
                            "bindTo": "Resources.Strings.OwnersStringCaption"
                        },
                        layout: {column: 0, row: 2, colSpan: 6},
                        "contentType": 0,
                        "controlConfig": {
                            "className": "Terrasoft.TextEdit"
                        }
                    }
                }


            ]
        };
    });

Заранее спасибо.

Нравится

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

Ошибка в типе атрибута, у системного перечисления DataValueType нет значения "String", но есть значение TEXT.

Спасибо, помогло.

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

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

Метод, который определяет активность
isEnableButtonTest: function() {
debugger
var activeRow = this.get("ActiveRow");
if (activeRow)
{
var pc = this.get("GridData").get(activeRow).get("ServiceCategory");
//return (pc || pc !== "") ? true : false;
if (pc.value === UsrConsts.ServiceCategory.Test)
return true
else
return false;
//return (pc.value === UsrConsts.ServiceCategory.Test) ? true : false;
}
else
return false;
}

var pc = this.get("GridData").get(activeRow).get("ServiceCategory")
возвращает какое-то значение только, если колонка ServiceCategory выведена в реестр,
иначе значение undefined.
Почему? Скажите, пожалуйста, как это обойти?
И еще вопрос - при изменении поля ServiceCategory доступность кнопки меняется только, если обновить сам реестр. Как сделать автоматическое обновление кнопки?

Нравится

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

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

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

Добрый день!
Версия 7.6 ITIL
Полный список кода в прикрепленном файле

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

GridData не гарантирует получение результата. Для получения значения ServiceCategory, Вам необходимо сделать запрос в базу данных при помощи entityschemaquery. Значение Id (из таблицы Case) для выделенного обращения у Вас хранится в переменной activeRow.

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

Спасибо - про запрос с помошью entityschemaquery поняла ( просто в инструкции в sdk было написано GridData)

По поводу изменения доступности кнопки без обновления реестра - подскажите, пожалуйста, где можно посмотреть реализацию сообщений sandbox ?

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

Примеров реализации сообщений в нашей системе довольно много. Самым ярким примером могут служить модули BasePageV2 и BaseSectionV2. В этих модулях при инициализации вызывается метод subscribeSandboxEvents, который выполняет подписку на сообщения sandbox.

Например, в модуле BaseSectionV2 выполняется подписка на сообщение CardChanged, и когда модуль получает это сообщение, он устанавливает изменённое значение соответствующему атрибуту. Само же сообщение отправляет (публикует) модуль BasePageV2 при вызове метода publishPropertyValueToSection. В свою очередь, метод publishPropertyValueToSection вызывается при изменении некоторых атрибутов модели карточки редактирования.

Вы можете поступить похожим образом. Например, в методе init Вашей карточки редактирования (CasePage) подписаться на изменение поля ServiceCategory:

init: function() {
	this.callParent(arguments);
	this.on("change:ServiceCategory", function(model, value) {
		this.publishPropertyValueToSection("CurrentServiceCategory", value);
	}, this);
}

Таким образом, при изменении поля ServiceCategory карточки новое значение будет записываться в атрибут CurrentServiceCategory раздела CaseSection.

После этого в разделе Вы сможете получить значение текущей категории, обратившись к атрибуту CurrentServiceCategory:

isEnableButtonColumbus: function() {
	var serviceCategory = this.get("CurrentServiceCategory");
	if (!serviceCategory) {
		// Ваш код
	} else {
		return (serviceCategory.value === UsrConsts.ServiceCategory.Dynamix);
	}
},
Показать все комментарии

Добрый день!

Как можно установить заголовок активности в бизнес-процессе (добавив к тексту значение параметра integer, например)?

Нравится

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

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

Вы можете использовать элемент "Формула". В поле "Установить значение в" выберите параметр "Заголовок". В поле ниже Вам необходимо сформировать заголовок, используя параметры процесса. Также (без использования элемента формула) Вы можете сформировать заголовок, выбрав в структуре процесса параметр "Заголовок", а в поле "Значение" задать нужные параметры (здесь необходимо будет использовать конструкции типа [#Int.Parameter#].ToString())

"Демьяник Алексей Олегович" написал:Также (без использования элемента формула) Вы можете сформировать заголовок, выбрав в структуре процесса параметр "Заголовок", а в поле "Значение" задать нужные параметры (здесь необходимо будет использовать конструкции типа [#Int.Parameter#].ToString())

У элемента Task не вижу параметра Title. Всё остальное есть, а Title не вижу

У задачи за заголовок отвечает параметр Recommendation (Рекомендация).

Пишу [#RemindersCount#].ToString()

Получаю ошибку Value for argument "classType" must be specified.

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

Владимир, вот рабочий код:

"Скомплектовать " + [#Читать тип заказа.Первый элемент результирующей коллекции.Название#] + " №" + [#Читать Образцы (Заказ).Первый элемент результирующей коллекции.Номер#] + " для клиента " + [#Читать клиента.Первый элемент результирующей коллекции.Название#] + ", срок до " + ([#Указание желаемой даты комплектации.Желаемая дата комплектации#]).ToString()

его указываю в элементе "Добавление данных"

Пример работы подобного кода - на скриншоте

"Антон Кравченко" написал:Владимир, вот рабочий код:

Спасибо! Отличный рабочий пример!

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

Добрый день!

С помощью мастера разделов был создан раздел в пакете Coustom. Есть ли способ перенести схемы данного раздела в другой пользовательский пакет? (работаем на on-demand).

Заранее спасибо.

Нравится

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

Добрый день!

В меню [Конфигурация], вкладка [Действия] Вы можете выбрать “Экспорт в файл”. После чего, на вкладке [Пакеты] выбрать интересующий пакет и выполнить действие “Импорт из файла”.

Олег, спасибо!
Собственно, как я и предполагал :) Подумал, что есть альтернативный вариант переноса.
А так, решение рабочее - получилось. Спасибо.

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

"Главный Сергей" написал:возможно перенести данные из одного пакета в другой???

Такая возможность есть при переносе изменений с помощью WorkspaceConsole.

"Байбородин Николай" написал:Подумал, что есть альтернативный вариант переноса.

Альтернативный вариант есть - перенос с помощью WorkspaceConsole.
Особенно это актуально, если нужно перенести не только схемы, но и привязанные данные.

Однако, если речь идет о схемах, реализованных в пакете [Custom], то перенос изменений можно выполнить только с помощью механизма экспорта/импорта схем.

Более подробную информацию по работе с WorkspaceConsole можно найти на Академии Terrasoft:

https://academy.terrasoft.ru/documents/technic-sdk/7-9/perenos-izmeneni…

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

"Савельева Алла" написал:Такая возможность есть при переносе изменений с помощью WorkspaceConsole.

Я так понимаю это недавний, новый функционал?

"Главный Сергей" написал:Я так понимаю это недавний, новый функционал?

На самом деле, такая возможность есть уже давно.

Также есть возможность переноса с помощью SVN: https://academy.terrasoft.ru/documents/technic-sdk/7-9/perenos-izmeneni…

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

Добрый день!
В карточке обращения есть возможность выбрать Подчиненные обращения

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

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

Нравится

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

Дарья, насколько я знаю, нужно просто добавить данный пункт меню, так как это реализовано в базовой странице, признак isMultiSelectVisible

Спасибо...а куда его добавлять надо? в какую схему?

Дарья, это аттрибут схемы, вот его определение BaseCaseSectionV2:
"MultiSelect": {
dataValueType: Terrasoft.DataValueType.BOOLEAN,
value: false
}
заполните его например на init, таким образом, чтобы
isMultiSelectVisible: function() {
return !this.get("MultiSelect");
}
возвращало вам необходимое значение, естественно, что базовая схема, которую вы используете, должна поддерживать этот функционал

Спасибо. Посмотрю

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

Доброго времени суток!
Надо создать свой сервис на bpm Версия 7.6.0.1693 РеалСтейт, который будет принимать данные из стороннего источника, обрабатывать и записывать из в свой раздел.
Не могу найти подробную информацию с примерами.

Нравится

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

Добрый день, Виктор!

Нужную Вам информацию Вы можете найти на нашем ресурсе для разработчиков http://academy.terrasoft.ru/documents/?product=SDK&ver=7.6.0 в разделе [Рекомендуемые средства интеграции] - [Odata] - [Веб-сервисы в конфигурации].

Суть сервиса вот с чем:
1. На сервис приходят текстовые данные в формате json.
2. В сервисе происходит обработка данных(парсинг,конвертация, вычисление, нахождение совпадений в базе и т.д)
3. Сервис создает новую запись в нужно разделе.

Как я понял OData это просто работа с объектами и записями. А у меня задача более сложная.

Виктор,

документация доступна в SDK.

Если у Вас есть точечные вопросы, пожалуйста, задавайте, постараемся Вам помочь.

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