Часто задаваемые вопросы
- Каким образом получить родительский объект имея подчиненный?
-
Для этого предназначен метод
ObjectHelper.GetParent
.
Document document = ObjectHelper.GetParent<Document>(documentFile); (1)
1 | documentFile — файл (тип DocumentFile ) искомого документа.
|
ICustomizableControl control = CardControl;
ILayoutPropertyItem layoutItem = control.FindPropertyItem<ILayoutPropertyItem>("Theme"); (1)
layoutItem.ControlValue = "Новое значение"; (2)
layoutItem.Commit(); (3)
1 | Получение элемента управления. |
2 | Установка нового значения. |
3 | Сохранение. |
Название элемента можно посмотреть в Конструкторе разметок.
- Пример работы с Docsvision из Powershell
-
В приведенном ниже примере, создаётся скрипт, выполняющий подключение к серверу Docsvision, и получение номера из карточки Нумератора.
Add-Type -Path с:\DocsVision.Platform.dll
Add-Type -Path с:\DocsVision.Platform.ObjectManager.dll (1)
$connectionString = "ConnectAddress=http://docsvision.domain.com/DocsVision/StorageServer/StorageServerService.asmx" (2)
$sessionManager = [DocsVision.Platform.ObjectManager.SessionManager]::CreateInstance($connectionString)
$userSession = $sessionManager.CreateSession()
[GUID]$numeratorCardID = "00000000-0000-0000-0000-000000000000" (3)
[DocsVision.Platform.ObjectManager.SystemCards.NumeratorCard]$numeratorCard = $userSession.CardManager.GetCard($numeratorCardID)
[GUID]$outId = [GUID]::Empty
$number = $numeratorCard.Zones[0].GetNumber([GUID]::Empty, 1, [ref] $outId); (4)
write $number (5)
1 | Требуется указать действительный путь к используемым библиотекам Docsvision. |
2 | Требуется указать действительный адрес подключения к Docsvision. |
3 | Требуется передать действительный адрес Нумератора. |
4 | Получение номера из первой зоны нумерации. |
5 | Вывод полученного номера. |
Аналогичная задача может быть решена без объектной модели — прямым обращением к сервису Docsvision
$serverUri = "http://docsvision.domain.com/DocsVision/StorageServer/StorageServerService.asmx" (1)
[GUID]$numeratorCardID = "00000000-0000-0000-0000-000000000000"
$zoneName = "Zone" (2)
$result = 0
[GUID]$numberId = [GUID]::Empty
[GUID]$userID = [GUID]::Empty
$client = New-WebServiceProxy -Uri $serverUri"?WSDL" -UseDefaultCredential
[GUID]$sessionId = $client.SessionLogin("","", [ref]$result) (3)
$number = $client.NumGetFirstFree($sessionId, $numeratorCardID, $zoneName, $userID, [ref]$numberId) (4)
1 | Адрес сервиса Docsvision. |
2 | Идентификатор карточки нумератора и название зоны, в которых будет резервироваться номер. |
3 | Открытие сессии. |
4 | Получение номера. |
Полное описание методов сервиса приведено в разделе Методы веб-сервиса Docsvision. |
- Как узнать идентификатор карточки
-
Узнать идентификатор существующий карточки можно несколькими способами:
-
Посмотреть в Windows-клиенте — идентификатор карточки отображается в её свойствах.
-
Используя утилиту Docsvision Explorer, входящей в Resource Kit — идентификатор карточки отображается в поле
Selected card ID
.
-
- Получить идентификатор созданной карточки, используя объектную модель
-
Для получения идентификатора объекта (например, объект document типа
DocsVision.BackOffice.ObjectModel.Document)
можно воспользоваться методомObjectContext.GetObjectRef(ObjectBase)
:
Guid id_document = objectContext.GetObjectRef(document).Id;
или так (начиная с НО9):
Guid id_document = document.GetObjectId();
Корректный идентификатор нового объекта может быть получен только после сохранения объекта в контексте объектов. |
- Получить отображаемое имя текущего сотрудника
StaffEmployee currentEmployee = objectContext.GetService<IStaffService>().GetCurrentEmployee();
string displayName = currentEmployee.DisplayName;
- Получить карточку сотрудника по его идентификатору (id_empl)
StaffEmployee staffEmployee = staffService.Get(new Guid("id_empl"));
- Считывание данных с элемента управления типа коллекция, например "Сотрудники"
-
Для сотрудников, в
ControlValue
соответствующего элемента управления содержится коллекция идентификатором выбранных сотрудников —IEnumerable<Guid>
. Для записи, вControlValue
передается массив таких идентификаторов (Guid[]
). - Доступ к значению поля
int? result = userSession.CardManager.GetCardData(cardID).Sections[sectionID].FirstRow.GetInt32(fieldAlias); (1)
1 | cardID — идентификатор карточки; sectionID — идентификатор секции; fieldAlias — псевдоним поля. |
С точки зрения доступа, динамические поля не отличаются от статических, поэтому получение значения такого поля может выглядеть следующим образом
Guid cardID = new Guid("00000000-0000-0000-0000-000000000000"); (1)
string sectionAlias = "DynSection"; (2)
string fieldAlias = "DynField"; (3)
CardType type = userSession.CardManager.GetCardData(cardID).Type; (4)
Guid sectionID = type.Sections[sectionAlias].Id; (5)
int? result = userSession.CardManager.GetCardData(cardID).Sections[sectionID].FirstRow.GetInt32(fieldAlias); (6)
Document document = objectContext.GetObject<Document>(cardID); (7)
result = (((BaseCardSectionRow)document.GetSection(sectionID)[0])[fieldAlias] as int?);
1 | Идентификатор карточки. |
2 | Название динамической секции. |
3 | Название динамического поля. |
4 | Получение типа карточки. |
5 | Получение идентификатора. |
6 | Получение значения поля через старую объектную модель. |
7 | Или даже так, если через новую объектную модель.
|