Проблемы с задачами?

Добрый день!
Создал БП в котором есть последовательность задач. Начал отлаживать процесс и тут возникла проблема что ответственный не может установить результат задачи(там в выпадающем списке нет вариантов для выбора). Если он закрывает црм и потом занова запускает он эту же задачу закрывет без проблем? В чем тут может быть проблема??? Помогите очень нужно)

Нравится

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

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

Нет) Там все нормально) Когда мы закрываем приложение и вновь открываем все нормально) Можно закрыть задачу) Вот в этом и проблема?

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

Попробуйте отладится начиная с OnExecute экшена задачи. Обратите внимание на то какие возможные результаты в окно задачи передаются.

Еще результаты могут быть пустыми, если поменяли тип задачи.

Оказалось что не только задачи БП так глючат но и просто задачи)

подскажите как формируеться список результатов задачи?) Я так понимаю он формируеться в этой функции:

function dlDataOnDatasetDataChange(DataField) {
	if (!Assigned(DataField)) {
		return;
	}
	var DataFieldName = DataField.Name;
	switch (DataFieldName){
		case ('StatusID'):
			UpdateControlsAndDataByStatusID();
			TaskEdit.StatusChanged = true;
			edtResult.UnprepareDropDownList();
			break;
		case ('TypeID'):
			edtResult.UnprepareDropDownList();
			break;
		case ('AccountID'):
			edtContact.UnprepareDropDownList();
			break;
		case ('RemindToAuthorDate'):
			chbRemindToAuthor.IsChecked = !IsEmptyValue(DataField.Value);
			break;			
		case ('RemindToOwnerDate'):
			chbRemindToOwner.IsChecked = !IsEmptyValue(DataField.Value);
			break;			
	}
}

Не совсем. В данном случае, в обработчике OnDatasetDataChange, для списка результатов указывается, что при следующем открытии списка результатов пользователем надо перечитать данные (это вызов edtResult.UnprepareDropDownList();
)

Сам список результатов будет или полным, или отфильтрованным.

Скопируйте сюда обработчик edtResultOnPrepareSelectWindow(LookupDataControl) - именно в нем осуществляется фильтрация

function edtResultOnPrepareSelectWindow(LookupDataControl) {
	var Dataset = dlData.Dataset;
	var LookupDataset = LookupDataControl.DataField.LookupDataset;	
	var StatusID = Dataset.Values('StatusID');
	var TaskTypeID = Dataset.Values('TypeID');
	ApplyDatasetFilter(LookupDataset, 'TaskTypeID', TaskTypeID, true);
	ApplyDatasetFilter(LookupDataset, 'StatusID', StatusID, true);
	var AllowedResultIDs = GetAttribute(Self, 'AllowedResultIDs');
	var IsResultIDsFilterEnabled = Assigned(AllowedResultIDs);
	ApplyDatasetIncludeFilter(LookupDataset, 'IncludeID', 
		AllowedResultIDs, IsResultIDsFilterEnabled);
}

Обработчик стандартный...

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

Нет список не пустой) Правда добавлены новые типы задач и результаты. А проблема не может быть в работе ядра. Так как перезапуск приложения решает эту проблему???)

Вряд ли в ядре.. Скорее проблема с фильтрацией.
Добавьте в начале функции edtResultOnPrepareSelectWindow строчку
debugger;

и в режиме отладки проверьте значения переменных StatusID, TaskTypeID, AllowedResultIDs

Еще было бе неплохо профайлером посмотреть, какой запрос к базе уходит

Вот в том то и проблема что это ошибка возникает непостоянна и никакой закономерности нет) Скажите где находиться профайлер в MS Management Studio?) А то все советуют а я не знаю где это можно посмотреть)

Меню Tools->SQL Server Profiler.

Если у Вас SQL Express 2005, то бесплатный профайлер можно скачать тут:
http://sqlprofiler.googlepages.com/

Максим, добрый день.

