КЕ.

Добрый день
Подскажите, в карточке КЕ мне нужно, чтобы при изменении поля КЕ.Контакт очищались поля КЕ.Контрагент и КЕ.Департамент. Где именно в системе мне это прописать ? Также чтобы на вкладке КЕ Пользователя эти данные удалялись? Заранее спасибо

Нравится

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

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

Данный алгоритм Вы можете прописать в обработчике события изменения поля КЕ.Контакт карточки КЕ.

Перед изменением считывайте идентификаторы КЕ, Контрагента и Департамента, после чего выполняйте поиск записей в объекте Пользователей КЕ с аналогичными идентификаторами КЕ и Контрагента/Департамента и удаляйте их.

В обработчике события поля КЕ.Контакт карточки КЕ у меня написано:
Address = string.Empty;
CityName = string.Empty;

if (!Page.ContactEdit.Value.Equals(Guid.Empty)) {
var contactESQ = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Contact");
var accountColumn = contactESQ.AddColumn("Account");
var accountNameColumn = contactESQ.AddColumn("Account.Name");
var deptColumn = contactESQ.AddColumn("Department");
var deptNameColumn = contactESQ.AddColumn("Department.Name");
var devColumn = contactESQ.AddColumn("Division");
var devNameColumn = contactESQ.AddColumn("Division.CustomDepartmentName");
var contactEntity = contactESQ.GetEntity(UserConnection, Page.ContactEdit.Value);
if (contactEntity != null) {
var accountId = contactEntity.GetTypedColumnValue(accountColumn.ValueQueryAlias);
var deptId = contactEntity.GetTypedColumnValue(deptColumn.ValueQueryAlias);
var devId = contactEntity.GetTypedColumnValue(devColumn.ValueQueryAlias);
if (accountId != Guid.Empty) {
Page.AccountEdit.SuspendAjaxEvents();
Page.AccountEdit.SetValueAndText(accountId, contactEntity.GetTypedColumnValue(accountNameColumn.Name));
Page.AccountEdit.ResumeAjaxEvents();
DepartmentFillButtonShow(new Guid(Page.AccountEdit.Value.ToString()));
}
if (deptId != Guid.Empty && devId != Guid.Empty) {
DepartmentId = deptId;
Page.DataSource.ActiveRow.SetColumnValue("DivisionId", devId);
Page.AddScript(string.Format("{0}.setRawValue('{1}');\r\n{0}.beforeBlur = function () ", Page.DepartmentEdit.ClientID,
String.Format("{0} ({1})", contactEntity.GetTypedColumnValue(devNameColumn.Name), contactEntity.GetTypedColumnValue(deptNameColumn.Name))) + "{};");
Page.AddScript(string.Format("{0}.el.dom.readOnly = true;", Page.DepartmentEdit.ClientID));
Page.AddScript(string.Format("{0}.clearInvalid();", Page.DepartmentEdit.ClientID));
Page.AddScript(string.Format("{0}.old_validate = {0}.validate;\r\n{0}.validate = function() ", Page.DepartmentEdit.ClientID) + "{ return true; };");
} else if (deptId != Guid.Empty) {
Page.DataSource.EnableServerActiveRow = true;
DepartmentId =deptId;
Page.DataSource.ActiveRow.SetColumnValue("DivisionId", null);
Page.DepartmentEdit.SetValueAndText(deptId, contactEntity.GetTypedColumnValue(deptNameColumn.Name));
Page.AddScript(string.Format("{0}.el.dom.readOnly = false;", Page.DepartmentEdit.ClientID));
Page.AddScript(string.Format("{0}.beforeBlur = function () ", Page.DepartmentEdit.ClientID) +
"{" + string.Format("{0}.checkValueAndText()", Page.DepartmentEdit.ClientID) + "};");
} else if (devId != Guid.Empty) {
DepartmentId = Guid.Empty;
Page.DataSource.ActiveRow.SetColumnValue("DivisionId", devId);
Page.AddScript(string.Format("{0}.setRawValue('{1}');\r\n{0}.beforeBlur = function () ", Page.DepartmentEdit.ClientID,
contactEntity.GetTypedColumnValue(devNameColumn.Name)) + "{};");
Page.AddScript(string.Format("{0}.el.dom.readOnly = true;", Page.DepartmentEdit.ClientID));
Page.AddScript(string.Format("{0}.clearInvalid();", Page.DepartmentEdit.ClientID));
Page.AddScript(string.Format("{0}.old_validate = {0}.validate;\r\n{0}.validate = function() ", Page.DepartmentEdit.ClientID) + "{ return true; };");
}
}
}

var configurationItem = Page.DataSource.ActiveRow as Terrasoft.Configuration.ConfigurationItem;
if (configurationItem == null) {
return true;
}

if (configurationItem.ContactId != Guid.Empty) {
var entitySchemaManager = UserConnection.EntitySchemaManager;
var entitySchema = entitySchemaManager.GetInstanceByName("Contact");
var entitySchemaQuery = new EntitySchemaQuery(entitySchemaManager, entitySchema.Name);
var cityColumn = entitySchemaQuery.AddColumn("City.Name");
var addressColumn = entitySchemaQuery.AddColumn("Address");
entitySchemaQuery.Filters.Add(entitySchemaQuery.CreateFilterWithParameters(FilterComparisonType.Equal,
entitySchema.PrimaryColumn.Name, configurationItem.ContactId));
var entityCollection = entitySchemaQuery.GetEntityCollection(UserConnection);
if (entityCollection.Count > 0) {
if (!string.IsNullOrEmpty(entityCollection[0].GetTypedColumnValue(cityColumn.Name))
|| !string.IsNullOrEmpty(entityCollection[0].GetTypedColumnValue(addressColumn.Name))) {
Address = entityCollection[0].GetTypedColumnValue(addressColumn.Name);
CityName = entityCollection[0].GetTypedColumnValue(cityColumn.Name);
WannaChangeContactAddressQuestionTask.Page = Page;
WannaChangeContactAddressQuestionTask.MessageText = ContactAddressChanged;
WannaChangeContactAddressQuestionTask.Icon = "QUESTION";
WannaChangeContactAddressQuestionTask.Buttons = "YESNO";
WannaChangeContactAddressQuestionTask.ResponseMessages = new Dictionary {{"yes", "YesChangeContactAddressMessage"}};
}
}
}

return true;

Мне нужно, что сначала поля КЕ.Контрагент и КЕ.Департамент очищались, а потом уже пошла вышенаписанная логика.
Помогите, пжста, где мне написать :
Page.DepartmentEdit.Clear();
Page.AccountEdit.Clear();

Я пробовала вначала включить очистку КЕ.Контрагент и КЕ.Департамент - не получилось. Где моя ошибка? Заранее спасибо

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

В самом начале, сразу после условия проверки на заполнение поля, допишите:

Page.DataSource.ActiveRow.SetColumnValue("DepartmentId", null);
Page.DepartmentEdit.Clear();
Page.DataSource.ActiveRow.SetColumnValue("AccountId", null);
Page.AccountEdit.Clear();

Учтите, что у Вас далее идет логика подстановки новых значений департамента, а также других полей.
Потому этот код у Вас может и отрабатывает, но тут же заполняется новыми значениями из выбранного Вами контакта.

Добрый день
Написала:
if (!Page.ContactEdit.Value.Equals(Guid.Empty)) {
Page.DataSource.ActiveRow.SetColumnValue("DepartmentId", null);
Page.DepartmentEdit.Clear();
Page.DataSource.ActiveRow.SetColumnValue("AccountId", null);
Page.AccountEdit.Clear();
...

Сработало так:
Как только я нажимаю на лупу, где раскрывается справочник контактов (а вообще-то мне тут именно и надо, чтобы Департамент и Контрагент обнулились), обнуления не происходит. Как только я выбрала конкретного контакта (нажала ОК) , то Департамент и Контрагент обнулились (т.е. не подтянулись из карточи Контакта). А как сделать ,чтобы только при нажатии на лупу обнулились Департамент и Контрагент? Заранее спасибо

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

Событие у Вас в данный момент срабатывает только в случае изменения записи, - и это правильно.

Андрей, я могу выбрать старый контакт или нажать в карточке КЕ на кнопку "Отмена". Если это - невозможно сделать в принципе - тогда, ну что ж...

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

Если Вы хотите, чтобы при нажатии на лупу другое лукапное поле очищалось, Вам необходимо в обработчике события Init написать примерно следующий код:

Page.OwnerEdit.PrepareLookupFilter += delegate (object sender, LookupEditEventArgs e) {
	Page.CityEdit.SetValueAndText(Guid.Empty, string.Empty);
};

где OwnerEdit - название поля, по нажатию на лупу которого будет выполняться очистка других полей,
а внутри функции непосредственно выполнять действия очистки (или любые другие).

Добрый день.
А как называется точнее обработчик события Init ?

Вопрос снят.

Добрый день
У меня все получилось. Подскажите, как (в каком методе/обработчике) сделать предупреждение при нажатии на ОК в карточке КЕ, если были изменены поля Контакт и Департамент. Возникает предупредение - я нажимаю на Х , потом на ОК и карточка КЕ закрывается.
Заранее спасибо

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

В обработчике нажатия на кнопку ОК.

Вывод предупреждения делайте следующим образом:
http://www.community.terrasoft.ua/blogs/8984

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