Поиск блогу

четверг, 10 марта 2011 г.

Добавление пользовательского свойства карточки в представление

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

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

В примере Договора в табличном контроле 2 столбца: Контрагент и его адрес.
Free Image Hosting at www.ImageShack.us
Задача: вывести в представлении фамилию контрагента. Вот так:
Free Image Hosting at www.ImageShack.us

Сначала делаем все, как и при обычном создании представления: создаем представление, добавляем колонки.
Затем нужно сделать следующие присоединения:
1.Free Image Hosting at www.ImageShack.us
Привязываем свойство с названием "Контрагент", принадлежащее данной карточке (InstanceID)
2.Free Image Hosting at www.ImageShack.us
Не очевидная привязка выбранных значений. Нужна, так как столбец табличного контрола представляет собой массив. После этого в после "Выбранное значение" будут находиться идентификаторы контрагентов
3.Free Image Hosting at www.ImageShack.us
Получение по Идентификатору из выбранного значения информации о контрагенте.

После перечисленных привязок можно сделать присвоение колонке значения поля Фамилия из привязанной карточки контрагентов:
Free Image Hosting at www.ImageShack.us

P.S. Если есть проблема с добавлением простого (не табличного) пользовательского свойства в представление, дайте знать в комментах. В таком случае напишу и про них.

воскресенье, 6 марта 2011 г.

Смена состояния карточки из скрипта

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

На данный момент простого способа сменить состояние из скрипта я не нашел. Единственный способ требует знания гуида конечного состояния. Данный идентификатор не доступен ни в одном из стандартных справочником и контекстных меню, поэтому приходится идти в обход.

Создаем строковый контрол на карточке. Затем на какую-нибудь кнопку ставим команду, записывающую в этот котрол значение из DomainObject.StateManager.CurrentStateId. (В моем случае по какой-то причине на активацию карточки поставить не удалось, только на кнопку или команду меню). Сохраняем карточку, закрываем конструктор.

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

Далее в конструкторе в нужном Вам месте пишем:
DomainObject.StateManager.SetCurrentState(new Guid("fce438e8-d38c-4552-86d0-36d464920265"));

CardControl.RefreshLayout();

Вместо "fce438e8-d38c-4552-86d0-36d464920265" конечно же нужно поставить нужный гуид.

P.S. Я полагаю, что возможно как-то менять состояние карточки проще, используя команду DomainObject.ChangeCardState(StateMachineBranch branch), но я так и не смог понять, как ей пользоваться. Если кто-то разберется, то очень хотел бы получить совет в комментах.

среда, 2 марта 2011 г.

Вызов картинки с локального диска, запись в стандартный контрол типа "изображение"

System.Drawing.Image image = System.Drawing.Image.FromFile(@"c:\Img.jpg");

PropertyController.UpdateProperty("imageControl", image); //imageControl - имя контрола типа "Изображение"

CardControl.RefreshLayout();