Думаю, что многие из вас сталкивались с проблемой отсутствия документации по структуре стандартных справочников и карточек. Я сам лично довольно долго мучился в поисках подобной информации, но недавно мне удалось найти очень полезный документ, в котором содержатся описания всех полей стандартных карточек.
Также, благодаря этому документу я выяснил, что у всех стандартных карточек и справочников постоянные идентификаторы, которые не зависят от того, где установлена система. Они тоже приведены в этом файле.
Описание полей стандартных карточек.doc
Также, если кому-то нужна литература по C#, то выкладываю самоучитель: Секунов С.Ю. - Самоучитель С# - 2001.pdf
И также самоучитель по xml: samou4itel_xml.rar
Мы обсуждаем следующие темы: Docsvision, редактирование и создание карточек документов, процесс, написание кода на C#
Темы обсуждений
бизнес-календарь
(2)
бизнес-процесс
(1)
блог
(3)
виды
(2)
дайджест
(1)
дополнительные сборки
(1)
изображение
(1)
карточки
(4)
кнопка
(1)
конструктор
(9)
литература
(1)
навигатор
(1)
настройка представлений
(1)
нумератор
(2)
ошибки
(3)
полезность
(1)
разметки
(2)
роли
(1)
сервер
(1)
сервис
(1)
скрипт
(12)
состояния
(1)
табличный контрол
(3)
уведомления
(1)
attribute
(1)
C#
(11)
DevExpress
(1)
DVCardManager
(2)
DVExplorer
(1)
HowTo
(18)
property
(3)
xml
(1)
XSLT
(1)
Поиск блогу
среда, 11 мая 2011 г.
Описание полей стандартных карточек.
Темы, поднимаемые в сообщении:
карточки,
литература,
полезность
Новости блога. Дополнительные возможности при просмотре блога.
Благодаря нововведениям платформы Blogger, наш блог теперь можно просматривать в различных видах, используя страницу видов. Ссылка на данную страницу теперь всегда доступна из списка полезных ссылок справа.
Подробнее об этой фиче можно почитать тут.
Также я добавил возможность подписки на новые сообщения в блоге. Для того, чтобы подписаться, достаточно ввести свой адрес электронной почты в форму, которая находится внизу меня справа. Не забудьте подтвердить подписку, перейдя по ссылке, которую вы получите в письме сразу после ввода адреса почты.
Подробнее об этой фиче можно почитать тут.
Также я добавил возможность подписки на новые сообщения в блоге. Для того, чтобы подписаться, достаточно ввести свой адрес электронной почты в форму, которая находится внизу меня справа. Не забудьте подтвердить подписку, перейдя по ссылке, которую вы получите в письме сразу после ввода адреса почты.
четверг, 10 марта 2011 г.
Добавление пользовательского свойства карточки в представление
Новые карточки создаются изначально на свойствах, позже, конечно, карточку переводят на поля для удобства работы с ней, но не всегда полностью. Также, если Вы создали новый вид стандартной карточки и напичкали ее пользовательскими свойствами, то скорее всего встанет проблема доступа к ним.
Посмотрим, как можно обратиться к такому свойству при настройке представлений.
Пусть у нас есть карточка договора, настроенная как дополнительный вид входящего документа через справочник типов. В карточке договора используется часть полей из карточки входящего документа (Тема, дата создания и пр.), но также имеются пользовательские свойства (Примечание, сумма договора, сумма аванса, контрагент и его адрес и тд.). Задача усложняется, если пользовательские настройки вида содержат табличный контрол.
В примере Договора в табличном контроле 2 столбца: Контрагент и его адрес.

Задача: вывести в представлении фамилию контрагента. Вот так:

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

