Получение выборки из БД Лоцмана.

Автор Kulikcha, 28.03.23, 00:48:29

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Kulikcha

Добрый день, уважаемые коллеги!

Возможно, вопрос такого вида уже задавался здесь, но я так особо ничего и не нашёл. Есть некий SQL-запрос к таблице базы данных Лоцмана. Возможно ли как-то его выполнить средствами Delphi и API Лоцмана? В справке нашёл только функции подключения к БД, а что дальше делать - пока не пойму. Есть вариант создать хранимую процедуру, а дальше использовать её через GetReport. А возможно ли выполнить запрос и получить данные как-то иначе? Средствами Delphi того же в рамках использования его с Лоцман API. Спасибо заранее.

Если что, сам запрос из себя представляет оператор SELECT. Просто выбрать нужные данные путём соединения нескольких таблиц.

Chaa

GetReport для этого и предназначен.

Еще может помочь поиск (FindObjects), если нужен просто список объектов по каким-нибудь критериям.

Kulikcha

У меня код вот такого вот плана.

SELECT stName FROM dbo.dsOrgUnits WHERE stFullName IN (SELECT stDescription FROM dbo.wfDepartments JOIN dbo.wfRoles ON dbo.wfDepartments.inIdDepartment = dbo.wfRoles.inIdDepartment
JOIN dbo.wfUserRoles ON dbo.wfRoles.inIdRole = dbo.wfUserRoles.inIdRole JOIN dbo.wfActors ON dbo.wfUserRoles.inIdUser = dbo.wfActors.inIdActor
WHERE stDeptName  LIKE '%500%')


Это объединение трёх таблиц. Выбор из базы пользователей Лоцмана некоторой группы, подходящей под заданные условия. Возможно ли для такой ситуации использовать FindObject?
И ещё такой вопрос, с вашего позволения. Если здесь GetReport - единственное, что можно использовать, есть ли какие-нибудь уже встроенные хранимые процедуры, с помощью которых я могу решить эту задачу? Потому что свои собственные процедуры создавать у нас в организации запрещено, а в списке встроенных просто их гигантское количество, а я пока не совсем ориентируюсь в них. Заранее спасибо за ответы.

Chaa

Вам нужен GetRoleTree, и выбрать нужное из датасета.

Kulikcha

Прошу прощения за ещё один вопрос. А что означает входной параметр ret_mode у этой процедуры, который типа tinyint?

Chaa

Это метод сервера приложений Workflow, описан в WorkFlow_API.chm, там же и параметр описан. Метод сервера потом вызывает хранимую процедуру с таким же именем.

Вызывать лучше метод сервера приложений. Если через обычный RunMethod вызываете, то нужно добавлять префикс WF к методам Workflow, то есть будет WFGetRoleTree.

Kulikcha

К сожалению, в указанном файле справки эту информацию найти не получилось. Впрочем, я уже разобрался.

И последний вопрос, который интересует. Какой тип данных(в самом Delphi) представляет датасет, возвращаемый GetReport? В Delphi тоже пока не особо разбираюсь, поэтому спросил, дабы ускорить процесс. Спасибо!

Chaa

Цитата: Kulikcha от 28.03.23, 23:23:23К сожалению, в указанном файле справки эту информацию найти не получилось. Впрочем, я уже разобрался.
Методы сервера приложений -> Управление конфигурацией -> Структура предприятия -> GetRoleTree.

Цитата: Kulikcha от 28.03.23, 23:23:23Какой тип данных(в самом Delphi) представляет датасет, возвращаемый GetReport?
Данные в формате TClientDataSet.
Если используете IPluginCall, то там есть специальный метод GetDataSet.
Подробнее: http://achechulin.blogspot.com/2012/07/dataset.html
Там еще есть про подключение к серверу и плагины, но информация для версии 2014 и ниже.

Kulikcha

Огромное спасибо за полезные и информативные ответы!