RSS Подписка на статьи RSS Подписка на комментарии Панель инструментов

Блог профессионалов стал частью сайта технической поддержки DocsVision http://support.docsvision.com. Новые материалы будут появляться уже на этом сайте.

Поиск

Ярлыки

авто генерация кода (1) Администрирование DocsVision (60) Атрибутивный поиск (3) База данных (24) Базы знаний (1) Безопасность (1) Бизнес-процессы (20) Блог (2) Вы увидите это первыми (1) Групповые политики (1) Диаграммы (2) Задания (2) Интеграция (2) Карточки DocsVision (14) Конструктор Решений (11) Маркетинг и продажи (4) Навигатор (3) Новое (3) Новости (32) Опрос (4) Опросы DocsVision (4) Оптимизация (3) Отчеты (2) Ошибки (1) Поддержка (14) Полезные ссылки (1) Представления (4) Производительность (5) Разбор полетов (18) Разработка для Workflow (7) разработка карточек (2) Разработка на платформе DocsVision (41) Разработка решений (43) Расширение платформы (1) Расширенные отчеты (9) Решения на платформе DocsVision (6) Сервисы DocsVision (3) Сканеры (3) Справочник сотрудников (1) Справочник типов (1) Установка (1) Утилиты (13) Шлюз в SharePoint (8) Штрихкод (2) Cкрипты карточек (7) DocsVision внутри (1) DocsVision Live (1) FileStream (1) FireFox (2) Opera (1) Powershell (5) Safari (1) SharePoint2007 (1) SharePoint2010 (2) Silverlight (1) UltraViews (1) Vista (1)

Програмное выделение номера в карточках конструктора решений

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

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


Обработчик события AfterActivate - будет выполнен сразу после открытия карточки.

на С#
// обработчик события AfterActivate - будет выполнен сразу после открытия карточки
private void cardControl_AfterActivate(System.Object sender, System.EventArgs e)
{
// получаем свойство типа "Нумератор". Нужно указать название свойства
var numeratorProperty = GetCardProperty("Регистрационный номер");
// если номер уже задан, то выходим из метода, ничего не делая
if (numeratorProperty.Value != null)
return;
// получаем атрибут правила и его значение (идентификатор)
var ruleAttribute = numeratorProperty.Description.GetAttribute("Rule");
Guid? ruleId = (Guid?)ruleAttribute.Value;
// с помощью преобразователя данных создаем новый номер по правилу
var numeratorMapper = new DocsVision.BackOffice.Model.CardProperties.DataAccess.NumeratorNumberMapper(
Session, CardData.Id, DomainObject.NumbersSectionId.Value);
var number = numeratorMapper.Create(ruleId.Value);
// устанавливаем новое значение свойства
numeratorProperty.Value = number;
// обновляем элементы карточки, чтобы отобразить новое значение
RefreshControls();
}

// вспомогательный метод поиска элемента по названию
private CardProperty GetCardProperty(string propertyName)
{
foreach (CardProperty property in PropertyController.CardProperties)
{
if (property.Name == propertyName)
return property;
}
return null;
}

Vb.net

Private Sub cardControl_AfterActivate(sender As System.Object, e As System.EventArgs)
 
  ' получаем свойство типа "Нумератор"
  Dim numeratorProperty AS DocsVision.BackOffice.Model.CardProperties.Entities.CardProperty  = GetCardProperty("Регистрационный номер")
  ' если номер уже задан, то выходим из метода, ничего не делая

  If numeratorProperty.Value IsNot Nothing Then
   Return
  End If
  ' получаем атрибут правила и его значение (идентификатор)
  Dim ruleAttribute as DocsVision.BackOffice.Model.Layouts.Entities.PropertyAttribute = numeratorProperty.Description.GetAttribute("Rule")
  
  Dim ruleId As System.Nullable(Of Guid) = CType(ruleAttribute.Value, System.Nullable(Of Guid))
  ' с помощью преобразователя данных создаем новый номер по правилу
  Dim numeratorMapper as DocsVision.BackOffice.Model.CardProperties.DataAccess.NumeratorNumberMapper  = New DocsVision.BackOffice.Model.CardProperties.DataAccess.NumeratorNumberMapper(me.Session, CardData.Id, DomainObject.NumbersSectionId.Value)
  Dim number as DocsVision.BackOffice.Model.CardProperties.Entities.NumeratorNumber  = numeratorMapper.Create(ruleId.Value)
  ' устанавливаем новое значение свойства
  numeratorProperty.Value = number
  ' обновляем элементы карточки, чтобы отобразить новое значение

  me.PropertyController.RefreshControls
  
    End Sub


 ' вспомогательный метод поиска элемента по названию
 Private Function GetCardProperty(propertyName As String) As DocsVision.BackOffice.Model.CardProperties.Entities.CardProperty 
  For Each [property] As DocsVision.BackOffice.Model.CardProperties.Entities.CardProperty In PropertyController.CardProperties
   If [property].Name = propertyName Then
    Return [property]
   End If
  Next
  Return Nothing
 End Function
Читать дальше

0 коммент.:

Отправить комментарий