P.S. Если есть проблема с добавлением простого (не табличного) пользовательского свойства в представление, дайте знать в комментах. В таком случае напишу и про них.
Посмотрим, как можно обратиться к такому свойству при настройке представлений.
Пусть у нас есть карточка договора, настроенная как дополнительный вид входящего документа через справочник типов. В карточке договора используется часть полей из карточки входящего документа (Тема, дата создания и пр.), но также имеются пользовательские свойства (Примечание, сумма договора, сумма аванса, контрагент и его адрес и тд.). Задача усложняется, если пользовательские настройки вида содержат табличный контрол.
В примере Договора в табличном контроле 2 столбца: Контрагент и его адрес.
Задача: вывести в представлении фамилию контрагента. Вот так:
Сначала делаем все, как и при обычном создании представления: создаем представление, добавляем колонки.
Затем нужно сделать следующие присоединения:
1.
Привязываем свойство с названием "Контрагент", принадлежащее данной карточке (InstanceID)
2.
Не очевидная привязка выбранных значений. Нужна, так как столбец табличного контрола представляет собой массив. После этого в после "Выбранное значение" будут находиться идентификаторы контрагентов
3.
Получение по Идентификатору из выбранного значения информации о контрагенте.
После перечисленных привязок можно сделать присвоение колонке значения поля Фамилия из привязанной карточки контрагентов:
P.S. Если есть проблема с добавлением простого (не табличного) пользовательского свойства в представление, дайте знать в комментах. В таком случае напишу и про них.
Темы, поднимаемые в сообщении:
настройка представлений,
HowTo,
property
воскресенье, 6 марта 2011 г.
Смена состояния карточки из скрипта
На первый взгляд простое задание - сменить состояние карточки из скрипта. Вроде и у карточки стандартная кнопка для смены состояния есть, но и тут не обходится без бубна.
На данный момент простого способа сменить состояние из скрипта я не нашел. Единственный способ требует знания гуида конечного состояния. Данный идентификатор не доступен ни в одном из стандартных справочником и контекстных меню, поэтому приходится идти в обход.
Создаем строковый контрол на карточке. Затем на какую-нибудь кнопку ставим команду, записывающую в этот котрол значение из DomainObject.StateManager.CurrentStateId. (В моем случае по какой-то причине на активацию карточки поставить не удалось, только на кнопку или команду меню). Сохраняем карточку, закрываем конструктор.
Открываем карточку в навигаторе, прогоняем состояние карточки стандартной кнопкой "Сменить состояние" до нужного состояния и выполняем скрипт, записывающий состояние в строку. Вот он наш искомый гуид.
Далее в конструкторе в нужном Вам месте пишем:
Вместо "fce438e8-d38c-4552-86d0-36d464920265" конечно же нужно поставить нужный гуид.
P.S. Я полагаю, что возможно как-то менять состояние карточки проще, используя команду DomainObject.ChangeCardState(StateMachineBranch branch), но я так и не смог понять, как ей пользоваться. Если кто-то разберется, то очень хотел бы получить совет в комментах.
На данный момент простого способа сменить состояние из скрипта я не нашел. Единственный способ требует знания гуида конечного состояния. Данный идентификатор не доступен ни в одном из стандартных справочником и контекстных меню, поэтому приходится идти в обход.
Создаем строковый контрол на карточке. Затем на какую-нибудь кнопку ставим команду, записывающую в этот котрол значение из 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();
Темы, поднимаемые в сообщении:
изображение,
скрипт,
C#,
HowTo
четверг, 24 февраля 2011 г.
Работа блога
Думаю, что все заметили раздел "Полезные ссылки".
Он будет время от времени дополняться. Сегодня была добавлена ссылка на довольно обширную базу знаний о DocsVision от компании-партнера TeamLead.
Также существует страница с частыми вопросами по работе блога: FAQ. К ней в комментариях можно оставлять свои вопросы по работе блога и его настройкам. Также там можно оставлять свои пожелания по добавлению/изменению/удалению каких-то функций в блоге.
Он будет время от времени дополняться. Сегодня была добавлена ссылка на довольно обширную базу знаний о DocsVision от компании-партнера TeamLead.
Также существует страница с частыми вопросами по работе блога: FAQ. К ней в комментариях можно оставлять свои вопросы по работе блога и его настройкам. Также там можно оставлять свои пожелания по добавлению/изменению/удалению каких-то функций в блоге.
вторник, 22 февраля 2011 г.
DVCardManager
Недавно столкнулся с проблемой, что не мог загрузить библиотеку в базу при помощи CardManager.
При более детальном рассмотрении выяснилось, что для нормальной работы структура локальной базы должны соответствовать структуре базы на сервере, т.е. должна иметь те же системные библиотеки.
Следовательно, кроме "тестовой" должны быть добавлены следующие библиотеки:
.
После этого будут работать функции Update Database и Upload Library.
При более детальном рассмотрении выяснилось, что для нормальной работы структура локальной базы должны соответствовать структуре базы на сервере, т.е. должна иметь те же системные библиотеки.
Следовательно, кроме "тестовой" должны быть добавлены следующие библиотеки:
После этого будут работать функции Update Database и Upload Library.
понедельник, 21 февраля 2011 г.
Вывод значения нумератора в дайджест
Иногда нужно вывести значения из нумератора в дайджест. Например, нужно вывести регистрационный номер документа.
На данный момент не удастся обойтись без создания дополнительного контрола. Нужно добавить новый строчный контрол на форму и сделать его невидимым.
Далее, если, например, вы пользуетесь кодом, опубликованным в этом посте, для автоматической генерации номера, то в конец скрипта нужно добавить всего одну строчку:
В дайджест добавляем что-то вроде этого:
Результат будет выглядеть так:

