При создании сложной системы может потребоваться связывать карточки, т.е. сделать так, чтобы одна карточка, порождала другие, а при удалении главной карточки, карточки, связанные с ней удалялись тоже.
Например, создается карточка Проблемы (родительская), а к ней должна быть прикреплена карточка Решения (дочерняя).
Для этого необходимо следующее:
1. Создать в схеме данных карточки новое поле, которое будет представлять собой ссылку на карточку (refcardid) и в типе ссылки указать "Hard".
2. Положить на форму контрол карточки и привязать его к созданному полю (CardLink).
Данный метод можно использовать и с табличным контролом, привязав столбец к настроенному подобным образом полю в табличной секции карточки.
Мы обсуждаем следующие темы: 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)
Поиск блогу
Показаны сообщения с ярлыком конструктор. Показать все сообщения
Показаны сообщения с ярлыком конструктор. Показать все сообщения
пятница, 7 октября 2011 г.
четверг, 21 июля 2011 г.
Изменение вида карточки
Предположим, что на карточке лежит контрол "Вид".
Опытным путем я установил, что при изменении значения в нем, само изменение вида карточки происходит уже после события ControlValueChanged.
Это означает то, что при написании ControlValueChanged для этого контрола нужно использовать PropertyController.GetPropertyValue("НазваниеКонтролаВида") вместо DomainObject.KindId, чтобы получить в скрипте новое значение вида.
Опытным путем я установил, что при изменении значения в нем, само изменение вида карточки происходит уже после события ControlValueChanged.
Это означает то, что при написании ControlValueChanged для этого контрола нужно использовать PropertyController.GetPropertyValue("НазваниеКонтролаВида") вместо DomainObject.KindId, чтобы получить в скрипте новое значение вида.
вторник, 12 июля 2011 г.
Скрипт на привязку карточки с табличному контролу.
Всем привет :-)
В одну из составляющих моей разработки решения"Управление совещаниями", входит объединение всех трёх карточек в единую работающую систему. Для этого мне требуется написать несколько скриптов на событие AddButtonClick табличного контрола. Мои познания в ООП находятся на уровне основных понятий, поэтому самостоятельно выполнить поставленную задачу будет крайне трудно, и если уважаемые разработчики помогут мне с преодолением этой проблемы, я буду им очень благодарен за проявленное содействие в достижении личных и организационных успехов.
Итак, задача:
В основной карточке "Совещание" ( Card 1 ) в таблице с вопросами повестки, при нажатии на добавить "+", должна появляться новая карточка "Вопросы повестки" ( Card 2 ). Так же, при каждом нажатии на добавить "+" карточка должна обновляться.

