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

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

Нравится

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

Добрый день.



Прошу обратиться в нашу службу поддержки. 

Вы можете воспользоваться электронной почтой support@creatio.com

Не забудьте предоставить доступ к среде на которой возникает проблема. 



С уважением,

Юрий. 

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

Приветствую всех.

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

Имеется такой вот вопрос: есть ли хороший способ, как можно, меняя на лету значение поля справочника, заставить менять как кейс, так и страницу раздела?

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

Но после первого сохранения записи выходит так, что при смене значения поля справочника, видно небольшое уведомление, мол имеется более подходящий кейс под новое значение справочника и его можно сменить https://prnt.sc/hTUiaTTn2qRe . Да, кейс поменяется, но страница при этом не меняется. Ну и менеджер банально может не нажать на кнопку смены кейса. А желательно бы, чтобы менеджер не мог работать с записью, пока не сменит кейс на соответствующий.

Интерфейс (страницу https://prnt.sc/oi79vQWQ-KMk ) удается сменить лишь проделав определенные манипуляции: меняем значение поля справочника, сохраняем, перезаходим в запись. Нужно именно перезайти в запись (закрыть и заново открыть), простое обновление страницы записи не помогает.

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

Заранее благодарен всем отозвавшимся.

Нравится

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

Добрый день!



Мне здесь отвечали на подобный вопрос: https://community.terrasoft.ua/questions/massovo-smenit-keys-dcm

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

 

Протестировали на коробочной версии Creatio и на данный момент это всё ещё коробочное поведение которое можно изменить только с помощью разработки.

 

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

Дополнительно, в посте https://community.terrasoft.ua/questions/zapustit-obnovlennyy-keys описана работа функции что отвечает за изменение кейса, возможно это поможет вам в разработке своего решения.

 

Спасибо вам.

 

Artem,

Спасибо за ответ, но пока не силен как разработчик, чтобы работать с функциями. Хотелось бы с помощью low-код как то сделать.

Но также вычленил одну фразу ответившего из поста https://community.terrasoft.ua/questions/massovo-smenit-keys-dcm

Там Ярослав поясняет:

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

Проверил у себя - в кейсе нет ни действий ни процессов. Нет и фоновых бизнес-процессов, кроме наверное что базовых для раздела продажи. Но их то можно отключить при необходимости, либо задействовать не на стартовых стадиях. Т.е. если исключить запуск любых действий/процессов на начальных стадиях можно теоретически предположить, что запущенный экземпляр будет якобы свободен и можно с ним взаимодействовать?

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

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

Іван Щербатих пишет:

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

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

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

Есть кейс, на первой стадии пользователю надо заполнить несколько полей, для полей созданы бизнес-правила по типу Если Стадия = Стадия 1, то Поле 1 обязательно к заполнению. Если не заполнить поле и попробовать сохранить кейс - правило сработает, покажет ошибку и не позволит сохранить кейс. Но пользователь может просто нажать на следующую стадию, тогда появится ошибка о незполненном поле, но кейс всё равно перейдёт на вторую стадию и будет сохранён.



Задача в том, чтобы не позволять так обходить требование заполнять поля. Пока вижу это так: в момент перехода по стадиям (может, в методе OnSaved) проверять заполнены ли поля, и если не заполнены - не позволять менять стадию.



Какой лучший(или рекомендуемый) способ выполнения этой задачи ? Описанный вариант с методом OnSaved подойдёт ?

Нравится

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

Мы делаем немного по-другому - даём менять стадию, но не даём сохранить, пока все поля не будут заполнены



Для этого:

  • создать атрибуты для обязательности полей
  • использовать в бизнес-правилах сравнение не поля Стадия, а атрибутов
  • создать метод вычисления атрибутов в зависимости от стадии
  • в onDiscardChangesClick (если пользователь нажмёт Cancel) снова вызываем метод обновления атрибутов
Показать все комментарии

Подписаться на сообщение загрузки модуля из схемы EmailMessagePublisherPage

messages: {
			"SendListenerEmailData": {
				mode: this.Terrasoft.MessageMode.PTP,
				direction: this.Terrasoft.MessageDirectionType.PUBLISH
			},
			"EmailMessagePageLoaded": {
				mode: this.Terrasoft.MessageMode.PTP,
				direction: this.Terrasoft.MessageDirectionType.SUBSCRIBE
			},
		},
		methods: {
			init: function(){
				this.callParent(arguments);
				this.sandbox.subscribe("EmailMessagePageLoaded", this.onEmailMessagePageLoaded, this, [this.getEmailMessagePublisherModuleId()]);
			},
 
			onEmailMessagePageLoaded: function(args){
				debugger;
				if (this.$EntitySchemaName === "NrbCase") {
					Terrasoft.chain(
						function (next) {
							var esq = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "NrbConfigurator", rowCount: 1 });
							esq.addColumn("NrbMailboxForComunicationWithClient");
							esq.getEntityCollection(function (result) {
								if (!result.success || result.collection.count == 0) {
									throw new Error("Запись конфигуратора не найдена");
								}
								var getMailFromConfigurator = result.collection.first();
								var senderEmailConfigurator = getMailFromConfigurator.values.NrbMailboxForComunicationWithClient;
								next(senderEmailConfigurator);
							}, this);
						},
						function (next, senderEmailConfigurator) {
							data = {
								entitySchemaName: this.$EntitySchemaName,
								title: this.getMasterEntityParameterValue("Number"),
								recepientEmail: this.getMasterEntityParameterValue("NrbContactEmail"),
								contact: this.getMasterEntityParameterValue("Contact"),
								nrbObject: this.getMasterEntityParameterValue("NrbServiceObject"),
								senderEmail: senderEmailConfigurator
							}
							this.sandbox.publish("SendListenerEmailData", data, [this.getEmailMessagePublisherModuleId()]);
						}, this
					);
				}
			},