P.S. Если Вы не используете автоматическое заполнение нумератора, то придется написать еще обращение к нумератору через Mapper и вставить это в AfterActivate
На данный момент не удастся обойтись без создания дополнительного контрола. Нужно добавить новый строчный контрол на форму и сделать его невидимым.
Далее, если, например, вы пользуетесь кодом, опубликованным в этом посте, для автоматической генерации номера, то в конец скрипта нужно добавить всего одну строчку:
PropertyController.UpdateProperty("НомерПрописью",number.Number);// в скрытое поле записываем номер в виде строкиВ дайджест добавляем что-то вроде этого:
Номер:
Результат будет выглядеть так:
P.S. Если Вы не используете автоматическое заполнение нумератора, то придется написать еще обращение к нумератору через Mapper и вставить это в AfterActivate
суббота, 12 февраля 2011 г.
Баг
Ошибка: Создаем несколько разметок для разных видов карточки. При редактировании каждой разметки (добавлении контролов), причем только в случае использования многозакладочности, имена контролам могут присвоиться одинаковые для разных разметок. КР сначала не видит ошибку. Но при закрытии КР и повторном входе выдает ошибку о нескольких контролах с одинаковым именем.
Способ решения: при добавлении контролов в разные разметки карточки нужно не допускать совпадания имен контролов, иначе карточка станет недоступна для редактирования. При перезагрузке КР и навигатора карточка загружается без последних изменений.
Способ решения: при добавлении контролов в разные разметки карточки нужно не допускать совпадания имен контролов, иначе карточка станет недоступна для редактирования. При перезагрузке КР и навигатора карточка загружается без последних изменений.
Темы, поднимаемые в сообщении:
конструктор,
ошибки,
разметки
Продолжение рассмотрения пространства имен BusinessCalendar.
Пару постов назад я начал писать про пространство имен DocsVision.BackOffice.Model.BusinessCalendar.Entities. Упоминал, что в нем содержатся 2 перечислимых типа DayType и TimeType.
Для справки: Перечислимый тип - это тип данных, переменные которого могут принимать значения заранее заданные пользователем. Например, можно создать тип "Animals", и возможными значениями у этого типа сделать "Horse, Pig, Cat, Dog, Cow". Тогда переменная типа Animals сможет принять значение Animals.Horse или, к примеру, Animals.Cat.
Ниже приведу значения для типов DayType и TimeType.
Для справки: Перечислимый тип - это тип данных, переменные которого могут принимать значения заранее заданные пользователем. Например, можно создать тип "Animals", и возможными значениями у этого типа сделать "Horse, Pig, Cat, Dog, Cow". Тогда переменная типа Animals сможет принять значение Animals.Horse или, к примеру, Animals.Cat.
Ниже приведу значения для типов DayType и TimeType.
- DayType
- Holiday
- NonWorking
- Working
- TimeType
- Work
- NotWork
Подписаться на:
Сообщения (Atom)