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

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

 

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

 

Такой вопрос – как запретить утверждение визы, если необходимые поля не заполнены?

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

Нравится

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

Добрый день.

Недавно подобная проблема обсуждалась в этом посте.

Добрый день.

Недавно подобная проблема обсуждалась в этом посте.

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

Впервые хотел использовать этот элемент , и возможно некорректно настроил. 

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

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

Нравится

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

Кирилл Паксюдкин,

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

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

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

Посмотрите, обучающее видео про настройку прав доступа. Обратите внимание на приоритет прав доступа!

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

Проверьте соответствуют ли ваши записи указанным условиям отбора (фильтрации)

Шаг запускается под привелигированным пользователем? Если нет попробуйте выполнить под SuperVisor на тестовой записи

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

фильтрация правильная, 

Шаг я запускал как от простого пользователя так и от Supervisor никакой блокировки нет.

Кирилл Паксюдкин,

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

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

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

Посмотрите, обучающее видео про настройку прав доступа. Обратите внимание на приоритет прав доступа!

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

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

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

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

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

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

Нравится

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

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

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

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

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

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

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

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

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

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

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



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

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

Мотков Илья,

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

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

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

Происходит отправка тестового сообщения по e-mail, но стадия после завершения процесса не меняется на "Ожидание". В чем может быть проблема?

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

Нравится

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

Как вариант, Вы можете прям в процессе изменить стадию на ожидание, а не передавать значение в параметр. Сделать это можно с помощью элемента [Изменить данные]. И по текущей записи изменить состояние.

Как вариант, Вы можете прям в процессе изменить стадию на ожидание, а не передавать значение в параметр. Сделать это можно с помощью элемента [Изменить данные]. И по текущей записи изменить состояние.

Егор Чесноков,  Спасибо, разницы нет никакой, но зато то что вы предложили работает.

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

Здравствуйте, возникла проблема при создании подпроцесса в кейсе.

Суть такая, в подпроцессе (рис 1) считал данные по обращению и после этого хочу проверить заполнены ли полученные поля (рис 2), использую условный оператор, проверить id обращения получается (id != Guid.empty), но не понимаю как проверить остальные поля и дату с рисунка 2.

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

 

Нравится

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

Справочные поля можно также проверить, используя Guid.Empty. А дату можете сравнить с минимальной, например [#Читать данные 3.Первый элемент результирующей коллекции.Дата выполнения#] <= DateTime.MinValue. 

Справочные поля можно также проверить, используя Guid.Empty. А дату можете сравнить с минимальной, например [#Читать данные 3.Первый элемент результирующей коллекции.Дата выполнения#] <= DateTime.MinValue. 

Егор Чесноков, Благодарю, там ошибка скорее в построенной схеме объекта была, было два объекта с одним именем, и одно заполнялось, а второе нет, и про дату пригодилось)

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

Добрый день. Добавил новый кейс для продаж, базовый отключил. При сохранении всё добавилось в данные автоматически. Но при переносе пакета на тестовую среду обнаружил, что старый кейс остался включенным. Собственно вопрос. Какие данные ещё нужно обновить, чтобы старый кейс отключился?

Нравится

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

Информацию о кейсах можно посмотреть во view с названием VwSysDcmLib. Там для выяснения активности кейса вызывается функция fn_GetDcmSchemaIsActive. Её текст:

ALTER FUNCTION [dbo].[fn_GetDcmSchemaIsActive](@SchemaId UNIQUEIDENTIFIER)
RETURNS BIT
AS
BEGIN
	DECLARE	@SchemaUserPropertyValue NVARCHAR(MAX) = (SELECT TOP 1 ssup.[Value]
		FROM [dbo].[SysSchemaUserProperty] AS ssup
		WHERE ssup.[SysSchemaId] = @SchemaId
			AND ssup.[Name] = 'Enabled');
	DECLARE @Result BIT;
 
	IF (@SchemaUserPropertyValue IS NOT NULL)
	BEGIN
		SET @Result = (CASE
			WHEN @SchemaUserPropertyValue = 'True'
			THEN 1
			ELSE 0
		END);
	END;
	ELSE
	BEGIN
		SET @Result = (CASE
			WHEN
				(SELECT TOP 1 ssp.[Value]
				FROM [dbo].[SysSchemaProperty] AS ssp
				WHERE ssp.[SysSchemaId] = @SchemaId
					AND ssp.[Name] = 'Enabled') = 'True'
			THEN 1
			ELSE 0
		END);
	END;
	RETURN @Result;
END;

То есть свойство активности кейса хранится в одной из служебных таблиц SysSchemaUserProperty или SysSchemaProperty. У меня — во второй.

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

Всем привет!

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

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

В голову приходит подобный код

if (this.isAddMode() || this.isCopyMode()) {

this.set("UsrStatus", значение справочника)

}

Но ничего подобного я не обнаружил в исходниках страницы продаж или лидов.

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

Вопрос два, как установить значение справочного поля через set? 

Знаю, что качестве второго аргумента в set нужно передавать конструкцию {value: "Guid",

                                              displayValue: "Caption" }

Как правильно получить guid, зная только название справочного поля? Напрямую писать guid это слишком костыльно выглядит.

Нравится

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

1) На уровне объекта у колонки св-во: "значение по умолчанию". смотрим на какое справочное поле биндится полоска стадий, ну и соответственно ему задаём значение.

