Добрый день
Подскажите, как написать на С#:
в Инциденте мне нужно в поле "Сервис" выводить только те сервисы, которые включены в Сервисный договор и у которых стоит признак "Действующий сервис".
Признак "Действующий сервис" - галочка в карточке сервиса (либо она есть, либо ее нет)
Заранее спасибо
Нравится
Здравствуйте, Татьяна!
В обработчике события Init процесса страницы карточки Обращения Вам необходимо дописать код:
Page.ServiceEdit.PrepareLookupFilter += delegate (object sender, LookupEditEventArgs e) { if (!Page.ServiceAgreementEdit.Value.Equals(Guid.Empty)) { var filters = e.Filters; filters.Add(new Dictionary<string, object> { {"comparisonType", FilterComparisonType.Equal}, {"leftExpressionColumnPath", "[ServiceInServiceAgreement:Service].ServiceAgreement.Id"}, {"useDisplayValue", false}, {"rightExpressionParameterValues", new object[] {(Guid)Page.ServiceAgreementEdit.Value}}}); filters.Add(new Dictionary<string, object> { {"comparisonType", FilterComparisonType.Equal}, {"leftExpressionColumnPath", "AbsoluteSupport"}, //имя колонки "Действующий сервис" в объекте "Сервис" {"useDisplayValue", false}, {"rightExpressionParameterValues", new object[] {true}}}); } };
Дело в том, что в Init в странице редактирования Инцидента у нас уже есть след.запись, касающаяся Сервиса. Как включить туда еще и выборку по признаку "действующий сервис"?
Page.ServiceEdit.AjaxEvents.Change.Event += delegate(object sender, AjaxEventArgs e) {
var edit = (LookupEdit)sender;
var value = (Guid)edit.Value;
if (value !=Guid.Empty){
Page.GroupEdit.Clear();
Page.GroupEdit.Enabled = true;
Page.PriorityEdit.Enabled = true;
var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "SysAdminUnit");
var columnUser = esq.AddColumn("Id");
var columnUserName = esq.AddColumn("Name");
var filter = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "[ServiceTeam:SysAdminUnit].Service", value);
esq.Filters.Add(filter);
var entityCollection = esq.GetEntityCollection(UserConnection);
var noCIOwners = true;
if((Guid)Page.ConfigurationItemEdit.Value != Guid.Empty) {
var schema = UserConnection.EntitySchemaManager.GetInstanceByName("ConfigurationItem");
var entity = schema.CreateEntity(UserConnection);
if(entity.FetchFromDB((Guid)Page.ConfigurationItemEdit.Value)) {
var schemaCont = UserConnection.EntitySchemaManager.GetInstanceByName("ConfigurationItemOwner");
var entityCont = schemaCont.CreateEntity(UserConnection);
if(entityCont.FetchFromDB(entity.GetTypedColumnValue("OwnerId"))) {
if(entityCont.GetTypedColumnValue("GroupNumber") == 3){
Page.GroupEdit.SetValueAndText(entityCont.GetTypedColumnValue("OwnerGroupId"),entityCont.GetTypedColumnValue("Name"));
noCIOwners = false;
}
}
}
}
if(noCIOwners) {
if(entityCollection.Count == 1) {
Page.GroupEdit.SetValueAndText(entityCollection[0].GetTypedColumnValue(columnUser.Name),entityCollection[0].GetTypedColumnValue(columnUserName.Name));
}
}
var registeredDate = Page.DataSource.ActiveRow.GetTypedColumnValue("RegisteredOn");
if (!Terrasoft.Configuration.ActivityUtils.IsWorkingTime(UserConnection,registeredDate)) {
var schema = UserConnection.EntitySchemaManager.GetInstanceByName("Service");
var entity = schema.CreateEntity(UserConnection);
var fetchParam = new Dictionary(){
{"AbsoluteSupport", true},
{"Id", value}
};
if (entity.FetchFromDB(fetchParam)) {
Page.PriorityEdit.SetValueAndText(TSConfiguration.Constants.ServicePriorityCritical,Terrasoft.Configuration.CommonUtilities.GetLookupDisplayValue(UserConnection,"ServicePriority",TSConfiguration.Constants.ServicePriorityCritical));
} else {
Page.PriorityEdit.SetValueAndText(TSConfiguration.Constants.ServicePriorityPlanned,Terrasoft.Configuration.CommonUtilities.GetLookupDisplayValue(UserConnection,"ServicePriority",TSConfiguration.Constants.ServicePriorityPlanned));
}
}
} else {
Page.GroupEdit.Clear();
Page.GroupEdit.Enabled = false;
Page.PriorityEdit.Enabled = false;
}
Page.PriorityEdit.ListPrepared = false;
};
Татьяна, просто добавьте новый код, они не должны помешать друг другу.
Татьяна, прикрепите, пожалуйста, код, который Вы вставили.
Page.ServiceEdit.PrepareLookupFilter += delegate (object sender, LookupEditEventArgs e) {
if (!Page.ServiceAgreementEdit.Value.Equals(Guid.Empty)) {
var filters = e.Filters;
filters.Add(new Dictionary {
{"comparisonType", FilterComparisonType.Equal},
{"leftExpressionColumnPath", "[ServiceInServiceAgreement:Service].ServiceAgreement.Id"},
{"useDisplayValue", false},
{"rightExpressionParameterValues", new object[] {(Guid)Page.ServiceAgreementEdit.Value}}});
filters.Add(new Dictionary {
{"comparisonType", FilterComparisonType.Equal},
{"leftExpressionColumnPath", "AbsoluteSupport"}, //имя колонки "Действующий сервис" в объекте "Сервис"
{"useDisplayValue", false},
{"rightExpressionParameterValues", new object[] {true}}});
}
};
Татьяна, колонка "Действующий сервис" в объекте Service у Вас называется AbsoluteSupport?
Татьяна, я вижу, что в уже имеющемся коде есть информация касательно поля "Действующий сервис":
var fetchParam = new Dictionary(){ {"AbsoluteSupport", true}, {"Id", value} };
Вы можете попробовать закомментировать имеющийся код и вставить рекомендованный мною, но прошу учесть, что это может затереть проектную реализацию.
Рекомендую Вам обратиться в рамках поддержи проектного решения для разъяснения текущей реализации.
Возможно, Вам вовсе нет смысла выполнять текущую реализацию.