|
[Search] Поиск   [Recent Topics] Последние темы   [Hottest Topics] Горячие темы   [Members]  Список участников   [Groups] На главную страницу 
[Register] Регистрация / 
[Login] Вход 
Прошу помощи. Интреграция базы MSSQL и Меркурий через шлюз на Delphi  XML
Индекс форума » Автоматизированная система МЕРКУРИЙ
Автор Сообщение
ladonium


Зарегистрирован: 21/09/2017 20:48:25
Сообщений: 2
Оффлайн

Имеется производственная компания (база на MS SQL)
Задача написать шлюз на Delphi.
Не могу понять с чего начать... прошу помочь.

Создал проект в Delphi, через WDSL Importer подключил "ApplicationManagementService_v1.4_pilot.wsdl"

получил:
unit ApplicationManagementService_v1;
interface
uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns, ApplicationManagementService_v11;
type
ApplicationManagementServicePortType = interface(IInvokable)
['{213A10CA-FD9C-F272-69D2-780E0712873A}']
function submitApplicationRequest(const request: submitApplicationRequest): submitApplicationResponse; stdcall;
function receiveApplicationResult(const request: receiveApplicationResultRequest): receiveApplicationResultResponse; stdcall;
end;
function GetApplicationManagementServicePortType(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): ApplicationManagementServicePortType;
.....................


создал кнопку на форме
procedure TForm1.Button1Click(Sender: TObject);
var
ws: ApplicationManagementServicePortType;
begin
ws := GetApplicationManagementServicePortType();
end;


А вот что дальше с этим делать?
Куда вносить APIKey, ServiceID, IssuerID?
Как обратится к серверу и пройти авторизацию?
Как отправить хоть какой то запрос и увидеть ответ от сервера?

Скиньте, пожалуйста, код на Delphi у кого есть.
my.vetrf-forum


Зарегистрирован: 06/09/2017 17:07:57
Сообщений: 262
Оффлайн

Интересно, делал ли кто нибудь на Дельфе интеграцию...

сначала нужно сформировать запрос, потом использовать
function submitApplicationRequest(const request: submitApplicationRequest): submitApplicationResponse; stdcall;

и передать этот запрос серверу. получить ответ с applicationid. это для начала.
Владимир Игнатов


Зарегистрирован: 02/08/2017 09:19:30
Сообщений: 581
Оффлайн

my.vetrf-forum wrote:Интересно, делал ли кто нибудь на Дельфе интеграцию...

Я сейчас делаю.
Громко матерюсь на невозможность получить изменения справочников городов и нас. пунктов и улиц в городах.

Это сообщение было редактировано 1 раз. Последнее обновление произошло в 22/09/2017 12:26:21

Jupiter


Зарегистрирован: 24/09/2017 19:02:23
Сообщений: 95
Оффлайн

В проекте на Delphi используется "ApplicationManagementService_v1.4_pilot.wsdl".
Подскажите, пожалуйста, как отправить запрос и получить ответ?
Можете скинуть примеры использования функций submitApplicationRequest и receiveApplicationResult?
Владимир Игнатов


Зарегистрирован: 02/08/2017 09:19:30
Сообщений: 581
Оффлайн

Jupiter wrote:В проекте на Delphi используется "ApplicationManagementService_v1.4_pilot.wsdl".
Подскажите, пожалуйста, как отправить запрос и получить ответ?
Можете скинуть примеры использования функций submitApplicationRequest и receiveApplicationResult?

Во-первых, там нужно изменить application_v1.1.xsd, как я писал где-то здесь на форуме http://vetrf.ru/vetrf-forum/posts/list/7130.page#44785
Это только для ApplicationService, для справочников все проще.
Во-вторых, использовать нужно эти:
WSDLs
Сервис обработки заявок к сервису mercury-g2b.service: http://api.vetrf.ru/schema/platform/services/2.0-RC-last/ams-mercury-g2b.service_v2.0_pilot.wsdl
Сервис обработки заявок к сервису mercury-vu.service: http://api.vetrf.ru/schema/platform/services/2.0-RC-last/ams-mercury-vu.service_v2.0_pilot.wsdl
Сервис получения сведений из базовых справочников: http://api.vetrf.ru/schema/platform/services/2.0-RC-last/DictionaryService_v2.0_pilot.wsdl
Сервис получения сведений из реестра хоз.субъектов и предприятий: http://api.vetrf.ru/schema/platform/services/2.0-RC-last/EnterpriseService_v2.0_pilot.wsdl
Сервис получения адресно-справочной информации: http://api.vetrf.ru/schema/platform/services/2.0-RC-last/IkarService_v2.0_pilot.wsdl
Сервис получения сведений из справочников продукции и номенклатуры: http://api.vetrf.ru/schema/platform/services/2.0-RC-last/ProductService_v2.0_pilot.wsdl
Сервис получения сведений из реестра правил регионализации: http://api.vetrf.ru/schema/platform/services/2.0-RC-last/RegionalizationService_v2.0_pilot.wsdl Зависимости
http://api.vetrf.ru/schema/platform/services/2.0-RC-last/application_v1.1.xsd
http://api.vetrf.ru/schema/platform/services/2.0-RC-last/application_ws_definitions_v1.1.xsd
http://api.vetrf.ru/schema/platform/services/2.0-RC-last/ApplicationManagementService_v1.1.wsdl
http://api.vetrf.ru/schema/platform/services/2.0-RC-last/base_v1.1.xsd
http://api.vetrf.ru/schema/platform/services/2.0-RC-last/base_ws_definitions_v1.1.xsd
http://api.vetrf.ru/schema/platform/services/2.0-RC-last/dictionary_v2.0.xsd
http://api.vetrf.ru/schema/platform/services/2.0-RC-last/document_v2.0.xsd
http://api.vetrf.ru/schema/platform/services/2.0-RC-last/mercury-g2b.service_v2.0.wsdl
http://api.vetrf.ru/schema/platform/services/2.0-RC-last/mercury-vu.service_v2.0.wsdl
http://api.vetrf.ru/schema/platform/services/2.0-RC-last/mercury_g2b_applications_v2.0.xsd
http://api.vetrf.ru/schema/platform/services/2.0-RC-last/mercury_vu_applications_v2.0.xsd
http://api.vetrf.ru/schema/platform/services/2.0-RC-last/registry_ws_definitions_v2.0.xsd
Vesta_IT


