Добрый день.
Когда закрывается задача, открывается окно инцидента.
Необходимо сделать так, чтобы если результат задачи "Исполнена", статус инцидента становился "Завершен".
Добавил проверку в обработчик события SelfOnDatasetAfterPost:
{
var DatasetIncident = Services.GetSingleItemByUSI('ds_Incident');
DatasetIncident.Open();
DatasetIncident.Edit();
DatasetIncident.Values('StatusID')='{83DFF6F7-10CE-41B4-B390-40D532751E13}';
}
Я как понимаю необходимо наложить еще фильтр. Помогите пожалуйста
Нравится
Олег, сделайте так:
[javascript]
if (Dataset('ResultID')== '{CD0955F7-D53A-4302-97DA-2BD0E53DFD13}')
{
var DatasetIncident = GetSingleItemByCode('ds_Incident', 'UniqCode');
ApplyDatasetIDFilter(DatasetIncident , IncidentID, true);
RefreshDataset(DatasetIncident);
DatasetIncident.Edit();
DatasetIncident('StatusID')='{83DFF6F7-10CE-41B4-B390-40D532751E13}';
DatasetIncident.Post();
}
[/javascript]
Функции ApplyDatasetIDFilter и RefreshDataset находятся в скрипте scr_DB
[javascript]
if (Dataset.Values('ResultID')== '{CD0955F7-D53A-4302-97DA-2BD0E53DFD13}')
{
var DatasetIncident = GetSingleItemByCode('ds_Incident', 'UniqCode');
DatasetIncident.Open();
var IncidentID = DatasetIncident.Values('ID');
ApplyDatasetIDFilter(DatasetIncident , IncidentID, true);
RefreshDataset(DatasetIncident);
DatasetIncident.Edit();
DatasetIncident('StatusID')='{83DFF6F7-10CE-41B4-B390-40D532751E13}';
DatasetIncident.Post();
}
[/javascript]
так не работает
[javascript]
if (Dataset.Values('ResultID')== '{CD0955F7-D53A-4302-97DA-2BD0E53DFD13}')
{
var DatasetIncident = GetSingleItemByCode('ds_Incident', 'UniqCode');
var IncidentID = Dataset.Values('IncidentID');
ApplyDatasetIDFilter(Dataset, IncidentID, true);
RefreshDataset(Dataset);
DatasetIncident.Edit();
DatasetIncident('StatusID')='{83DFF6F7-10CE-41B4-B390-40D532751E13}';
DatasetIncident.Post();
}
[/javascript]
И так тоже
[javascript]
if (Dataset('ResultID')== '{CD0955F7-D53A-4302-97DA-2BD0E53DFD13}')
{
var DatasetIncident = GetSingleItemByCode('ds_Incident', 'UniqCode');
var IncidentID = Dataset('IncidentID');
ApplyDatasetIDFilter(DatasetIncident , IncidentID, true);
RefreshDataset(DatasetIncident);
DatasetIncident.Edit();
DatasetIncident('StatusID')='{83DFF6F7-10CE-41B4-B390-40D532751E13}';
DatasetIncident.Post();
}
[/javascript]
Подключите скрипт scr_Utils
Подключен. Ошибок не возникает, но состояние не меняется.
Оно ругалось, что не найден IncidentID
Я его объявил. Может не то имелось ввиду?
[javascript]
if((Dataset.Values('ResultID') == '{CD0955F7-D53A-4302-97DA-2BD0E53DFD13}')&&
(Dataset.Values('TypeID') == '{7A9B16B3-216B-4125-BD0B-FF826B022841}')&&
(!Dataset.ValIsNull('IncidentID'))
)
{
var Attributes = GetNewDictionary();
Attributes('RecordID') = Dataset.Values('IncidentID') ;
ShowEditWindowEx('wnd_IncidentEdit', Attributes);
..надо назначение статуса StatusID
}
[/javascript]
Есть еще такой вариант, открываем окно инцидента и меняем статус на нужный, но так тоже не получается.
Попробуйте на событие SelfOnDatasetBeforePost вставить скрипт
[javascript]
if (Dataset('ResultID')== '{CD0955F7-D53A-4302-97DA-2BD0E53DFD13}')
{
var IncidentID = Dataset('IncidentID');
var DatasetIncident = GetSingleItemByCode('ds_Incident', 'UniqCode');
ApplyDatasetIDFilter(DatasetIncident, IncidentID, true);
RefreshDataset(DatasetIncident);
DatasetIncident.Edit();
DatasetIncident('StatusID') = '{83DFF6F7-10CE-41B4-B390-40D532751E13}';
DatasetIncident.Post();
}
[/javascript]
"Зголич Олег Александрович" написал:Есть еще такой вариант, открываем окно инцидента и меняем статус на нужный, но так тоже не получается.
[javascript]
if((Dataset('ResultID') == '{CD0955F7-D53A-4302-97DA-2BD0E53DFD13}') &&
(Dataset('TypeID') == '{7A9B16B3-216B-4125-BD0B-FF826B022841}') &&
(!Dataset.ValIsNull('IncidentID'))
)
{
var Attributes = GetNewDictionary();
var DefaultValues = GetNewDictionary();
Attributes('RecordID') = Dataset.Values('IncidentID') ;
DefaultValues.Add('StatusID') = '{83DFF6F7-10CE-41B4-B390-40D532751E13}';
ShowEditWindowEx('wnd_IncidentEdit', Attributes, DefaultValues);
}
[/javascript]
Объект не поддерживает это свойство или метод
DefaultValues.Add('StatusID') = '{83DFF6F7-10CE-41B4-B390-40D532751E13}';
вот что дебагеру не нравится
StatusID поле из ds_Incident
Олег, система выдает ошибку при этом коде:
В обработчик события SelfOnDatasetAfterPost:
[javascript]
if ((Dataset('ResultID') == '{CD0955F7-D53A-4302-97DA-2BD0E53DFD13}') && (!IsEmptyGUID(Dataset('IncidentID'))))
{
var DatasetIncident = GetSingleItemByCode('ds_Incident', 'UniqCode');
ApplyDatasetIDFilter(DatasetIncident, Dataset('IncidentID'), true);
RefreshDataset(DatasetIncident);
DatasetIncident.DisableEvents();
DatasetIncident.Edit();
DatasetIncident('StatusID') = '{83DFF6F7-10CE-41B4-B390-40D532751E13}';
DatasetIncident.Post();
DatasetIncident.EnableEvents();
DatasetIncident.Close();
}
[/javascript]
Что за ошибка? Проверьте debugger-ом где возникает проблема.
[javascript]
if((BaseDBEdit.Dataset.Values('ResultID') == '{CD0955F7-D53A-4302-97DA-2BD0E53DFD13}')&&
(BaseDBEdit.Dataset.Values('TypeID') == '{7A9B16B3-216B-4125-BD0B-FF826B022841}')&&
(!BaseDBEdit.Dataset.ValIsNull('IncidentID')))
{
var Attributes = GetNewDictionary();
var DefaultValues = GetNewDictionary();
Attributes('RecordID') = BaseDBEdit.Dataset.Values('IncidentID') ;
var DatasetIncident = Services.GetSingleItemByUSI('ds_Incident');
DatasetIncident.Open();
DatasetIncident.Edit();
DatasetIncident.Values('StatusID') = '{83DFF6F7-10CE-41B4-B390-40D532751E13}';
DefaultValues.Add('StatusID',DatasetIncident.Values('StatusID'));
ShowEditWindowEx('wnd_IncidentEdit', Attributes, DefaultValues);
}
[/javascript]
Думал так прокатит, все равно не меняет.
"Зголич Олег Александрович" написал:Ошибку не получаю, но состояние не меняется.
Олег, проверьте выполняется ли условие
[javascript]
if ((Dataset('ResultID') == '{CD0955F7-D53A-4302-97DA-2BD0E53DFD13}') && (!IsEmptyGUID(Dataset('IncidentID'))))
[/javascript]
Условие работает.
Если вставить
[javascript]
{
ShowInformationDialog('Help');
}
[/javascript]
То сообщение выводит
Олег, сбросьте сервис, в котором происходит обработка SelfOnDatasetAfterPost
[javascript]
function SelfOnDatasetAfterPost(Dataset) {
TaskDatasetAfterPost(Dataset);
DeleteRemindingByTask(Dataset);
LogVars(Dataset, 'ds_TaskLog', 'TaskLog');
if ((Dataset('ResultID') == '{CD0955F7-D53A-4302-97DA-2BD0E53DFD13}') && (!IsEmptyGUID(Dataset('IncidentID'))))
{
var DatasetIncident = GetSingleItemByCode('ds_Incident', 'UniqCode');
ApplyDatasetIDFilter(DatasetIncident, Dataset('IncidentID'), true);
RefreshDataset(DatasetIncident);
DatasetIncident.DisableEvents();
DatasetIncident.Edit();
DatasetIncident('StatusID') = '{83DFF6F7-10CE-41B4-B390-40D532751E13}';
DatasetIncident.Post();
DatasetIncident.EnableEvents();
DatasetIncident.Close();
}
}
[/javascript]
"Кулак Олег" написал:Олег, сбросьте сервис, в котором происходит обработка SelfOnDatasetAfterPost
Выгрузите сервис в xml
Попробуйте, так:
[javascript]
function SelfOnDatasetAfterPost(Dataset) {
debugger;
if ((Dataset('ResultID') == '{CD0955F7-D53A-4302-97DA-2BD0E53DFD13}') &&
(!IsEmptyGUID(Dataset('IncidentID')))) {
var DatasetIncident = Services.GetNewItemByUSI('ds_Incident');
ApplyDatasetIDFilter(DatasetIncident, Dataset('IncidentID'), true);
RefreshDataset(DatasetIncident);
DatasetIncident.DisableEvents();
DatasetIncident.Edit();
DatasetIncident('StatusID') = '{83DFF6F7-10CE-41B4-B390-40D532751E13}';
DatasetIncident.Post();
DatasetIncident.EnableEvents();
DatasetIncident.Close();
}
TaskDatasetAfterPost(Dataset);
DeleteRemindingByTask(Dataset);
LogVars(Dataset, 'ds_TaskLog', 'TaskLog');
}
[/javascript]
Срабатывает ли у Вас debugger? проставляется ли необходимое значение статуса?
Ошибок нету, статус не меняется.
При debugger; дебагет срабатывает
Состояние меняется. В гриде в инцидентах все норм. Просто окно открывается быстрее чем меняется состояние. Может подскажете, как поменять значение непосредственно в открытом окне, а не в датасете?
[javascript]
if((BaseDBEdit.Dataset.Values('ResultID') == '{CD0955F7-D53A-4302-97DA-2BD0E53DFD13}')&&
(BaseDBEdit.Dataset.Values('TypeID') == '{7A9B16B3-216B-4125-BD0B-FF826B022841}')&&
(!BaseDBEdit.Dataset.ValIsNull('IncidentID')))
{
var Attributes = GetNewDictionary();
Attributes('RecordID') = BaseDBEdit.Dataset.Values('IncidentID') ;
ShowEditWindowEx('wnd_IncidentEdit', Attributes);
}
[/javascript]
Вот я окно нужного инцидента открыл, а как мне определить параметр именно этого окна, а не какого другого?
[javascript]
if((BaseDBEdit.Dataset.Values('ResultID') == '{CB0F1B79-006C-43DB-91B7-5EE05A1ADB4D}')&&
(BaseDBEdit.Dataset.Values('TypeID') == '{7A9B16B3-216B-4125-BD0B-FF826B022841}')&&(!BaseDBEdit.Dataset.ValIsNull('IncidentID')))
{
var Attributes = GetNewDictionary();
Attributes('RecordID') = BaseDBEdit.Dataset.Values('IncidentID') ;
var EditWindow = ShowEditWindowEx('wnd_IncidentEdit', Attributes);
EditWindow.ComponentsByName('StatusID') = '{83DFF6F7-10CE-41B4-B390-40D532751E13}';
}
[/javascript]
Думал может так, но ошибки на EditWindow.ComponentsByName('StatusID') = '{83DFF6F7-10CE-41B4-B390-40D532751E13}'; кидает
[javascript]
if((BaseDBEdit.Dataset.Values('ResultID') == '{CB0F1B79-006C-43DB-91B7-5EE05A1ADB4D}')&&
(BaseDBEdit.Dataset.Values('TypeID') == '{7A9B16B3-216B-4125-BD0B-FF826B022841}')&&
(!BaseDBEdit.Dataset.ValIsNull('IncidentID')))
{
var Attributes = GetNewDictionary();
Attributes('RecordID') = BaseDBEdit.Dataset.Values('IncidentID') ;
var Window = ShowEditWindowEx('wnd_IncidentEdit', Attributes);
Window.ComponentsByName('edtStatus')='{83DFF6F7-10CE-41B4-B390-40D532751E13}';
}
[/javascript]
Остановился на таком, но ='{83DFF6F7-10CE-41B4-B390-40D532751E13}'; не прокатывает. Необходимо указывать значение, а не ID, но это справочник и мне нужно вариант по ID выбрать каким то образом
Попробуйте так:
[javascript]
if((BaseDBEdit.Dataset.Values('ResultID') == '{CB0F1B79-006C-43DB-91B7-5EE05A1ADB4D}')&&
(BaseDBEdit.Dataset.Values('TypeID') == '{7A9B16B3-216B-4125-BD0B-FF826B022841}')&&
(!BaseDBEdit.Dataset.ValIsNull('IncidentID')))
{
var Attributes = GetNewDictionary();
var DefaultValues = GetNewDictionary();
Attributes('RecordID') = BaseDBEdit.Dataset.Values('IncidentID') ;
DefaultValues('StatusID') = '{83DFF6F7-10CE-41B4-B390-40D532751E13}';
var Window = ShowEditWindowEx('wnd_IncidentEdit', Attributes, DefaultValues);
}
[/javascript]
Не меняет, дело в том, что надо менять значение непосредственно в открытом окошке.
[javascript]
var Attributes = GetNewDictionary();
Attributes('RecordID') = BaseDBEdit.Dataset.Values('IncidentID') ;
var Window = ShowEditWindowEx('wnd_IncidentEdit', Attributes);
edtStatus.Enum = CreateEnumByDictionaryUSI();
edtStatus.Value = edtStatus.Enum.ItemsByCode('{83DFF6F7-10CE-41B4-B390-40D532751E13}');
[/javascript]
Либо такое что-то
А в террасофт нет ничего похожего на Thread.Sleep() ?
[javascript]
if ((BaseDBEdit.Dataset.Values('ResultID') == '{CB0F1B79-006C-43DB-91B7-5EE05A1ADB4D}') &&
(BaseDBEdit.Dataset.Values('TypeID') == '{7A9B16B3-216B-4125-BD0B-FF826B022841}') &&
(!BaseDBEdit.Dataset.ValIsNull('IncidentID'))) {
var Attributes = GetNewDictionary();
Attributes('RecordID') = BaseDBEdit.Dataset.Values('IncidentID') ;
Attributes('EditStatus') = true;
var Window = ShowEditWindowEx('wnd_IncidentEdit', Attributes);
}
[/javascript]
На OnPrepare окна wnd_IncidentEdit добавить строки:
[javascript]
if (GetAttribute(Window, 'EditStatus')) {
dlData.Dataset('StatusID') = '{83DFF6F7-10CE-41B4-B390-40D532751E13}';
}
[/javascript]
dlData.Dataset('StatusID') = '{83DFF6F7-10CE-41B4-B390-40D532751E13}';
не нравится эта строка
Наверн слова Values не хватает, ща проверю
[javascript]
dlData.Dataset.Open();
dlData.Dataset.Edit();
if (GetAttribute(Window, 'EditStatus')) {
dlData.Dataset.Values('StatusID') = '{83DFF6F7-10CE-41B4-B390-40D532751E13}';
}
[/javascript]
Но все равно не меняет
Да тут дело получается в том, что походу надо менять не StatusID, а непосредственно ComponentsByName('edtStatus')
Я отталкиваюсь от того, что вот я нашел окно var Window = ShowEditWindowEx('wnd_IncidentEdit', Attributes); и уже в нем меняю ComponentsByName('edtStatus') но как правильно сделать не знаю, пробовал разные вариации не получается
"Зголич Олег Александрович" написал:При нажатии на кнопку Ок
Покажите код
[javascript]
var Attributes = GetNewDictionary();
var DefaultValues = GetNewDictionary();
Attributes('RecordID') = BaseDBEdit.Dataset.Values('IncidentID') ;
DefaultValues('StatusID') = '{83DFF6F7-10CE-41B4-B390-40D532751E13}';
var Window = ShowEditWindowEx('wnd_IncidentEdit', Attributes, DefaultValues);
var Dataset=Window.NonVisualComponents.ItemsByName('dlData').Dataset;
Dataset.Values('StatusID')= '{83DFF6F7-10CE-41B4-B390-40D532751E13}';
[/javascript]
Решил так, щас только лишнее подчищу
[javascript]
if((BaseDBEdit.Dataset.Values('ResultID') == '{CD0955F7-D53A-4302-97DA-2BD0E53DFD13}')&&
(BaseDBEdit.Dataset.Values('TypeID') == '{7A9B16B3-216B-4125-BD0B-FF826B022841}')&& (!BaseDBEdit.Dataset.ValIsNull('IncidentID')))
{
var Attributes = GetNewDictionary();
Attributes('RecordID') = BaseDBEdit.Dataset.Values('IncidentID') ;
var Window = ShowEditWindowEx('wnd_IncidentEdit', Attributes);
var Dataset=Window.NonVisualComponents.ItemsByName('dlData').Dataset;
Dataset.Values('StatusID')= '{83DFF6F7-10CE-41B4-B390-40D532751E13}';
}
[/javascript]
Конечный вариант, работает отлично