Moin !
Zitat:
Mit welcher Delphi Version hast Du das ganze umgesetzt ?
D2010 Prof.
Funzt super wenn man vorher
Indy updated aus dem
SVN ...
Zitat:
und in dieser Methode
dann Deine "
XML-Struktur" als String zurück liefern.
Nö. Das is ma ment genau der falsche Ansatz.
Damit kann ein Webservice Client nichts anfangen / nicht auswerten.
Zudem wird das
XML nicht sauber in der
SOAP Message dargestellt.
Ich weiss aber nun wie es geht
Hier ist es beschrieben:
http://exposureroom.com/members/skumar/tutorials/post/3
Zunächst muss das Interface erweitert werden:
Delphi-Quellcode:
unit DatasetXMLIntf;
interface
uses
Types, XSBuiltIns, uFieldInfo;
type
IDatasetXML =
interface(IInvokable)
['
{C7785514-F56F-40AD-B943-950A162296BE}']
function GetDatasetAsXML(
const SelectSQL: WideString): WideString;
stdcall;
function GetSchemaInfo(
const TableName: WideString): TFieldInfoArray;
stdcall;
end;
implementation
uses
InvokeRegistry;
initialization
InvRegistry.RegisterInterface(TypeInfo(IDatasetXML), '
', '
');
end.
Und dann muss man natürlich die Struktur definieren:
Delphi-Quellcode:
unit uFieldInfo;
interface
uses
InvokeRegistry, XSBuiltIns;
type
TFieldInfo =
class(TRemotable)
private
FIsKeyField: Boolean;
FFieldSize: Integer;
FFieldName:
string;
FFieldType:
string;
published
property FieldName:
string read FFieldName
write FFieldName;
property FieldType:
string read FFieldType
write FFieldType;
property FieldSize: Integer
read FFieldSize
write FFieldSize;
property IsKeyField: Boolean
read FIsKeyField
write FIsKeyField;
end;
TFieldInfoArray =
array of TFieldInfo;
implementation
initialization
RemClassRegistry.RegisterXSClass(TFieldInfo, '
', '
TFieldInfo', '
');
RemTypeRegistry.RegisterXSInfo(TypeInfo(TFieldInfoArray), '
', '
TFieldInfoArray');
finalization
RemClassRegistry.UnRegisterXSClass(TFieldInfo);
RemTypeRegistry.UnRegisterXSInfo(TypeInfo(TFieldInfoArray));
end.
So und dann muss man das natürlich noch implementieren. Das geht dann in etwa so:
Delphi-Quellcode:
function TMyAppServerSoapDataModule.GetSchemaInfo(const TableName: WideString): TFieldInfoArray; stdcall;
var i: Integer;
begin
SetLength(Result, 1);
for i := 0 to 1 -1 do
begin
Result[i] := TFieldInfo.Create;
Result[i].FieldName := 'Hallo Feld';
Result[i].FieldType := 'GetEnumName';
Result[i].FieldSize := 1234;
Result[i].IsKeyField := False;
end; { for i := 0 to Dataset.FieldCount -1 do }
end;
Hoffe geholfen zu haben