И опубликовать сообщение SendListenerEmailData

Переопределить схему EmailMessagePublisherPage

define("EmailMessagePublisherPage", ["EmailMessagePublisherPageResources"],
		function(resources) {
			return {
				entitySchemaName: "Activity",
				mixins: {
				},
				messages: {},
				attributes: {},
				methods: {
                  	setListenerEmailData: function(data) {
                      	this.callParent(arguments);
                      	debugger;
                        if(data.entitySchemaName == "NrbCase"){
							this.$Title = data.title;
                          	this.$Recepient = data.recepientEmail;
                          	this.$NrbObject = data.nrbObject.value || {};
                          	this.$Sender = data.senderEmail;
                          	this.$Contact = data.contact;
 
                        }
					},
                },
				diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
			};
		});

 

Нравится

Поделиться

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

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

Но при открытии существующего документа система только предлагает сменить на более подходящий кейс

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

Как массово сменить таким документам кейсы, чтобы статус документа не изменился? В самом кейсе нет никаких действий (всё выполняется в БП) - настроены только переходы между статусами и сам набор статусов

Нравится

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

Добрый день!

С помощью базовых функций в интерфейсе массовое автоматическое изменения кейсов с сохранением текущего статуса невозможно. Вполне вероятно, что это можно реализовать с помощью средств разработки. Обратите внимание на пост с похожей проблемой: https://community.terrasoft.ru/questions/zapustit-obnovlennyy-keys

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

Ярослав Савицкий,

спасибо за разъяснения. Было бы здорово сделать системную настройку "Автоматически заменять кейс при отсутствии запущенных процессов или действий"

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

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



Имеется задача: Показать диалоговое окно подтверждения с кнопками OK и KO для подтверждения отмены Обращения (Case), если пользователь нажал на статус Cancel в DCM.

Если была нажата кнопка OK, то Case отменяется.

Если была нажата кнопка KO, то Case вернется к предыдущему статусу.

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

Я попытался отобразить диалоговое окно по событию OnSaving объекта Case.

Вот моя функция:

public override void OnSaving(object sender, EntityBeforeEventArgs e) {  
string status = UpdateData(sender);
if(status!="Canceled") {
base.OnSaving(sender, e);
  	} else {
    		//Todo: Show dialog with question
  		//Todo: Get response OK or KO
                /*if(response ="OK"){
                        base.OnSaving(sender, e);
                 }else{
                        e.IsCanceled = true;
        }*/
}
}

К сожалению, я не нашла никакой информации о том, как отобразить диалоговое окно на стороне сервера.

