Регистрация

Как получить данные, не зная названия таблицы

Вопросы, связанные с разработкой дополнительных справочников, карточек и т.п. на базе DocsVision

Модератор: Модераторы форума

Новичок
Сообщения: 1
Зарегистрирован: 20 фев 2018, 16:45

Как получить данные, не зная названия таблицы

Сообщение edvardpotter » 22 фев 2018, 11:22

Здравствуйте.

Есть код на событии карточки:
Код: Выделить всё
SectionData sect = CardData.Sections[new Guid("30eb9b87-822b-4753-9a50-a1825dca1b74")]; // Получаем ID секции "Основная информация"
RowData row = sect.GetRow(new Guid("00c18e16-768c-498b-99b0-9826e2b0361f")); // Получаем ID строки секции "Основная информация"
String field = row["Author"].ToString(); // Получаем значение поля в строке с псевдонимом "Author"


В поле храниться ID на автора карточки
Вопрос:
Получив ID автора карточки, как можно получить самого автора средствами api, без прямого доступа к бд?
Возможно ли это сделать не зная в какой таблице хранятся авторы\пользователи\сотрудники?

Опытный
Аватара пользователя
Сообщения: 130
Зарегистрирован: 15 апр 2014, 00:02

Re: Как получить данные, не зная названия таблицы

Сообщение bax_tang » 24 фев 2018, 04:08

Если это код на событии карточки, и Вы его пишете в Конструкторе сценариев (он же Конструктор скриптов), то у Вас доступен контекст объектов DocsVision через CardControl.ObjectContext. Тогда это будет выглядеть как-то так:

Код: Выделить всё
using DocsVision.Platform.ObjectModel;
using DocsVision.BackOffice.ObjectModel;
using DocsVision.BackOffice.ObjectModel.Services;

// .....

SectionData mainInfoSection = CardData.Sections[CardData.Type.Sections["MainInfo"].Id];
RowData mainInfo = mainInfoSection.FirstRow;

Guid authorId = mainInfo.GetGuid("Author").GetValueOrDefault();

IStaffService staffService = CardControl.ObjectContext.GetService<IStaffService>();
StaffEmployee author = staffService.Get(authorId); // ba-dum-tss


Кроме того, если Вы разрабатываете под платформу 5.х, то доступ к автору документа можно получить намного быстрее и проще, используя "новую" объектную модель вместо "старой":

Код: Выделить всё
using DocsVision.BackOffice.ObjectModel;

// ....

Document currentDocument = CardControl.BaseObject as Document;
StaffEmployee author = currentDocument.MainInfo.Author; // ta-daa

// если Вам нужно получить автора документа внутри кода карточки другого типа (например, в задании), то:

Guid documentId = ...; // получаем Guid нужной карточки документа
Document document = CardControl.ObjectContext.GetObject<Document>(documentId); // получаем сам документ
StaffEmployee author = document.MainInfo.Author; // ta-daa
С уважением, Калинов Дмитрий,
Mercury Development LLC, Самара

Новичок
Сообщения: 1
Зарегистрирован: 04 май 2018, 12:40
Откуда: Санкт-Петербург

Re: Как получить данные, не зная названия таблицы

Сообщение vazonov44 » 04 май 2018, 13:43

Интересное решение.

Вернуться в Разработка на платформе Docsvision

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1