Форум по 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
все вроде ок, но про именно массив объектов подробно не расписано как реализовать, по логике я все сделал, но он выдает ошибку.

мой класс:

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
{ 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 значение, прошу подсказки.

результат он выдает вот такой :
Код:
1
2
3
4
5
6
7
<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, время: 06:19.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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