Здравствуйте!
Подскажите, как реализовать автоподстановку списка групп поддержки (деталь "Сервисные инженеры") в поле "Группа" при выборе сервиса?
Заранее спасибо!
Нравится
Здравствуйте.
Детализируйте, пожалуйста, задачу. Не понятно, где находится поле группа и где происходит выбор сервиса.
Здравствуйте, Максим.
В карточке инцидента при выборе сервисного договора в поле сервиса появляется возможность выбрать из списка сервисов, относящихся к выбранному договору. Нужно, чтобы при выборе одного из этих сервисов в поле "Группа" появлялся значок с изображением молнии и по нажатии на него в списке были группы, добавленные ранее на деталь "Сервисные инженеры" этого сервиса.
Здравствуйте.
К сожалению сегодня не успею предоставить Вам алгоритм реализации нужного Вам функционала.
Буду стараться закончить завтра.
Извините за задержку с ответом.
Здравствуйте.
Функционал смарт-тега для ответственной группы следует описывать в процессе страницы "Базовая страница редактирования обращения в BPMonline".
1. Событие изменения сервиса в карточке редактирования следует изменить на:
public virtual bool ServiceEditChangeScriptTask2Execute(ProcessExecutingContext context) { var serviceId = (Guid)Page.ServiceEdit.Value; var groupId = (Guid)Page.GroupEdit.Value; var availableOwners = GetAvailableOwnersNew(serviceId, groupId); //added var availableGroup = GetAvailableGroupOwnersNew(serviceId); //end SetOwnerToolButtonStateNew(availableOwners); //added SetGroupToolButtonStateNew(availableGroup); //end var currentOwnerId = Page.DataSource.ActiveRow.GetTypedColumnValue<Guid>("OwnerId"); if (currentOwnerId != Guid.Empty && availableOwners != null && !availableOwners.ContainsId(currentOwnerId)) { Page.OwnerEdit.SuspendAjaxEvents(); Page.OwnerEdit.Clear(); Page.OwnerEdit.ResumeAjaxEvents(); } SetParentRelease(); return true;
}
2. В структуре процесса необходимо создать новый метод: GetAvailableGroupOwnersNew (+ добавить параметр с типом Guid - serviceId)
if (serviceid == Guid.Empty) { return null; } var result = new List<RecordData>(); var entitySchemaManager = UserConnection.GetSchemaManager("EntitySchemaManager") as EntitySchemaManager; var serviceTeamSchemaQuery = new EntitySchemaQuery(entitySchemaManager, "ServiceTeam"); var sysAdminUnitIdQueryColumnName = serviceTeamSchemaQuery.AddColumn("SysAdminUnit.Id").Name; var sysAdminUnitNameQueryColumnName = serviceTeamSchemaQuery.AddColumn("SysAdminUnit.Name").Name; serviceTeamSchemaQuery.Filters.Add(serviceTeamSchemaQuery.CreateFilterWithParameters(FilterComparisonType.Equal, "Service", serviceid)); serviceTeamSchemaQuery.Filters.Add(serviceTeamSchemaQuery.CreateFilterWithParameters(FilterComparisonType.IsNull, "Contact")); var serviceTeamMembers = serviceTeamSchemaQuery.GetEntityCollection(UserConnection); var idsList = new List<Guid>(); foreach (var serviceTeamMember in serviceTeamMembers) { var serviceTeamGroups = new List<RecordData>(); var groupId = serviceTeamMember.GetTypedColumnValue<Guid>(sysAdminUnitIdQueryColumnName); var recordData = new RecordData(); recordData.Id = groupId; recordData.Name = serviceTeamMember.GetTypedColumnValue<string>(sysAdminUnitNameQueryColumnName); serviceTeamGroups.Add(recordData); foreach (var serviceTeamGroup in serviceTeamGroups) { if (!idsList.Contains(serviceTeamGroup.Id)) { result.Add(serviceTeamGroup); idsList.Add(serviceTeamGroup.Id); } } } return result.ToArray();
3. Там же, в структуре процесса необходимо создать еще один метод: SetGroupToolButtonStateNew
CreateToolButtonMenuNew(Page.GroupEdit, Page.GroupEditToolButton, availableGroup, "ShowAllOwners", AllOwnersGroup.ToString(), true);
где AllOwnersGroup - локализируемая строка (необходимо добавить)
Акмаль, CreateToolButtonMenuNew - наследованный метод, поэтому его параметры редактировать в данном процессе нельзя.
Первая ошибка говорит о том, что Вы начали обрабатывать GroupEditToolButton до его создания.
А вторая о том, что не создали локализованную строку. Добавлять ее надо в LocalizableStrings, а не в CreateToolButtonMenuNew.
Так GroupEditToolButton - это кнопка в поле группа. В дизайнере, правым кликом по полю Группа, добавить, кнопка и назовите ее GroupEditToolButton.
Всех с праздником)
Портал не работает, так что отпишусь здесь. С использованием данного функционала возникли проблемы.
При выборе группы, в которой есть хоть один пользователь возникает ошибка (см. вложение). Нужно решить проблему в срочном порядке.
Заранее спасибо.
Здравствуйте, Акмаль!
Судя по багрепорту, ошибка ядровая, в компонентах интерфейса, для диагностики необходима отладка на ядре.
В качестве быстрого решения рекомендую попробовать очистить профиль - иногда при активной разработке в профиле сохраняются старые параметры элементов управления. Инструкция по очистке профиля в приложении.
В случае, если очистка профиля не поможет, просим предоставить резервную копию БД и описание точного кейса воспроизведения в техничсекую поддержку.
Анна, очистка профиля не помогла. Решить проблему нужно как можно скорее, так как сроки сдачи проекта поджимают. Надеюсь на скорое решение.
Архив с БД:
http://www.fayloobmennik.net/2843761
Акмаль, это не ошибка. Судя по тому, что в Вас в скриптах, там просто нет скрипта-обработчика для этой кнопки.
Поэтому для того, чтобы она работала, ее нужно сделать с нуля. Поэтому Вам следует в первую очередь определиться с техническим заданием:
1. Что должно происходить при нажатии на кнопку?
2. Что должно происходить при выборе одного из элементов?
3. Как это будет отражаться на остальных событиях и полях карточки редактирования? Какая должна быть связь?
Анна, необходимо, чтобы при нажатии на кнопку отображался список групп, добавленных на деталь сервисные инженеры выбранного (в поле сервис карточки инцидента) сервиса. Проще говоря, чтобы кнопка работала не только при регистрации инцидента с нуля, но и если придётся изменить группу в карточке уже созданного инцидента.
Здравствуйте, Акмаль!
Тогда Вам нужно продублировать функциональность загрузки выпадающего меню на само нажатие кнопки:
1. Создать обработчик;
2. Вызвать в этом обработчике CreateGroupToolButtonNew