Я знаю способ отправки сообщений с клиентской стороны (this.showConfirmationDialog(message, function(returnCode)), но не знаю, как вернуть результат нажатия кнопки на сервер для завершения метода OnSaving.

private void SendMessage(object sender) {
       var entity = (Entity)sender; 
       var userConnection = entity.UserConnection;
      string senderName = "MySenderNameCase";  
      string message = JsonConvert.SerializeObject(new {test = "status"});
      MsgChannelUtilities.PostMessage(userConnection, senderName, message);
  }             

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

Спасибо.

С наилучшими пожеланиями,

Мария

Нравится

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

Мы делали подтверждение перехода Case на финальный статус на странице, выдавая showConfirmationDialog в функции Save.



 

this.showConfirmationDialog(confirmationMessage.message, function(result) {
    if (result === Terrasoft.MessageBoxButtons.YES.returnCode) {
        this.save(scopeArguments);
     } else {
        this.onDiscardChangesClick();
    }
}, ["Yes", "No"]);

 

Мы делали подтверждение перехода Case на финальный статус на странице, выдавая showConfirmationDialog в функции Save.



 

this.showConfirmationDialog(confirmationMessage.message, function(result) {
    if (result === Terrasoft.MessageBoxButtons.YES.returnCode) {
        this.save(scopeArguments);
     } else {
        this.onDiscardChangesClick();
    }
}, ["Yes", "No"]);

 

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

Спасибо за ваш ответ.

 

Это помогло решить задачу!

 

Mariia Prostiak,

 как все же у Вас получилось положить всплывающий вопрос в Save?

this.save(scopeArguments); - и что ложили в "scopeArguments". Если не сложно, можете написать код функции, есть такая же задача на решении?

Владимир Соколов,

 или подскажите Вы, как в Save реализовали данное всплавающее соощение не получив рекурсии

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

 

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

Вечная рекурсия решается вызовом this.callParent(config) вместо this.save(scopeArguments);

Итого получается:

save: function(config) {
this.showConfirmationDialog(confirmationMessage.message, function(result) {
    if (result === Terrasoft.MessageBoxButtons.YES.returnCode) {
        this.callParent(config);
     } else {
        this.onDiscardChangesClick();
    }
}, ["Yes", "No"]);
 
}

 

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

1. Изменяем пакет в дизайнере кейса.

2. Сохраняем

3. Выходим / заходим в схему кейса

В кейсе указан старый пакет.

Как перенести кейс между пакетами?

Нравится

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

Мне кажется, что это баг 7.15.X - мы тоже с таким столкнулись, но решения пока не нашли.

 

Здравствуйте, Игорь!

 

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

 

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

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

Всем доброго дня.

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

При переходе по статусам в старых записях на экран выдаётся сообщение об ошибке: "Процесс с идентификатором "<здесь разные guid'ы>" не найден".

Подскажите, пожалуйста, как можно эту ошибку исправить? Может очистить какую-либо таблицу?

Нравится

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

Уже обсуждалось тут

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

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

Причём это не идентификатор процесса, это похоже на идентификатор экземпляра процесса, который теперь у приложения не получается найти.

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

Фёдоров Александр Сергеевич,

Напишите где нашли возможно поможем. Как вариант вы можете раскрыть записи библиотеки процессов и журнала процессов и в url подставить ваши id, возможно ваш процесс или его єкземпляр найдется

Было аналогичное при смене стадии в разделе «Сделки». Тоже  изменялись процессы, которые привязаны к состоянию сделки (настройка кейсов) — добавили новые процессы, убрали и изменили несколько процессов.

Обычно, если процесс по стадии завершился с ошибкой, то при переключении на другую стадию предыдущий процесс просто завершается.

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



По информации от разработчиков продукта, если элемент завершается с ошибкой из-за дедлока,  то может быть выполнен автоматический откат транзакции, поэтому и нет записей в таблице SysProcessElementData (дедлок был при попытке записи в таблицу). Такое поведение связано с ошибкой в движке процессов, которое исправлено в версии 7.11.

У Вас и так 7.11, попробуйте обновиться до последней 7.11.3 или ещё дальше.

Мотков Илья,

Очень похоже на описанное... Сейчас на 7.11.3. Будем планировать обновляться...

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

Нужно решить следующую задачу:
1. Создать новое рабочее место и раздел в нем.
2. На странице раздела должен выводиться список кастомных объектов, каждый из которых имеет id (внешний, не тот который в базе bpmonline), название и ссылку (должна быть кликабельна). Объекты должны подгружаться со стороннего API.

Первый пункт проблем не доставил. А вот второй... Я сам являюсь одним из разработчиков того стороннего API, поэтому сначала возникла идея просто выводить таблицу внутри айфрейма, однако руководство поставило задачу сделать более "умным" способом.

Я решил попытаться сделать деталь с пользовательскими полями по туториалу (https://academy.terrasoft.ru/documents/technic-sdk/7-10/sozdanie-polzova...) версия системы у меня 7.10б однако, следуя примеру, родительским объектом детали следовало указать Base fields detail из пакета BaseFinance, но у меня он не установлен, и не понятно, установить его, или же не стоит тащить целый пакет ради одного объекта. Пытался по-другому создать делаь и вывести список на страницу раздела, но ничего так и не получилося.

После создания детали и добавления списка на страницу раздела, планировал при загрузке страницы посылать AJAX-запрос по API, потом с помощью службы DataService вытащить существующие объекты, сравнить с получены ответом, и с помощью этой же службы удалить неактуальные и добавить новые, и таким образом обойтись без конфигурационных сервисов, так как совсем не знаком с языком С#.

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

Нравится

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

Я думаю вам правильнее будет сделать самый обыкновенный раздел мастером разделов на основании объекта, с текстовой колонкой для ссылки, и с текстовой колонкой для внешнего id (если он guid), или числовой, если число.
Сделать несколько доработок что бы ссылка была кликабельной и вела во внешнюю систему.

А наполнять данный раздел с помощью интеграции. И тут открывается множество вариантов. Будь то запрос во внешнюю систему, с переодичностью. Либо внешняя система будет сохранять данные в bpm посредством odata каждый раз как таковые будут там созданы. Либо написать веб сервис в bpm и вызывать его из внешней системы. С вариантами интеграции можете ознакомится здесь:
https://academy.terrasoft.ru/documents/technic-sdk/7-10/integraciya-s-s…

"Максим Шевченко" написал:

Я думаю вам правильнее будет сделать самый обыкновенный раздел мастером разделов на основании объекта, с текстовой колонкой для ссылки, и с текстовой колонкой для внешнего id (если он guid), или числовой, если число.

Сделать несколько доработок что бы ссылка была кликабельной и вела во внешнюю систему.

А наполнять данный раздел с помощью интеграции. И тут открывается множество вариантов. Будь то запрос во внешнюю систему, с переодичностью. Либо внешняя система будет сохранять данные в bpm посредством odata каждый раз как таковые будут там созданы. Либо написать веб сервис в bpm и вызывать его из внешней системы. С вариантами интеграции можете ознакомится здесь:

https://academy.terrasoft.ru/documents/technic-sdk/7-10/integraciya-s-si...


Спасибо, буду смотреть и пробовать.

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

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

у Лида есть кейс, в котором на стадии распределения появляется задача "Распределите лид, определите стратегию взращивания лида", при нажатии на которую запускается БП Распределение лида.
Как можно реализовать аналогичное? Где можно посмотреть как это реализовано?

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

BPM'Online 7.10.0.1742

Нравится

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

Любовь, здравствуйте!

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

  1. Интерес отсутствует
  2. Перевод в продажу
  3. Распределить позднее

Каждой записи необходимо добавить признак "Использовать только в процессе".

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

Из DCM процесс можно будет вызвать как подпроцесс.

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

"Демьяник Алексей" написал:

Любовь, здравствуйте!

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

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

  1. Интерес отсутствует
  2. Перевод в продажу
  3. Распределить позднее

Каждой записи необходимо добавить признак "Использовать только в процессе".

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

Из DCM процесс можно будет вызвать как подпроцесс.

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


Алексей, спасибо за подробный алгоритм.

Поясню, что я имела в виду.
процесс "распредение лида" был приведен в качестве примера.
вообще у нас реализован свой процесс над другой сущностью . В рамках нашего процесса есть шаги, на которых пользователь должен заполнять некоторые поля. Допустим,на одном шаге 5 полей, на другом 3 и т.д. Поэтому не хочется открывать страницу редактирования полностью, а хочется открыть свою преднастроенную страничку, где только эти 5 (или 3) полей, чтоб пользователь четко видел то, что он должен заполнить и чтобы не отвлекать его остальной информацией.
но проблема в том, что преднастроенные страницы в виде задачи не отображаются в активностях, а нам нужно сделать так, чтобы как -то они отображались.
и вот я увидела кейс лида, в рамках которого есть задача "Распределите лид, определите стратегию взращивания лида", и по клику на нее открывается преднастроенная страница(судя по всему просто запускается процесс Распределения). Мне показалось, что таким образом можно решить мою проблему(отображать преднастроенную страницу в активности).
поэтому хотела узнать
1) где именно прописывается тот факт, что клик по задаче "Распределите лид, определите стратегию взращивания лида" запускает процесс распределения
2) можно ли как-то вывести преднастроенные/автогенерируемые страницы в активности (или только как вы описали через результаты активностей, но мне этот вариант не подходит, так как нужно заполнять не одно, а несколько полей и набор полей будет разным на разных шагах)

Добрый день, Любовь!

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

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

Это самый оптимальный вариант, пока ожидаем реализации в платформе.
При этом он довольно просто реализуется.
Описывайте поэтапную логику в JavaScript со скрытием/демонстрацией полей.

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