Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.01.2014, 16:14
Аватар для CHARLIE
CHARLIE CHARLIE вне форума
Прохожий
 
Регистрация: 10.10.2006
Сообщения: 3
Репутация: 10
Вопрос DELPHI Soap Server передача с массивами (справочниками)

Добрый день!
разбираюсь с веб-сервисами, реализовал простые сервисы, которые могут отдавать либо набор значений, либо скажем так некий созданный мой класс (например одну запись из справочника:
код учреждения, названия учреждения) - и оно работает.

но мне нужно чтобы сервис выдавал весь справочник.
Почитал статью - http://www.realcoding.net/article/view/691
все вроде ок, но про именно массив объектов подробно не расписано как реализовать, по логике я все сделал, но он выдает ошибку.

мой класс:

Код:
{ Invokable interface Iemc }

unit emcIntf;

interface

uses InvokeRegistry, Types, XSBuiltIns,ora,sysutils,windows;

type



    Torg = class(TRemotable)
    PRIVATE
      forg:string;
      forg_id:integer;
    public
      constructor orgcreate(ID:INTEGER;NAME:STRING);
    published
      property org: string read forg write forg;
      property org_ID: INTEGER read forg_ID write forg_id;
    end;
      TorgROW = array of Torg;

  { Invokable interfaces must derive from IInvokable }
  Iemc = interface(IInvokable)
  ['{96AEC788-AC68-41C6-B904-4036B4262EBD}']
  function get_org(id:string): torgrow;  stdcall;

    { Methods of Invokable interface must not use the default }
    { calling convention; stdcall is recommended }

  end;

implementation


CONSTRUCTOR Torg.orgCREATE(ID:INTEGER;NAME:string);
var ind:boolean;
oracod:torasession;
codqry:toraquery;
 systime:systemtime;

begin
   Forg:=NAME;
   Forg_ID:=ID;
end;



initialization
  { Invokable interfaces must be registered }
  InvRegistry.RegisterInterface(TypeInfo(Iemc));
  RemClassRegistry.RegisterXSClass(temcdat, 'temcdat');
  RemClassRegistry.RegisterXSClass(TORG,'tORG');
  RemClassRegistry.RegisterXSInfo(TypeInfo(TORGROW));

end.


{ Invokable implementation File for Temc which implements Iemc }

unit emcImpl;

interface

uses InvokeRegistry, Types, XSBuiltIns, emcIntf,ora,sysutils,windows;

type


  { Temc }
  Temc = class(TInvokableClass, Iemc)
    function get_org(id:string): Torgrow;  stdcall;
  public
  end;

implementation


function temc.get_org(id:string): torgrow;
var ind:boolean;

i:integer;
oracod:torasession;
codqry:toraquery;
 systime:systemtime;
 orgROWOK:TorgROW;
begin
  oracod:=torasession.Create(nil);
//подключаемся
  oracod.Options.Direct:=true;
  oracod.Options.DateFormat:='dd.mm.yyyy';
  ORACOD.server:='xxx:oracle';
  ORACOD.Username:='login';
  ORACOD.Password:='pass';
  ind:=false;
  try
    ORACOD.Connected:=true;
    ind:=true;
  except

  end;
  if ind then
  begin
    codqry:=toraquery.Create(nil);
    codqry.Session:=oracod;
//адрес
    codqry.SQL.Clear;
    codqry.SQL.Add('select * from org );
    codqry.Active:=true;
    setlength(lorgrowok,codrqy.recordcount)
    I:=0;
    while codqry.Eof=false do
    begin
         I:=I+1;
         orgROWOK[i]:=torg.orgcreate(codqry.Fieldbyname('org_id').AsINTEGER,codqry.Fieldbyname('org_name').AsString);
       codqry.Next;
    end;
    result:=orgROWOK;


  end;

end;


initialization
{ Invokable classes must be registered }
   InvRegistry.RegisterInvokableClass(Temc);

end.


если поменять результат функции на TORG, то будет выводится ровно 1 значение, прошу подсказки.

результат он выдает вот такой :
Код:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
   <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
      <NS1:get_orgResponse xmlns:NS1="urn:emcIntf-Iemc">
         <return xsi:nil="true"/>
      </NS1:get_orgResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>


а списка элементов нет(
мне нужно вывод всех элементов запроса сюда
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:30.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter