using System; using System.Windows.Forms; using DocsVision.Platform.ObjectManager; using DocsVision.BackOffice.View.WinForms; using DocsVision.BackOffice.Model; using DocsVision.BackOffice.Model.Layouts.DataAccess; using DocsVision.BackOffice.Model.Base.Entities; using DocsVision.BackOffice.Model.CardProperties.Entities; using DocsVision.BackOffice.Model.Layouts.Entities; using DocsVision.BackOffice.Model.RoleModel.DataAccess; using DocsVision.BackOffice.Model.RoleModel.Entities; using DocsVision.BackOffice.View.WinForms.Helpers; private void cardControl_AfterActivate(System.Object sender, System.EventArgs e) { CardProperty prop = GetCardProperty("имя контрола"); CardPropertyDescription.LayoutAttributeSet attrSet = prop.Description.GetLayoutAttributes(CardControl.DomainObject.SelectedLayoutId); attrSet.ReadOnly = true; PropertyController.Refresh(); } //Поиск контрола с нужным именем private CardProperty GetCardProperty(string propertyName) { foreach (CardProperty property in PropertyController.CardProperties) { if (property.Name == propertyName) return property; } return null; }
Мы обсуждаем следующие темы: 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)
Поиск блогу
суббота, 21 мая 2011 г.
Смена атрибутов контрола из скрипта. На примере атрибута ReadOnly
Данный скрипт полезен в тех случаях, когда, например, измененное значение одного контрола влияет на доступность другого.
среда, 11 мая 2011 г.
Перезапуск сервисов из командной строки
Думаю, что многие сталкивались с проблемой, что какие-то изменения, внесенные в структуру DV требовали перезапуска серверов, SQL и IIS. На это уходит много времени, так как надо полазать по различным административным менюшкам и покликать много кнопок.
Я предлагаю вариант, когда перезапуск всех служб можно будет делать по двойному клику на ярлык на рабочем столе.
1. создаем новый текстовый файл.
2. в тело пишем
NET stop DVStorageServer45
NET stop WFServer45
NET stop MSSQL$SQLEXPRESS
IISReset
NET start MSSQL$SQLEXPRESS
NET start DVStorageServer45
NET start WFServer45
3. сохраняем файл на рабочий стол под именем Reset.bat и в свойствах файла выставляем "Запускать от имени Администратора". Иногда для этого приходится создать ярлык на этот батник и в его свойствах поставить запуск от имени администратора.
4. наслаждаемся перезапуском в один клик.
P.S. Возможно, что SQL сервер у вас называется не SQLEXPRESS. В таком случае либо просто удалите из батника строку перезапуска SQL (Обычно такой перезапуск не требуется), либо впишите свое название сервера.
Я предлагаю вариант, когда перезапуск всех служб можно будет делать по двойному клику на ярлык на рабочем столе.
1. создаем новый текстовый файл.
2. в тело пишем
NET stop DVStorageServer45
NET stop WFServer45
NET stop MSSQL$SQLEXPRESS
IISReset
NET start MSSQL$SQLEXPRESS
NET start DVStorageServer45
NET start WFServer45
3. сохраняем файл на рабочий стол под именем Reset.bat и в свойствах файла выставляем "Запускать от имени Администратора". Иногда для этого приходится создать ярлык на этот батник и в его свойствах поставить запуск от имени администратора.
4. наслаждаемся перезапуском в один клик.
P.S. Возможно, что SQL сервер у вас называется не SQLEXPRESS. В таком случае либо просто удалите из батника строку перезапуска SQL (Обычно такой перезапуск не требуется), либо впишите свое название сервера.
Скрипт смены состояния карточки из бизнес-процесса
К сожалению, стандартными процедурами бизнес-процесса невозможно изменить состояние карточки. Для изменения состояния нужно поставить элемент "Скрипт" и написать в нем код, представленный ниже.
Важно помнить о следующей структурной особенности состояний: они различны у каждого вида карточки, поэтому сначала надо получать текущий вид карточки, а затем выбирать соответствующее ему состояние.
Важно помнить о следующей структурной особенности состояний: они различны у каждого вида карточки, поэтому сначала надо получать текущий вид карточки, а затем выбирать соответствующее ему состояние.
// подключение системных библиотек using System; using System.Xml; // подключение библиотек СУБП using DocsVision.Workflow.Objects; using DocsVision.Workflow.Runtime; using DocsVision.Workflow.Gates; using DocsVision.Platform.HelperAPI; using DocsVision.Platform.ObjectManager; namespace DVScriptHost { class DVScript { // стандартная функция, которая будет вызвана подсистемой СУБП // // входные параметры функции: // // process - информация о процессе. содержит коллекции // Gates - коллекция шлюзов процесса // Variables - коллекция переменных процесса // passInfo - информация о текущем проходе // private string state = "Согласование с контрагентом"; //Название состояния, в которое мы хотим перевести карточку private DVGate m_DVGate; public void Execute (DocsVision.Workflow.Runtime.ProcessInfo process, PassState passInfo) { try { //Получаем ссылку на карточку, у которой надо сменить состояние. В данном случае она хранится в переменной процесса, которая называется "Инициирующий договор" ProcessVariable pvCard = process.GetVariableByName("Инициирующий договор"); DVCard dvCard = (DVCard)pvCard.Value; //получаем шлюз m_DVGate = (DVGate)process.Gates[DVGate.GateID]; // получаем сессию UserSession oSes = m_DVGate.Session; //Получаем данные карточки CardData card = oSes.CardManager.get_CardData(dvCard.ID); //Получаем ссылку на секцию "Основная информация". Так как карточка стандартная, то гуид берем из справочника в предыдущем посте. В противном случае - из DVExplorer. SectionData mainInfo = card.Sections["8C77892A-21CC-4972-AD71-A9919BCA8187"]; //Получаем ссылку на справочник типов. Гуид берем из справочника в предыдущем посте. CardData RefTypes = oSes.CardManager.get_DictionaryData("BE14D55D-92B7-4345-AD10-32588981F83D"); //Получаем тип карточки из справочника типов RowData currentType = RefTypes.Sections["49AD5A2D-17EC-46E2-A49E-C58D0BBD9C1A"].Rows[mainInfo.FirstRow.get_Value("Type")]; //Устанавливаем состояние карточки, найдя его по имени и в соответствии с типом карточки mainInfo.FirstRow.set_Value("DocState", currentType.ChildRows.GetItemByValue("Name", state).ID); } catch (Exception ex) { // запись в журнал ошибки исполнения process.LogMessage("Ошибка выполнения скрипта:" + ex.Message); } return; } } }
Темы, поднимаемые в сообщении:
бизнес-процесс,
скрипт,
состояния,
C#,
HowTo
Описание полей стандартных карточек.
Думаю, что многие из вас сталкивались с проблемой отсутствия документации по структуре стандартных справочников и карточек. Я сам лично довольно долго мучился в поисках подобной информации, но недавно мне удалось найти очень полезный документ, в котором содержатся описания всех полей стандартных карточек.
Также, благодаря этому документу я выяснил, что у всех стандартных карточек и справочников постоянные идентификаторы, которые не зависят от того, где установлена система. Они тоже приведены в этом файле.
Описание полей стандартных карточек.doc
Также, если кому-то нужна литература по C#, то выкладываю самоучитель: Секунов С.Ю. - Самоучитель С# - 2001.pdf
И также самоучитель по xml: samou4itel_xml.rar
Также, благодаря этому документу я выяснил, что у всех стандартных карточек и справочников постоянные идентификаторы, которые не зависят от того, где установлена система. Они тоже приведены в этом файле.
Описание полей стандартных карточек.doc
Также, если кому-то нужна литература по C#, то выкладываю самоучитель: Секунов С.Ю. - Самоучитель С# - 2001.pdf
И также самоучитель по xml: samou4itel_xml.rar
Темы, поднимаемые в сообщении:
карточки,
литература,
полезность
Новости блога. Дополнительные возможности при просмотре блога.
Благодаря нововведениям платформы Blogger, наш блог теперь можно просматривать в различных видах, используя страницу видов. Ссылка на данную страницу теперь всегда доступна из списка полезных ссылок справа.
Подробнее об этой фиче можно почитать тут.
Также я добавил возможность подписки на новые сообщения в блоге. Для того, чтобы подписаться, достаточно ввести свой адрес электронной почты в форму, которая находится внизу меня справа. Не забудьте подтвердить подписку, перейдя по ссылке, которую вы получите в письме сразу после ввода адреса почты.
Подробнее об этой фиче можно почитать тут.
Также я добавил возможность подписки на новые сообщения в блоге. Для того, чтобы подписаться, достаточно ввести свой адрес электронной почты в форму, которая находится внизу меня справа. Не забудьте подтвердить подписку, перейдя по ссылке, которую вы получите в письме сразу после ввода адреса почты.
Подписаться на:
Сообщения (Atom)