Hola:
estoy desarrollando una aplicación SOAP con Delphi 2010, tengo los proxy consegidos a traves de WSDL Importer. Logro establecer una sessión y consumo algunos métodos sencillos.
La dificultad se me presenta cuando uno la property de los datos es de un tipo desconocido para Delphi, por ejemplo
property Array_Of_OriginCode, hay otros similares como se muestran en el código de abajo
La Calse que uso esta definida en el Proxy así;
Código Delphi
[-]
PackageTourProductAvailRQ = class(TRemotable)
private
FProductCode: Array_Of_ProductCode2;
FProductCode_Specified: boolean;
FBrochureCode: Array_Of_BrochureCodeType;
FBrochureCode_Specified: boolean;
FBrochureExcluded: Array_Of_BrochureCodeType;
FBrochureExcluded_Specified: boolean;
FProviderCode: Array_Of_ProviderCode2;
FProviderCode_Specified: boolean;
FOriginCode: Array_Of_OriginCode;
FOriginCode_Specified: boolean;
FProductConfigurations: ProductConfigurations;
FProductConfigurations_Specified: boolean;
FOfferIndicator: Boolean;
FOfferIndicator_Specified: boolean;
FFirstDepartureDate: TXSDate;
FLastDepartureDate: TXSDate;
FLastDepartureDate_Specified: boolean;
FNumberOfDepartures: TXSDecimal;
FNumberOfDepartures_Specified: boolean;
FRequestedAcomodations: RequestedAcomodations2;
FRequestedAcomodations_Specified: boolean;
procedure SetProductCode(Index: Integer; const AArray_Of_ProductCode2: Array_Of_ProductCode2);
function ProductCode_Specified(Index: Integer): boolean;
procedure SetBrochureCode(Index: Integer; const AArray_Of_BrochureCodeType: Array_Of_BrochureCodeType);
function BrochureCode_Specified(Index: Integer): boolean;
procedure SetBrochureExcluded(Index: Integer; const AArray_Of_BrochureCodeType: Array_Of_BrochureCodeType);
function BrochureExcluded_Specified(Index: Integer): boolean;
procedure SetProviderCode(Index: Integer; const AArray_Of_ProviderCode2: Array_Of_ProviderCode2);
function ProviderCode_Specified(Index: Integer): boolean;
procedure SetOriginCode(Index: Integer; const AArray_Of_OriginCode: Array_Of_OriginCode);
function OriginCode_Specified(Index: Integer): boolean;
procedure SetProductConfigurations(Index: Integer; const AProductConfigurations: ProductConfigurations);
function ProductConfigurations_Specified(Index: Integer): boolean;
procedure SetOfferIndicator(Index: Integer; const ABoolean: Boolean);
function OfferIndicator_Specified(Index: Integer): boolean;
procedure SetLastDepartureDate(Index: Integer; const ATXSDate: TXSDate);
function LastDepartureDate_Specified(Index: Integer): boolean;
procedure SetNumberOfDepartures(Index: Integer; const ATXSDecimal: TXSDecimal);
function NumberOfDepartures_Specified(Index: Integer): boolean;
procedure SetRequestedAcomodations(Index: Integer; const ARequestedAcomodations2: RequestedAcomodations2);
function RequestedAcomodations_Specified(Index: Integer): boolean;
public
constructor Create; override;
destructor Destroy; override;
published
property ProductCode: Array_Of_ProductCode2 Index (IS_OPTN or IS_UNBD) read FProductCode write SetProductCode stored ProductCode_Specified;
property BrochureCode: Array_Of_BrochureCodeType Index (IS_OPTN or IS_UNBD) read FBrochureCode write SetBrochureCode stored BrochureCode_Specified;
property BrochureExcluded: Array_Of_BrochureCodeType Index (IS_OPTN or IS_UNBD) read FBrochureExcluded write SetBrochureExcluded stored BrochureExcluded_Specified;
property ProviderCode: Array_Of_ProviderCode2 Index (IS_OPTN or IS_UNBD) read FProviderCode write SetProviderCode stored ProviderCode_Specified;
property OriginCode: Array_Of_OriginCode Index (IS_OPTN or IS_UNBD) read FOriginCode write SetOriginCode stored OriginCode_Specified;
property ProductConfigurations: ProductConfigurations Index (IS_OPTN) read FProductConfigurations write SetProductConfigurations stored ProductConfigurations_Specified;
property OfferIndicator: Boolean Index (IS_OPTN) read FOfferIndicator write SetOfferIndicator stored OfferIndicator_Specified;
property FirstDepartureDate: TXSDate read FFirstDepartureDate write FFirstDepartureDate;
property LastDepartureDate: TXSDate Index (IS_OPTN) read FLastDepartureDate write SetLastDepartureDate stored LastDepartureDate_Specified;
property NumberOfDepartures: TXSDecimal Index (IS_OPTN) read FNumberOfDepartures write SetNumberOfDepartures stored NumberOfDepartures_Specified;
property RequestedAcomodations: RequestedAcomodations2 Index (IS_OPTN) read FRequestedAcomodations write SetRequestedAcomodations stored RequestedAcomodations_Specified;
end;
En el procedimeinto que uso está así y compila OK:
Código Delphi
[-]procedure TfrmMain.btnCargaOfertaClick(Sender: TObject);
var
FIni, FFin: TXSDate;
Nchs: TXSDecimal;
SS: SessionSoapHeader;
RQ: PackageTourProductAvailRQ;
RS: PackageTourProductAvailResult;
i, j, k: integer;
Prd: Array_Of_ProductCode2;
Ori: Array_Of_OriginCode;
begin
SS := OtaSessionSoapHeader.Create;
RQ := OTA_OrizoniaPackageTourProductAvailRQ.Create;
Nchs := TXSDecimal.Create;
Nchs.DecimalString := Format('%d', [7]);
FIni := TXSDate.Create;
FFin := TXSDate.Create;
try
SS.ApiSessionId := DameSession(Sender); (*) Prd[1] := 'PD02'; Ori[1] := 'MAD';
RQ.ProductCode := Prd;
RQ.OriginCode := Ori;
RQ.OfferIndicator := False;
RQ.FirstDepartureDate.XSToNative(DateToStr(Date+1));
RQ.LastDepartureDate.XSToNative(DateToStr(Date+8));
RS := GetPackageTourServiceSoap(True,'',HTTPRIO2).OTA_OrizoniaPackageTourProductAvail(RQ);
with RS do begin
end;
finally
RQ.Free;
RS.Free;
Nchs.Free;
FIni.Free;
FFin.Free;
end;
end;
La ayuda que les pido es que me orienten como debo hacer referencia a ese tipo de propiedad ya que en la linea marcada con (*) da un EAccessViolation.
He probado definir de varias formas Prd y Ori pero no acierto.
Muchas gracias.