Однако этот механизм позволяет лишь показывать данные из других объектов, не позволяя их отредактировать и сохранить.
Если стоит задача вытащить данные по ссылке в контролы, чтобы позволить затем пользователю их редактировать, то придется немного потрудиться...
Задача.
Предположим, у нас есть карточка маршрута согласования и карточка документа, где это маршрут используется. Карточка маршрута служит для описания типовых маршрутов и содержит список согласующих лиц, тип маршрута (последовательный, параллельный) и другие параметры. В документе, после выбора типового маршрута хочется дать пользователю возможность отредактировать список согласующих лиц и тип маршрута.
Решение.
В карточке документа размещаем 3 основных контрола:
- Выбор маршрута (контрол типа Ссылка на карточку)
- Тип маршрута (контрол типа Группа радиокнопок)
- Согласующие лица (контрол типа Сотрудники)
а также 2 вспомогательных контрола:
- Тип маршрута Вспомогательный (контрол типа Группа радиокнопок)
- Согласующие лица Вспомогательный (контрол типа Сотрудники)
Вспомогательные контролы делаем невидимыми (устанавливая атрибут Visibility в Invisible или EmptySpace) и привязываем по ссылке к соответствующим полям карточки маршрута согласования, выбираемой в контроле Выбор маршрута (как это сделать, описано в руководстве администратора).
Затем пишем следующий скрипт для события ControlValueChanged контрола Выбор маршрута:
using System;
using System.Windows.Forms;
using DocsVision.Platform.ObjectManager;
using DocsVision.BackOffice.View.WinForms;
using DocsVision.BackOffice.Model;
namespace ScriptNamespace
{
public class ScriptClass
{
public void Execute(UserSession session, CardData cardData, baseCardControl cardControl)
{
// Получение значения связанного свойства, которое на форме сделано невидимым.
// Его единственная задача - получить значение по ссылке
object propertyValue = cardControl.PropertyController.GetPropertyValue("Тип маршрута Вспомогательный");
// Запись значения в свойство
cardControl.PropertyController.UpdateProperty("Тип маршрута", propertyValue);
// То же для контрола типа Список сотрудников
object propertyValue2 = cardControl.PropertyController.GetPropertyValue("Согласующие лица Вспомогательный");
cardControl.PropertyController.UpdateProperty("Согласующие лица", propertyValue2);
// Обновление элементов управления
cardControl.PropertyController.RefreshControls();
}
}
}
Все!
Теперь после выбора ссылки на карточку маршрута можно редактировать тип маршрута и список согласующих лиц. Читать дальше
0 коммент.:
Отправить комментарий