Проверка на существование открытой задачи

if (IncidentState == dstInsert){ // Только при создании
        // Создать задачу.
                if()
                {
                        var Attributes = GetNewDictionary();
                        Attributes('NotifyObject') = Self.Attributes('NotifyObject').ParentContainer.ParentWindow.ComponentsByName('wndTasksDetail').Window;
                        var Window=ShowEditWindowEx('wnd_TaskEdit', Attributes);
                        var Dataset=Window.NonVisualComponents.ItemsByName('dlData').Dataset;
                        Dataset.Values('Title')=Title;
                        Dataset.Values('StatusID')='{FB10FCB1-DE0E-446D-81E8-A0C456E2C3AB}'; //Открыта
                        Dataset.DisableEvents();
                        Dataset.Values('AccountID')=AccountID;
                        Dataset.Values('ContactID')=ContactID;
                        Dataset.Values('IncidentID')=IncidentID;
                        Dataset.Values('OpportunityID')=OpportunityID;
                        Dataset.EnableEvents();
                }
    }

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

Нравится

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

Что значит открытая? Незавершенная или открытая на редактирование в данный момент?

Открытая на редактирование в данный момент =) извиняюсь за неточность

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

Пробовал что-то такого плана, не работает.

  if (IncidentState == dstInsert){ // Только при создании
	// Создать задачу.
	    var ddddd = Services.GetSingleItemByUSI('ds_Task');
		if(!ddddd.Open())
		{
			var Attributes = GetNewDictionary();
			Attributes('NotifyObject') = Self.Attributes('NotifyObject').ParentContainer.ParentWindow.ComponentsByName('wndTasksDetail').Window;
			var Window=ShowEditWindowEx('wnd_TaskEdit', Attributes);
			var Dataset=Window.NonVisualComponents.ItemsByName('dlData').Dataset;
			Dataset.Values('Title')=Title;
			Dataset.Values('StatusID')='{FB10FCB1-DE0E-446D-81E8-A0C456E2C3AB}'; //Открыта
			Dataset.DisableEvents();
			Dataset.Values('AccountID')=AccountID;
			Dataset.Values('ContactID')=ContactID;
			Dataset.Values('IncidentID')=IncidentID;
			Dataset.Values('OpportunityID')=OpportunityID;
			Dataset.EnableEvents();
		}
    }

Олег Александрович, необходимо чтобы отсутствовали открытые на редактирование задачи текущим пользователем либо любым?

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

 if (IncidentState == dstInsert){ // Только при создании
	// Создать задачу.
	    var ddddd = Services.GetSingleItemByUSI('wnd_TaskEdit');
		if(ddddd.IsOpening == false)
		{
			var Attributes = GetNewDictionary();
			var Window=ShowEditWindowEx('wnd_TaskEdit', Attributes);
			var Dataset=Window.NonVisualComponents.ItemsByName('dlData').Dataset;
			Dataset.Values('Title')=Title;
			Dataset.Values('StatusID')='{FB10FCB1-DE0E-446D-81E8-A0C456E2C3AB}'; //Открыта
			Dataset.DisableEvents();
			Dataset.Values('AccountID')=AccountID;
			Dataset.Values('ContactID')=ContactID;
			Dataset.Values('IncidentID')=IncidentID;
			Dataset.Values('OpportunityID')=OpportunityID;
			Dataset.EnableEvents();
		}
    }

Дулмал так , но не катит

Реализовать функционал можно следующим образом:
1. В функцию function wnd_TaskEditOnPrepare(Window) сервиса scr_TaskEdit добавить код:

function wnd_TaskEditOnPrepare(Window) {
.....
if (Dataset.State == dstInsert) {
.....		
	} else {
		TaskEdit.IsNewTask = false;
		if (Dataset.IsEmptyPage) {
			return;
		}
// Фрагмент кода, который необходимо добавить	
	if (IsUndefined(Connector.Attributes('TaskOpenedCount'))) {
      Connector.Attributes('TaskOpenedCount') = 0;
      }
     Connector.Attributes('TaskOpenedCount')++;
//--------------------------------------------	
	}
	PrepareRemindControls();
.....

2. Затем в тело функции function wnd_TaskEditOnCloseQuery(Window, CanClose) добавить код:

function wnd_TaskEditOnCloseQuery(Window, CanClose) {
	CanClose.Value = TaskEdit.CanCancel || TaskEdit.IsCompleting;
// Фрагмент кода, который необходимо добавить		
if (!IsUndefined(Connector.Attributes('TaskOpenedCount'))
    &&(Connector.Attributes('TaskOpenedCount') > 0 )) {
   Connector.Attributes('TaskOpenedCount')--
                } 
//--------------------------------------------
}

3. В Вашем коде реализовать проверку:

if (Dataset.State == dstInsert){ // Только при создании
 
 if ((Connector.Attributes('TaskOpenedCount') == null) || ((Connector.Attributes('TaskOpenedCount') == 0))){
 
      var Attributes = GetNewDictionary();
      Attributes('NotifyObject') = Self.Attributes('NotifyObject').ParentContainer.ParentWindow.ComponentsByName('wndTasksDetail').Window;
      var Window = ShowEditWindowEx('wnd_TaskEdit', Attributes);
      var Dataset = Window.NonVisualComponents.ItemsByName('dlData').Dataset;
      Dataset.Values('Title')=Title;
      Dataset.Values('StatusID')='{FB10FCB1-DE0E-446D-81E8-A0C456E2C3AB}'; //Открыта
      Dataset.DisableEvents();
      Dataset.Values('AccountID')=AccountID;
      Dataset.Values('ContactID')=ContactID;
      Dataset.Values('IncidentID')=IncidentID;
      Dataset.Values('OpportunityID')=OpportunityID;
      Dataset.EnableEvents();
}
}

Спасибо, так работает отлично

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