Как написать на С#

Добрый день

Подскажите, как написать на С#:
в Инциденте мне нужно в поле "Сервис" выводить только те сервисы, которые включены в Сервисный договор и у которых стоит признак "Действующий сервис".

Признак "Действующий сервис" - галочка в карточке сервиса (либо она есть, либо ее нет)

Заранее спасибо

Нравится

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

Здравствуйте, Татьяна!

В обработчике события 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}
};

Вы можете попробовать закомментировать имеющийся код и вставить рекомендованный мною, но прошу учесть, что это может затереть проектную реализацию.

Рекомендую Вам обратиться в рамках поддержи проектного решения для разъяснения текущей реализации.

Возможно, Вам вовсе нет смысла выполнять текущую реализацию.

Спасибо, у меня все получилось.

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