Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   PayPal SOAP Konto Bewegungen abfragen (https://www.delphipraxis.net/185377-paypal-soap-konto-bewegungen-abfragen.html)

vagtler 5. Jun 2015 12:14

AW: PayPal SOAP Konto Bewegungen abfragen
 
Zitat:

Zitat von franktron (Beitrag 1304239)
[...] Danke für die Infos aber alle Methoden gehen unter XE2 nicht. [...]

Das glaube ich nicht, Tim.

Bitte poste Deinen Code.

franktron 5. Jun 2015 13:24

AW: PayPal SOAP Konto Bewegungen abfragen
 
Delphi-Quellcode:
D_VT1.FieldByName('GrossAmountcurrencyID').Text:=GetEnumName(TypeInfo(CurrencyCodeType),Response.PaymentTransactions[i].NetAmount.currencyID);
Fehlermeldung [DCC Fehler] Unit2.pas(83): E2010 Inkompatible Typen: 'Integer' und 'CurrencyCodeType'

Hier nochmal der Code vom RTTI...
Delphi-Quellcode:
TRttiEnumerationType = class(TRttiOrdinalType)
  private
    function GetMaxValue: Longint; override;
    function GetMinValue: Longint; override;
    function GetUnderlyingType: TRttiType;
    constructor Create(APackage: TRttiPackage; AParent: TRttiObject; var P: PByte); override;
    {$HINTS OFF}
    function GetNames: TArray<string>;
    class function GetName<T{: enum}>(AValue: T): string; reintroduce; static;
    class function GetValue<T{: enum}>(const AName: string): T; static;
    {$HINTS ON}
  public
    property UnderlyingType: TRttiType read GetUnderlyingType;
  end;

vagtler 5. Jun 2015 13:48

AW: PayPal SOAP Konto Bewegungen abfragen
 
Zitat:

Zitat von franktron (Beitrag 1304255)
Delphi-Quellcode:
D_VT1.FieldByName('GrossAmountcurrencyID').Text:=GetEnumName(TypeInfo(CurrencyCodeType),Response.PaymentTransactions[i].NetAmount.currencyID);
Fehlermeldung [DCC Fehler] Unit2.pas(83): E2010 Inkompatible Typen: 'Integer' und 'CurrencyCodeType' [...]

Du hast den allerersten Treffer meines in http://www.delphipraxis.net/1304215-post8.html geposteten Links ignoriert.

Das Beispiel für
Delphi-Quellcode:
GetEnumName
in dem von @TiGü genannten Blogpost ist tatsächlich fehlerhaft.

(Aber mal ernsthaft: Da hätte man auf Grund der Fehlermeldung des Compilers aber auch durchaus drauf kommen können...)

franktron 5. Jun 2015 13:57

AW: PayPal SOAP Konto Bewegungen abfragen
 
Zitat:

Zitat von vagtler (Beitrag 1304259)
Zitat:

Zitat von franktron (Beitrag 1304255)
Delphi-Quellcode:
D_VT1.FieldByName('GrossAmountcurrencyID').Text:=GetEnumName(TypeInfo(CurrencyCodeType),Response.PaymentTransactions[i].NetAmount.currencyID);
Fehlermeldung [DCC Fehler] Unit2.pas(83): E2010 Inkompatible Typen: 'Integer' und 'CurrencyCodeType' [...]

Du hast den allerersten Treffer meines in http://www.delphipraxis.net/1304215-post8.html geposteten Links ignoriert.

Das Beispiel für
Delphi-Quellcode:
GetEnumName
in dem von @TiGü genannten Blogpost ist tatsächlich fehlerhaft.

(Aber mal ernsthaft: Da hätte man auf Grund der Fehlermeldung des Compilers aber auch durchaus drauf kommen können...)

Ich habe gedacht das wurde in einer neueren Delphi Version geändert.

franktron 5. Jun 2015 14:01

AW: PayPal SOAP Konto Bewegungen abfragen
 
So jetzt habe ich die Gesamte Lösung
Delphi-Quellcode:
Var
  client     : PayPalAPIInterface;
  credentials : RequesterCredentials;
  trans      : TransactionSearchReq;
  UserID     : UserIdPasswordType;
  trans1      : TransactionSearchRequest;

  Response   : TransactionSearchResponse;

  i          : Longint;
begin
  HTTPRIO1.URL:='https://api-3t.paypal.com/2.0/';
  client:=(HTTPRIO1 as PayPalAPIInterface);
  credentials:=RequesterCredentials.Create;

  UserID:=UserIdPasswordType.Create;

  UserID.Username:='';
  UserID.Password:='';
  UserID.Signature:='';

  credentials.Credentials:=UserID;

  HTTPRIO1.SOAPHeaders.Send(credentials);

  trans1:=TransactionSearchRequest.Create;
  trans:=TransactionSearchReq.Create;
  trans1.StartDate:=TXSDateTime.Create;
  trans1.Version:='94.0';
  trans1.StartDate.AsDateTime:=Now-10;
  trans.TransactionSearchRequest:=trans1;
  Response:=client.TransactionSearch(trans);

  D_VT1.Open;
  D_VT1.Clear;
  For i:=Low(Response.PaymentTransactions) To High(Response.PaymentTransactions) do
  Begin
    D_VT1.Append;
    D_VT1.FieldByName('timestamp').AsDateTime:=Response.PaymentTransactions[i].Timestamp.AsDateTime;
    D_VT1.FieldByName('type').Text:=Response.PaymentTransactions[i].Type_;
    D_VT1.FieldByName('payer').Text:=Response.PaymentTransactions[i].Payer;
    D_VT1.FieldByName('payerdisplayname').Text:=Response.PaymentTransactions[i].PayerDisplayName;
    D_VT1.FieldByName('TransactionID').Text:=Response.PaymentTransactions[i].TransactionID;
    D_VT1.FieldByName('Status').Text:=Response.PaymentTransactions[i].Status;
    D_VT1.FieldByName('GrossAmount').Text:=StringReplace(Response.PaymentTransactions[i].GrossAmount.Text,'.',',',[]);
    D_VT1.FieldByName('FeeAmount').Text:=StringReplace(Response.PaymentTransactions[i].FeeAmount.Text,'.',',',[]);
    D_VT1.FieldByName('NetAmount').Text:=StringReplace(Response.PaymentTransactions[i].NetAmount.Text,'.',',',[]);
    D_VT1.FieldByName('GrossAmountcurrencyID').Text:=GetEnumName(TypeInfo(CurrencyCodeType),Integer(Response.PaymentTransactions[i].GrossAmount.currencyID));
    D_VT1.FieldByName('FeeAmountcurrencyID').Text:=GetEnumName(TypeInfo(CurrencyCodeType),Integer(Response.PaymentTransactions[i].FeeAmount.currencyID));
    D_VT1.FieldByName('NetAmountcurrencyID').Text:=GetEnumName(TypeInfo(CurrencyCodeType),Integer(Response.PaymentTransactions[i].NetAmount.currencyID));
    D_VT1.Post;
  End;
  D_VT1.SaveToXML('t1.xml');
  D_VT1.Close;

himitsu 5. Jun 2015 14:25

AW: PayPal SOAP Konto Bewegungen abfragen
 
GetName ... Wozu auch, gibt ja das Property Name? :roll:

Und natürlich will es einen Integer, da man sonst millionen Überladungen für jeden Enumtypen bräuchte.
Delphi-Referenz durchsuchenOrd

TiGü 5. Jun 2015 15:10

AW: PayPal SOAP Konto Bewegungen abfragen
 
Zitat:

Zitat von franktron (Beitrag 1304239)
Zitat:

Zitat von TiGü (Beitrag 1304217)
Zitat:

Zitat von franktron (Beitrag 1304214)
Wie kann ich den Response.PaymentTransactions[i].NetAmount.currencyID; in ein String umwandeln

Wie der Zufall es will, gab es dazu erst neulich einen Blog-Post mit drei verschiedenen Möglichkeiten:
http://www.delphifeeds.com/go/f/1266...hiFeeds.com%29

Danke für die Infos aber alle Methoden gehen unter XE2 nicht.

Delphi-Quellcode:
TRttiEnumerationType.GetName
Getname ist Privat

Du musst den Typ mitgeben!
Sonst nimmt er die private function GetName aus der Basisklasse TRttiType.
Es ist eine wiedereingeführte generische Klassenfunktion.

Delphi-Quellcode:
uses
  System.Rtti;
...
var
  str : string;
begin
  str := TRttiEnumerationType.GetName<CurrencyCodeType>(Response.PaymentTransactions[i].NetAmount.currencyID);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz