Скрипты
Разработка

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

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 комментариев

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

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

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

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

[javascript]
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();
}
}
[/javascript]

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

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

[javascript]
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();
}
}
[/javascript]

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

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

[javascript]
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();
.....
[/javascript]

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

3. В Вашем коде реализовать проверку:
[javascript]
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();
}
}
[/javascript]

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

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