2) this.loadLookupDisplayValue(guid, #колонка_объекта_в_которую_надо_установить_значение#, callback, scope)

Спасибо. Оказалось все очень просто

Варфоломеев Данила, а можно еще пример работы с методом loadLookupDisplayValue?

К примеру мне нужно получить установить значение "Подписан" в справочной поле Состояние договора, название схемы ContractState, название поля на карточке usrContractState. Что нужно выполнить?

Трефилов Павел Сергеевич пишет:

пример работы с методом

this.loadLookupDisplayValue("UsrContractState", "d7e40d7c-1fa4-49cb-a0d5-57a936f9a463"); //подменить на id значения "Подписан". Метод установит значение.
 
//или, если нужен коллбек:
 
this.loadLookupDisplayValue("UsrContractState", "d7e40d7c-1fa4-49cb-a0d5-57a936f9a463", function() {
    //сюда провалимся после того, как система установит значение. Удобно, когда надо дальше работать со значением UsrContractState.
}, this)

 

Варфоломеев Данила,

Понятно, по сути не сильно это отличается от установки через set.

 this.set("UsrContractState", {value: "d7e40d7c-1fa4-49cb-a0d5-57a936f9a463", displayValue: "Подписан"});

Единственный бонус, что можно работать с колбеком.

Трефилов Павел Сергеевич пишет:

Единственный бонус, что можно работать с колбеком.

Не только. К UsrContractState через lookupListConfig/columns вы можете подгружать допполя. Так вот в случае вызова loadLookupDisplayValue, функция их подгрузит, через set - нет.

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

7.11(OnSite)

Народ, помогите.

В разделе "Лиды", у меня есть справочник стадий и его проекция в виде кейсов.

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

Пример:

Справочник{значение:Квалификация}

Кейс {значение:Квалификация}

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

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

Кейс(Клик)-->Справочник-->Атрибут-->Дествие

Справочник(Клик)-->Атрибут-->Действие

Вот мой код:

    methods: {

            onSearchButtonClick :function(){

                this.showInformationDialog("Click");

            },

            setDisqualification:function(){

                view = "UsrStage";//Справочник стадий

                data = this.get(view)

                

                if(data!==undefined){

                 value = data.Name;

                  switch (value) {

                        case 'Квалификация':

                             this.showInformationDialog(value);

                            break;

                        case 'Переговоры':

                             this.showInformationDialog(value);

                            break;

                        case 'Взращивание':

                            this.showInformationDialog(value);

                            break;

                         case 'Продажа':

                            this.showInformationDialog(value);

                           break;

                        case 'Потребность отсутствует':

                            this.showInformationDialog(value);

                           break;

                        case 'Потребность удовлетворена':

                            this.showInformationDialog(value);

                           break;

                        case 'Дисквалифицирован':

                          this.showInformationDialog(value);

                             break;

                    default:

                        // code

                    }

                }

            }

        },

        rules: {},

        businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,

        attributes: {

                   "LinkForStage": {

                    // Определение зависимости колонки.

                     "dependencies": [

                                       {

                                         // Зависит от колонки Stage.

                                        "columns": [ "UsrStage" ],

                                         // Имя метода-обработчика изменения колонки Stage.

                                         // Метод setProbabilityByStage() определен в свойстве methods

                                         // объекта схемы.

                                        "methodName": "setDisqualification"

                                       }

                                     ]

                                 }

        }

    };

 

Нравится

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

Роман, добрый день!

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

С уважением,

Дмитрий Тёскин

У меня задача обработать нажатие на элемент кейса через код.

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

Вот я и пытаюсь узнать есть ли такая возможность? 

SectionActionsDashboard, метод onActiveStageClick

Варфоломеев Данила,

Спасибо идею понял)

Только получается дублирование кода(

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

Всем привет, есть задача: Обработка клика на кейсе

Вопросы:

Как в управлении конфигурацией, найти обьект отвечающий за описание и отображение кейсов.

Буду признателен за пример кода реализующий клик

Нравится

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

Добрый день, Роман.

Вам стоит смотреть в сторону использования метода onActiveStageClick из схемы SectionActionsDashboard.

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

Есть несколько вопросов по кейсам 7.10
1. Как сделать что бы после выполнения всех шагов автоматически переходило в следующую стадию и меняло стадию в карточке.
2. При нажатии на следующую стадию при невыполнении текущей в нее не переходит(верно) но первый шаг запускается(неверно)
пример: есть 2 задачи на 2 стадии, нажали на 3 стадию(там первым шагом бп на изменение Отв.) она не запустилась, но Отв изменился и осталось 2 задачи с второй стадии.
3. Если есть кейсы то поле стадий должно бить недоступным для редактирования или совсем скрытым?

Нравится

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