Добрый день
// ЗИ - запрос на изменение
Помгите составить такой БП:
если в Инциденте поле Инцидент.ЗИ заполнено и ЗИ.Состояние = Выполнен, то система дает возможность перевести поле Инцидент.Состояние в "Разрешен", иначе - система выдает предупреждение о том, что "ЗИ еще открыт".
Нравится
Здравствуйте, Татьяна!
Выполнить валидацию поля можно с помощью такого скрипта
Ext.FormValidator.addCustomValidator( function() { if (<клиентское имя контрола>.checked == true && <клиентское имя контрола>.getValue() == '') { return false; // валидация не прошла, возвращаем false } return true; // валидация прошла, возвращаем true }, 'Custom Validation Error', //<--- cообщение об ошибке window );
Данный скрипт можно добавить в обработчик события на нажатие кнопки "ОК" (OKButtonClick) страницы редактирования.
Добрый день.
Я написала след.логику в "ScriptOKButtonClick":
uid sost1 = new Guid("ae7f411e-f46b-1410-009b-0050ba5d6c3"); // ИД состояния Инцидента "разрешен"
var sost = (Guid)Page.StatusEdit.Value;
Guid zi1 = new Guid("ffbf12aa-f36b-1410-0d99-485b39b217"); // ИД состояния Запроса на изменение "выполнен"
var zi = (Guid)Page.ChangeRequestEdit.Value;
if ((sost == sost1)&&(Page.ChangeRequestEdit.Enabled = true)) // делаю проверку, что поле ChangeRequestEdit не пусто при состоянии Инцидента = Разрешено
{
Page.BaseMessagePanel.AddMessage(Warning, "Запрос на изменение пока не выполнен!", MessageType.Warning);
return false;
}
else
{
return true;
}
Как при этом сделать проверку на состояние запроса на изменение, номер которого указан в карточке Инцидента? Но даже без этой проверки на состояние запроса на изменение, система не выдает предупреждение "Запрос на изменение пока не выполнен!". Почему, что не так? подскажите, а где в системе идет предупреждение "Код закрытия не указан" при нажатии на ОК в Инциденте? Может быть, нужно здесь же и эту логику прописывать?
полный текст на "ScriptOKButtonClick":
if (NotesTabIndex > 0) {
string notes = ((Page.DataTabPanel.Tabs[NotesTabIndex].Items[0] as PageContainer).PageInstance.GetPropertyValue("NotesEdit") as HtmlEdit).Text;
var converters = new JsonConverter[] {new GuidJsonConverter()};
string id = Json.Serialize(Page.DataSource.ActiveRow.PrimaryColumnValue, converters[0]);
Page.ScriptManager.AddScript(Page.DataSource.ClientID +
".onActiveRowColumnValuesChangedResponse("
+ id + ",{\"Notes\"" : {columnValue: ""
Татьяна, для отображения необходимо создать новый событийный подпроцесс. Начальное событие привязать к 'OnButtonClick'. Затем создать новый параметр (например, CanSave) с логическим типом. После этого вставить исправленный код в подпроцесс:
Вставить исправленный код:
Guid sost1 = new Guid("f7a3127c-f36b-1410-6684-00155d054c02"); var sost = (Guid)Page.StatusEdit.Value; //Page.ChangeRequestEdit.Enabled = false; Guid zi1 = new Guid("FFBF12AA-F36B-1410-0D99-485B39B217AA"); var zi = (Guid)Page.ChangeRequestEdit.Value; var userConnection = Page.UserConnection; var changeRequestSchema = userConnection.EntitySchemaManager.GetInstanceByName("ChangeRequest"); var changeRequestEntity = changeRequestSchema.CreateEntity(userConnection); if(changeRequestEntity.FetchFromDB(zi) && changeRequestEntity.GetTypedColumnValue<Guid>("StatusId") != zi1) { Page.BaseMessagePanel.AddMessage(Warning, "Запрос на изменение пока не выполнен!", MessageType.Warning); CanSave = false; } else { CanSave = true; } return true;
Затем с помощью условного потока (CanSave) соединить с элементом «Сообщение» («Промежуточные генерирующие»), который отправит в родительский процесс.
Также прикрепляю наглядный скриншот.
Татьяна, про элемент «Событийный подпроцесс» описывается в руководстве по настройке (глава «Элемент процесса [Событийный подпроцесс]»).
Для создания событийного подпроцесса необходимо выбрать соответствующий элемент и в дорожке создать его (см. файл «Событийный подпроцесс»).
[url=http://pixs.ru/showimage/Sobitiyniy_3065896_14987741.png][img]http://i9…]
Также для создания нового параметра необходимо выбрать «Parameters» и в контекстом меню выбрать «Добавить» (см. файл «Добавление параметра»).
[url=http://pixs.ru/showimage/Dobavlenie_1138624_14987757.png][img]http://i9…]
Это нужно реализовать в объекте «Страница редактирования инцидента» (IncidentEditPage).
Для определения родительского процесса необходимо нажать в дизайнере процессов «Дополнительно» и в контекстном меню выбрать «Открыть родительский процесс».
В результате откроется родительский процесс. Название процесса можно увидеть в поле «Название» (свойства) или в заголовке окна браузера.
[url=http://pixs.ru/showimage/Roditelski_6942955_14989138.png][img]http://i9…]
Добрый день.
Создала событийный процесс в объекте «Страница редактирования инцидента» (IncidentEditPage). Затем с помощью условного потока (CanSave) соединила с элементом «Сообщение» («Промежуточные генерирующие»), который отправит подпроцесс в родительский процесс (родит. процесс - BaseServiceRequestInBPMonlineEditPageEventsProcess )
Опубликовала - без ошибок.
А как мне использовать параметр CanSave в родит.процессе?
Добрый день, Татьяна!
В родительском процессе ничего делать не надо.
Примечание. В елементе «Сообщение» («Промежуточные генерирующие») в поле, где указывается сообщение. необходимо указать название сообщения/сигнал, а не название родительского процесса. Таким образом в поле «Сообщение» необходимо указать «OKButtonClick». Также в начальном элементе «Сообщение» не «OnButtonClick», а «OKButtonClick». В родительском процессе нет сообщения «OnButtonClick».
Добрый день!
Проверьте, пожалуйста, чтобы ID состояний совпадали с кодом
Guid sost1 = new Guid("AE7F411E-F46B-1410-009B-0050BA5D6C38"); var sost = (Guid)Page.StatusEdit.Value; //Page.ChangeRequestEdit.Enabled = false; Guid zi1 = new Guid("FFBF12AA-F36B-1410-0D99-485B39B217AA"); var zi = (Guid)Page.ChangeRequestEdit.Value; var userConnection = Page.UserConnection; var changeRequestSchema = userConnection.EntitySchemaManager.GetInstanceByName("ChangeRequest"); var changeRequestEntity = changeRequestSchema.CreateEntity(userConnection); if(changeRequestEntity.FetchFromDB(zi) && changeRequestEntity.GetTypedColumnValue<Guid>("StatusId") != zi1) { Page.BaseMessagePanel.AddMessage(Warning, "Запрос на изменение пока не выполнен!", MessageType.Warning); CanSave = false; } else { CanSave = true; } return true;
Также прикрепляю наглядный скриншот, в котором показано, что БП работает корректно.
Добрый день.
ID состояния :
ЗИ Выполнен: &recordId=ffbf12aa-f36b-1410-0d99-485b39b217aa&entitySchemaUId
Обращение Разрешен: &recordId=ae7f411e-f46b-1410-009b-0050ba5d6c38&entitySchemaUId
Все вроде, верно.
Может быть, я не там событийный процесс сделала? :
Я делала в странице редактирования Инцидента:
Татьяна, подобный алгоритм реализован в «Страница карточки задачи» (TaskEditPageEventsProcess):
public virtual bool ScripStatusChangeExecute(ProcessExecutingContext context)
Или можно, например, сделать выборку по состояниям, у которых конечное значение равно True и затем используя условие сравнивать ID состояний.
Добрый день
В странице карточки задачи прописано, как сделать выборку по состояниям самой активности:
var status = new Terrasoft.Configuration.ActivityStatus(Page.UserConnection);
var statusId = this.Page.StatusEdit.SelectedItem.Value;
if (statusId != string.Empty) {
status.FetchFromDB(statusId);
if(status.Finish)
{
а здесь уже идет выполнение условий...
А как сделать выборку по состояниям ЗИ в этом Инциденте? Я проставила "галочки" по всем конечным состояниям ЗИ.
Добрый день!
Для этого необходимо выбрать все значения, где состояние является конечным. Затем получить значения состояний из БД (Active.row карточки). И потом, если значение равно хоть одному из конечных состояний, то выполняется условие.
Татьяна, конечно.
В принципе, именно так делать и правильно.
Пример приведен Вами же в комментарии: в случае конечного состояния выполняются определенные условия.
Здравствуйте!
В условии написано, что выполняется при статусе «Конечное». Это значит, что все статусы, которые имеют признак «Конечное» входят в это условие.
if (statusId != string.Empty) { status.FetchFromDB(statusId); if(status.Finish) {
Если Вам нужны конкретные ID, то можно воспользоваться примером, который я писал ранее:
Guid sost1 = new Guid("AE7F411E-F46B-1410-009B-0050BA5D6C38"); var sost = (Guid)Page.StatusEdit.Value; //Page.ChangeRequestEdit.Enabled = false; Guid zi1 = new Guid("FFBF12AA-F36B-1410-0D99-485B39B217AA"); var zi = (Guid)Page.ChangeRequestEdit.Value; var userConnection = Page.UserConnection; var changeRequestSchema = userConnection.EntitySchemaManager.GetInstanceByName("ChangeRequest"); var changeRequestEntity = changeRequestSchema.CreateEntity(userConnection); if(changeRequestEntity.FetchFromDB(zi) && changeRequestEntity.GetTypedColumnValue<Guid>("StatusId") != zi1)
Guid sost1 = new Guid("AE7F411E-F46B-1410-009B-0050BA5D6C38");
var sost = (Guid)Page.StatusEdit.Value;
Guid zi1 = new Guid("ffbf12aa-f36b-1410-0d99-485b39b217aa");
Guid zi2 = new Guid("7fbf0fb2-f36b-1410-0f99-485b39b217aa");
Guid zi3 = new Guid("cfaf40b8-f36b-1410-1099-485b39b217aa");
Guid zi4 = new Guid("efbf32d0-f36b-1410-1399-485b39b217aa");
Guid zi5 = new Guid("d4099aae-fbc2-4f1e-9db2-f6025e2978bc");
Guid zi6 = new Guid("ff6f22c8-f36b-1410-1299-485b39b217aa");
var zi = (Guid)Page.ChangeRequestEdit.Value;
var userConnection = Page.UserConnection;
var changeRequestSchema = userConnection.EntitySchemaManager.GetInstanceByName("ChangeRequest");
var changeRequestEntity = changeRequestSchema.CreateEntity(userConnection);
if(changeRequestEntity.FetchFromDB(zi))
{ if ((changeRequestEntity.GetTypedColumnValue("StatusId") != zi1)&&(changeRequestEntity.GetTypedColumnValue("StatusId") != zi2)&&(changeRequestEntity.GetTypedColumnValue("StatusId") != zi3)&&(changeRequestEntity.GetTypedColumnValue("StatusId") != zi4)&&(changeRequestEntity.GetTypedColumnValue("StatusId") != zi5)&&(changeRequestEntity.GetTypedColumnValue("StatusId") != zi6))
{
Page.BaseMessagePanel.AddMessage(Warning, "Запрос на изменение пока не выполнен!", MessageType.Warning);
CanSave = false;
}
else
{
CanSave = true;
}
}
return true;
Добрый день. Я перечислила состояния ЗИ. Все ок, но: если я создаю новый Инцидент и он не привязан к ЗИ, то при нажатии на ОК у меня не закрывается карточка Инцидента вообще. В чем причина? Заранее спасибо
Татьяна, добрый день!
Сообщение малоинформативное.
Возможно, что в срабатывает условие, при котором поле становится не активным. Или отсутствуют какие-строки кода. Множество вариантов.
Например, когда открывается существующий инцидент, то поле "Ответственный" не доступен для редактирования.
Уточните, пожалуйста, поле становится не активным? Или выпадает список, где доступен только один вариант?
При других состояний ЗИ уровень поддержки можно изменить?
Ошибка возникла после доработок с статусами инцидента и ЗИ?
Добрый день.
Поясню: при таком алгоритме, невозможно внести изменения в любое поле карточки Инцидента. А мне нужно, чтобы невозможно было сменить только состояние инцидента на "Разрешено" , если ЗИ еще не выполнен.
Алгоритм:
Guid zi1 = new Guid("ffbf12aa-f36b-1410-0d99-485b39b217aa");
var zi = (Guid)Page.ChangeRequestEdit.Value;
var userConnection = Page.UserConnection;
var changeRequestSchema = userConnection.EntitySchemaManager.GetInstanceByName("ChangeRequest");
var changeRequestEntity = changeRequestSchema.CreateEntity(userConnection);
if(changeRequestEntity.FetchFromDB(zi) && changeRequestEntity.GetTypedColumnValue("StatusId") != zi1)
{
Page.BaseMessagePanel.AddMessage(Warning, "Запрос на изменение пока не выполнен!", MessageType.Warning);
CanSave = false;
}
else {
CanSave = true;
}
if (Page.ChangeRequestEdit.Enabled = false)
{}
return true;