Зарегистрирован: 16/09/2017 15:07:38
Сообщений: 61
Оффлайн

и вообще наверное удобнее сначала "руками" тестировать в SOAP UI запросы.
сначала синхронные потренируете (пропроще) - со справочниками -
например в ProductServiceBinding сделаете GetProductChangesList с запросом вида



не забудьте авторизацию добавить.

А потом ассинхронный (например запросите список непогашенных входящих документов в ваш адрес)


через ApplicationManagementServiceBinding - submitApplicationRequest делаете запрос типа такого



тут видно куда APIkey и прочее

В ответе вам придет XML с тегом (если все успешно завершится) <applicationId>84c57445-8f5c-4b5f-88e2-26b82b4fc6f5</applicationId>
по этому ИД запросите результат через

receiveApplicationResult запросом вида



мне кажется когда всю цепочку руками так проделать, поразбираться, то легче дальше будет делать (хоть на дельфи хоть в чем)

WSDL берите из пред. поста - нужно же по версии 2 протокола уже наверное все делать

Это сообщение было редактировано 1 раз. Последнее обновление произошло в 25/09/2017 13:15:29

Jupiter


Зарегистрирован: 24/09/2017 19:02:23
Сообщений: 95
Оффлайн

Пытаюсь отправить запрос для метода getRussianEnterpriseList

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ws="http://api.vetrf.ru/schema/cdm/cerberus/enterprise/ws-definitions"
xmlns:base="http://api.vetrf.ru/schema/cdm/base"
xmlns:ent="http://api.vetrf.ru/schema/cdm/cerberus/enterprise"
xmlns:ikar="http://api.vetrf.ru/schema/cdm/ikar">
<soapenv:Header/>
<soapenv:Body>
<ws:getRussianEnterpriseListRequest>
<base:listOptions>
<base:count>2</base:count>
<base:offset>0</base:offset>
</base:listOptions>
<ent:enterprise>
<ent:name>***</ent:name>
</ent:enterprise>
</ws:getRussianEnterpriseListRequest>
</soapenv:Body>
</soapenv:Envelope>

В ответ получаю

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server</faultcode>
<faultstring>BEA-382513: OSB Replace action failed updating variable "body": Error parsing XML: {err}FORG0005: expected exactly one item, got 0 items</faultstring>
<detail>
<con:fault xmlns:con="http://www.bea.com/wli/sb/context">
<con:errorCode>BEA-382513</con:errorCode>
<con:reason>OSB Replace action failed updating variable "body": Error parsing XML: {err}FORG0005: expected exactly one item, got 0 items</con:reason>
<con:location>
<con:path>request-pipeline</con:path>
<con:error-handler>true</con:error-handler>
</con:location>
</con:fault>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>

Подскажите, пожалуйста, что здесь не так?
Vesta_IT


Зарегистрирован: 16/09/2017 15:07:38
Сообщений: 61
Оффлайн

я тестю на 2й версии



так сработало...
(api.vetrf.ru/schema/platform/services/2.0-RC-last/DictionaryService_v2.0_pilot.wsdl)
ladonium


Зарегистрирован: 21/09/2017 20:48:25
Сообщений: 2
Оффлайн

Jupiter wrote:Пытаюсь отправить запрос для метода getRussianEnterpriseList
Подскажите, пожалуйста, что здесь не так?


Процедура на Delphi:

Получается запрос:


И ответ:
Jupiter


Зарегистрирован: 24/09/2017 19:02:23
Сообщений: 95
Оффлайн