Вы вносили изменения в сервисы задачи (sq_Task, ds_Task)? Проблема может быть и в самом запросе.

Уточните, пожалуйста, после перезагрузки Terrasoft в списке результатов отображаются только результаты по процессу, или все возможные, которые связаны с типом и состоянием?

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

До того как я начал работать с этой конфигурацией базы кто то может и вносил какие либо изменения. К сожалению нет возможности уточнить изменения.

Можете выложить для анализа сервисы, касающиеся задач (tbl_Task, sq_Task, ds_Task, ds_TaskScript, wnd_TaskEdit, scr_TaskEdit)? Можно также сервис диаграммы процесса. Уточните, пожалуйста, версию Ваших бинарных файлов.

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Версия бинарников 3.0.2.203 СУБД MS 2008

Да.. надо было о версии спросить с самого начала - а то я на версии 3.3 смотрю сейчас :)
По версии 3.0.2 Вам Олег лучше ответит, я думаю...

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

Возникло предположение, что проблема может возникать из-за того, что некоторые алиасы таблиц в запросе sq_Task содержат пробелы (см. Screen1.bmp). Что интересно, если эти таблицы выделить, пробел исчезает, но запрос не считается отредактированным (см. Screen2.bmp). Выкладываю исправленный запрос, загрузите его, пожалуйста. Возможно, это решит проблему.

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Спасибо! если возникнет ошибка значит не в этом проблема)

Столкнулся с похожими симптомами.
При запуске БП список возможных результатов задачи корректный. Если же перезапускать CRM и уже затем выполнять задачу, то в список возможных результатов попадают все варианты для данного Типа/Состояния, без фильтрации допустимости по БП.
Грубо говоря если по БП один вариант результата, а всего их 10, то видим все 10 и естественно лишние 9 не приводят к запуску следующей задачи.
Почему сразу после запуска система фильтрует невозможные по БП варианты, а после перезапуска уже нет?
Версия тоже старая, 3.0.2

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

Причина проста: во время выполнения БП список доступных результатов задачи передаётся в атрибуты карточки редактирования. Поскольку в ранних версиях Terrasoft CRM кеширование сервисов работало немножко по-другому, при перезапуске Terrasoft CRM доступ к этим атрибутам теряется.

Возможно, Вам поможет следующее решение:

1) необходимо загрузить в систему присоединённый к данному сообщению запрос;
2) вставить в конец функции wnd_TaskEditOnPrepare скрипта scr_TaskEdit следующий код:

if (!IsEmptyValue(Dataset.Values('WorkflowItemID')) &&
	IsEmptyValue(Self.Attributes('AllowedResultIDs'))) {
	var WFSelect = Services.GetNewItemByUSI('sq_GetWFUSI');
	ApplySelectQueryFilter(WFSelect, 'TaskID', Dataset.Values('ID'), true);
	var WFDataset = WFSelect.Open();
	var WFUSI = WFDataset.Values('ServiceUSI');
	var WFItemName = WFDataset.Values('DiagramItemName');
	WFDataset.Close();
	var Diagram = Services.GetNewItemByUSI(WFUSI);
	var WFItem = Diagram.Items.ItemsByName(WFItemName);
	Self.Attributes('AllowedResultIDs') = WFGetOutgoingLinkCodes(WFItem);
}

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

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

Необходимо подключить скрипт scr_WorkflowUtils.

Текст функции:

function WFGetOutgoingLinkCodes(DiagramItem) {
	CheckAssigned(DiagramItem, "Элемент процесса");
	var Result = new Array();
	var Diagram = DiagramItem.ParentItems.ParentDiagram;
	var Links = Diagram.Links;
	var Link;
	for (var i = 0; i < Links.Count; i++) {
		Link = Links.Items(i);
		if ((Link.Code != '') &&
			(Assigned(Link.SourceItem)) && 
			(Link.SourceItem.Name == DiagramItem.Name)) {
			Result.push(Link.Code);
		}
	}
	return Result;
}

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

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

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