{
object newCard = Session.CardManager.CreateCard(new Guid("{5763AAF2-BF9B-4373-AF1B-6360EF4A2FFA}"));
}
но при загрузке карточки он выдаёт ошибку, что "Данный метод не поддерживается".
Вопрос : Какой скрипт будет выполнять поставленную задачу?
Спасибо)
Темы, поднимаемые в сообщении:
карточки,
конструктор,
табличный контрол
четверг, 30 июня 2011 г.
Как подключать сборки в конструкторе DocsVision
Рано или поздно придется столкнуться с подключением сборок в конструкторе.
Находятся все сборки по пути Windows/assembly/GAC_MSIL
Каталог скрытый, поэтому для доступа к нему через эксплорер необходимо включить отображение скрытых файлов и папок в свойствах папки.
Каждая сборка лежит в отдельной папке, поэтому подключать их придется по одной.
Из-за особенностей Конструтора у вас не получится подключить сборки сразу из assembly, поэтому скопируйте сначала нужные сборки в отдельную папку и уже оттуда подключайте. Но лучше удалить из GAC_MSIL скрытый файл "Desktop.ini". После этого папки со сборками станут видны из конструктора и их не придется никуда копировать. Также одном из плюсов данного способа является тот факт, что при переносе решения на другую машину, вам не придется заново прописывать пути к сборкам.
Для подключения сборки кликните на "+" в нижней таблице "Используемые дополнительные сборки" в окне редактирования скриптов конструктора, выберите нужную сборку и добавьте ее в таблицу.
Находятся все сборки по пути Windows/assembly/GAC_MSIL
Каталог скрытый, поэтому для доступа к нему через эксплорер необходимо включить отображение скрытых файлов и папок в свойствах папки.
Каждая сборка лежит в отдельной папке, поэтому подключать их придется по одной.
Из-за особенностей Конструтора у вас не получится подключить сборки сразу из assembly, поэтому скопируйте сначала нужные сборки в отдельную папку и уже оттуда подключайте. Но лучше удалить из GAC_MSIL скрытый файл "Desktop.ini". После этого папки со сборками станут видны из конструктора и их не придется никуда копировать. Также одном из плюсов данного способа является тот факт, что при переносе решения на другую машину, вам не придется заново прописывать пути к сборкам.
Для подключения сборки кликните на "+" в нижней таблице "Используемые дополнительные сборки" в окне редактирования скриптов конструктора, выберите нужную сборку и добавьте ее в таблицу.
Темы, поднимаемые в сообщении:
дополнительные сборки,
конструктор,
HowTo
Получение данных выделенной строки из таблицы
Вывод выделенной строки оказался весьма нетривиальным заданием.
Данный фрагмент кода выведет в MessageBox содержимое выделенной строки в табличном контроле с названием "Журнал заявки".
Для работы скрипта нужно прописать в using:
Возможно, что-то еще...
а также подключить сборки DevExpress. А именно
DevExpress.XtraLayout.9.2.dll
DevExpress.XtraGrid.9.2.dll
DevExpress.Data.9.2.dll
DevExpress.Utils.9.2.dll
Данный фрагмент кода выведет в MessageBox содержимое выделенной строки в табличном контроле с названием "Журнал заявки".
LayoutHelper layoutHelper = new LayoutHelper(CardControl.LayoutControl, CardControl.BarManager, Session, CardData.Type.Id);
DocsVision.BackOffice.View.WinForms.LayoutItems.ICustomPropertyItem propertyItem = layoutHelper.GetCustomPropertyItem("Журнал заявки");
var refMapper = new CardPropertyDescriptionMapper(Session);
DocsVision.BackOffice.Model.CardProperties.Entities.CardPropertyTable cpt = null;
foreach (DocsVision.BackOffice.Model.Layouts.Entities.CardPropertyTableDescription refPropertyTableDesc in refMapper.FindTableProperties(CardData.Type.Id))
{
if (refPropertyTableDesc.Name == "Журнал заявки")
{
var propertyMapper = new CardPropertyMapper(Session, CardData.Id, DomainObject.CustomPropertiesSectionId);
cpt = propertyMapper.FindTable(refPropertyTableDesc);
break;
}
}
System.Reflection.Assembly asm = System.Reflection.Assembly.Load("DocsVision.BackOffice.View, Version=4.5.0.0, Culture=neutral, PublicKeyToken=7148afe997f90519");
Type tableType = asm.GetType("DocsVision.BackOffice.View.WinForms.PropertyControls.TablePropertyControl");
var propInfo = tableType.GetProperty("GridView");
object ooo = propInfo.GetValue(propertyItem.Control, System.Reflection.BindingFlags.NonPublic, null, null, System.Globalization.CultureInfo.InvariantCulture);
DocsVision.BackOffice.View.WinForms.Controls.GridExView gridExView = ooo as DocsVision.BackOffice.View.WinForms.Controls.GridExView;
DevExpress.XtraGrid.Views.Grid.GridView gridView = gridExView as DevExpress.XtraGrid.Views.Grid.GridView;
object key = ((System.Data.DataRowView)gridView.GetFocusedRow()).Row[gridExView.KeyField];
foreach (DocsVision.BackOffice.Model.CardProperties.Entities.CardPropertyTableRow row in cpt.Rows)
{
if (row.Key == (Guid)key)
{
string message = "";
foreach (DocsVision.BackOffice.Model.CardProperties.Entities.CardProperty cellProp in row.Cells)
{
object val = cellProp.Value;
message += val == null ? "null" : val.ToString();
message += " ";
}
MessageBox.Show(message);
}
}
Для работы скрипта нужно прописать в using:
using DocsVision.Platform.WinForms.DataSource; using DocsVision.BackOffice.Model.CardProperties.DataAccess;
Возможно, что-то еще...
а также подключить сборки DevExpress. А именно
DevExpress.XtraLayout.9.2.dll
DevExpress.XtraGrid.9.2.dll
DevExpress.Data.9.2.dll
DevExpress.Utils.9.2.dll
Темы, поднимаемые в сообщении:
конструктор,
скрипт,
табличный контрол,
C#,
DevExpress,
HowTo
Добавление новой строки в табличный контрол из скрипта
Оговорю сразу, что данный метод работает, если для табличного контрола создана отдельная секция в карточке, так как добавление происходит через добавление записи в секцию.
Рассмотрим на примере таблицы, содержащей 3 столбца: Дату, идентификатор сотрудника и некоторый текст.
в приведенном скрипте:
secComment - это идентификатор табличной секции(Guid);
comment - какая-то строка(string)
Скрипт записывает текущую дату, пользователя, который открыл карточку в данный момент и некоторый текст.
Рассмотрим на примере таблицы, содержащей 3 столбца: Дату, идентификатор сотрудника и некоторый текст.
в приведенном скрипте:
secComment - это идентификатор табличной секции(Guid);
comment - какая-то строка(string)
Скрипт записывает текущую дату, пользователя, который открыл карточку в данный момент и некоторый текст.
Guid g = Guid.NewGuid();
CardData.Sections[secComment].BeginUpdate();
RowData newComment = CardData.Sections[secComment].CreateRow(g);
newComment.SetString("Текст", comment);
newComment.SetGuid("Автор", new EmployeeMapper(Session).GetCurrentUserId());
newComment.SetDateTime("Дата", DateTime.Now);
CardData.Sections[secComment].EndUpdate();
Темы, поднимаемые в сообщении:
конструктор,
скрипт,
табличный контрол,
HowTo
суббота, 12 февраля 2011 г.
Баг
Ошибка: Создаем несколько разметок для разных видов карточки. При редактировании каждой разметки (добавлении контролов), причем только в случае использования многозакладочности, имена контролам могут присвоиться одинаковые для разных разметок. КР сначала не видит ошибку. Но при закрытии КР и повторном входе выдает ошибку о нескольких контролах с одинаковым именем.
Способ решения: при добавлении контролов в разные разметки карточки нужно не допускать совпадания имен контролов, иначе карточка станет недоступна для редактирования. При перезагрузке КР и навигатора карточка загружается без последних изменений.
Способ решения: при добавлении контролов в разные разметки карточки нужно не допускать совпадания имен контролов, иначе карточка станет недоступна для редактирования. При перезагрузке КР и навигатора карточка загружается без последних изменений.
Темы, поднимаемые в сообщении:
конструктор,
ошибки,
разметки
среда, 9 февраля 2011 г.
Получение типа значения контрола
Часто при считывании значения свойства карточки может возникнуть вопрос о том, какого типа нужно создать переменную для хранения этого значения.
Для того, чтобы узнать тип значения свойства, можно воспользоваться следующим методом:
Для того, чтобы узнать тип значения свойства, можно воспользоваться следующим методом:
MessageBox.Show(PropertyController.GetPropertyValue("ИмяСвойства").GetType().ToString());
В результате при выполнении скрипта будет показано окно сообщения с названием типа выбранного свойства.
Темы, поднимаемые в сообщении:
конструктор,
скрипт,
C#,
HowTo,
property
Вступление
Всем привет!
Вот и возник наш блог) Дизайн и структура возможно будут дорабатываться по мере необходимости.
В данный момент оставлять сообщения и комментарии могут только участники блога, получившие приглашения, и у блога отключена индексация в поисковых системах.
Вот и возник наш блог) Дизайн и структура возможно будут дорабатываться по мере необходимости.
В данный момент оставлять сообщения и комментарии могут только участники блога, получившие приглашения, и у блога отключена индексация в поисковых системах.
Подписаться на:
Сообщения (Atom)