Через ApplicationManagementServiceBinding - submitApplicationRequest на https://api2.vetrf.ru:8002/platform/services/ApplicationManagementService отправляю запрос на создание связи между ХС и предприятием:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ws="http://api.vetrf.ru/schema/cdm/application/ws-definitions"
xmlns:app="http://api.vetrf.ru/schema/cdm/application"
xmlns:merc="http://api.vetrf.ru/schema/cdm/mercury/applications"
xmlns:base="http://api.vetrf.ru/schema/cdm/base"
xmlns:com="http://api.vetrf.ru/schema/cdm/argus/common"
xmlns:ent="http://api.vetrf.ru/schema/cdm/cerberus/enterprise"
xmlns:ikar="http://api.vetrf.ru/schema/cdm/ikar">
<soapenv:Header/>
<soapenv:Body>
<ws:submitApplicationRequest>
<ws:apiKey>apikey</ws:apiKey>
<app:application>
<app:serviceId>mercury-g2b.service</app:serviceId>
<app:issuerId>issuerId</app:issuerId>
<app:issueDate>2017-09-10T17:13:00</app:issueDate>
<app:data>
<merc:modifyActivityLocationsRequest>
<merc:localTransactionId>***</merc:localTransactionId>
<merc:initiator>
<com:login>login</com:login>
</merc:initiator>
<merc:modificationOperation>
<ent:type>CREATE</ent:type>
<ent:businessEntity>
<base:guid>issuerId</base:guid>
</ent:businessEntity>
<ent:enterpriseList count="1" total="1" offset="0">
<ent:enterprise>
<base:guid>guid</base:guid>
</ent:enterprise>
</ent:enterpriseList>
</merc:modificationOperation>
</merc:modifyActivityLocationsRequest>
</app:data>
</app:application>
</ws:submitApplicationRequest>
</soapenv:Body>
</soapenv:Envelope>

В ответ на receiveApplicationResult получаю:

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header/>
<env:Body>
<receiveApplicationResultResponse xmlns="http://api.vetrf.ru/schema/cdm/application/ws-definitions">
<application xmlns="http://api.vetrf.ru/schema/cdm/application">
<applicationId>***</applicationId>
<status>REJECTED</status>
<serviceId>mercury-g2b.service</serviceId>
<issuerId>***</issuerId>
<issueDate>2017-09-10T17:13:00.000+03:00</issueDate>
<rcvDate>2017-10-05T16:36:49.000+03:00</rcvDate>
<prdcRsltDate>2017-10-05T16:36:49.000+03:00</prdcRsltDate>
<errors>
<apl:error code="MERC05558" xmlns:apl="http://api.vetrf.ru/schema/cdm/application">Операция не может быть выполнена, так как у пользователя, ответственного за выполнение, отсутствует доступ</apl:error>
</errors>
</application>
</receiveApplicationResultResponse>
</env:Body>
</env:Envelope>

В чем здесь может быть дело? Есть ли в тестовой версии шлюза возможность выполнения данной операции?

Владимир Игнатов


Зарегистрирован: 02/08/2017 09:19:30
Сообщений: 581
Оффлайн

В этом? mercury-g2b.service:2.0
Jupiter


Зарегистрирован: 24/09/2017 19:02:23
Сообщений: 95
Оффлайн

В этом http://api.vetrf.ru/schema/platform/services/2.0-RC-last/ams-mercury-g2b.service_v2.0_pilot.wsdl
Jupiter


Зарегистрирован: 24/09/2017 19:02:23
Сообщений: 95
Оффлайн

Имеет ли инициатор с логином, полученным для доступа к тестовому веб-интерфейсу с ролью ХС, право на выполнение ModifyActivityLocationsOperation в тестовой версии шлюза?
nsnt


Зарегистрирован: 31/05/2017 09:06:10
Сообщений: 242
Оффлайн

Jupiter wrote:
<apl:error code="MERC05558" xmlns:apl="http://api.vetrf.ru/schema/cdm/application">Операция не может быть выполнена, так как у пользователя, ответственного за выполнение, отсутствует доступ</apl:error>

В чем здесь может быть дело? Есть ли в тестовой версии шлюза возможность выполнения данной операции?


Видимо, не нравится логин для initiator. У этого пользователя должны быть права на выполнение операций по api (если другие операции с таким логином уже получались, то права есть, если нет - настраиваются в Ветис.Паспорт https://t2-accounts.vetrf.ru). Еще этот пользователь должен быть от ХС, а не ветврач, т. е. под этим логином можно попасть в веб-интерфейс Меркурий.ХС.

upd
Извините, не видела следующее сообщение про доступ в ХС.

Это сообщение было редактировано 2 раз. Последнее обновление произошло в 06/10/2017 23:40:28

Jupiter


Зарегистрирован: 24/09/2017 19:02:23
Сообщений: 95
Оффлайн

nsnt, спасибо. После изменения прав через Ветис.Паспорт удалось выполнить ModifyActivityLocationsOperation.
 
Индекс форума » Автоматизированная система МЕРКУРИЙ
Перейти:   

Powered by JForum 2.1.8 © JForum Team