Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi wie wird aus einem Mapping '_1', '1' ein '1' bei der Antwort bzw. wie lese es aus? (https://www.delphipraxis.net/192900-wie-wird-aus-einem-mapping-_1-1-ein-1-bei-der-antwort-bzw-wie-lese-es-aus.html)

Samashy 31. Mai 2017 11:56

wie wird aus einem Mapping '_1', '1' ein '1' bei der Antwort bzw. wie lese es aus?
 
Hallo Ihr Lieben,

ich kommuniziere mit einem BiPro konformen Webservice und erhalte als Antwort CT_VertragsauskunftResponse (http://www.bipro.net/namespace/prozesse/vertrag).
Die Zahlart oder auch der Status werden als '1' oder ähnliches geliefert. In der aus der WDSL erzeugten Pas findet ein Mapping statt:
Code:
ST_Vertragsstatus = (
      _1,
      _2,
      _3,
      _4,
      _5,
      _6,
      _7,
      _8,
      _9,
      _A,
      _B
  );
und
Code:
RemClassRegistry.RegisterXSInfo(TypeInfo(ST_Vertragsstatus), 'http://www.bipro.net/namespace/datentypen', 'ST_Vertragsstatus');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(ST_Vertragsstatus), '_1', '1');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(ST_Vertragsstatus), '_2', '2');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(ST_Vertragsstatus), '_3', '3');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(ST_Vertragsstatus), '_4', '4');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(ST_Vertragsstatus), '_5', '5');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(ST_Vertragsstatus), '_6', '6');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(ST_Vertragsstatus), '_7', '7');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(ST_Vertragsstatus), '_8', '8');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(ST_Vertragsstatus), '_9', '9');
Ich verstehe nicht, wie ich jetzt den Wert auslesen kann. Lasse ich mir im Debbuger den Vertragsstatus anzeigen, wird '_1' gezeigt. Ich würde das Ganze gerne in eine Integer Variable lesen, aber wie? Ich stelle mich zu dusselig an.

himitsu 31. Mai 2017 12:45

AW: wie wird aus einem Mapping '_1', '1' ein '1' bei der Antwort bzw. wie lese es au
 
Das Mapping kommt erstmal wegen dem ENUM, da "1" kein gültiger Bezeichner ist. (Bezeichner fangen niemals mit Ziffern an)
Und wie willst du die Strings "A" oder "B" in Integer umwandeln?
Gut, du könntest ja einfach den führende "_" entfernen und StrToInt verwenden, aber bei "_A" oder "_B" hilft das auch nicht viel, da das keine Zahlen sind.

Wenn du unbedingt einen Integer willst, dann wandle besser den ENUM um und nicht die Namen der enthaltenen Werte.
Delphi-Quellcode:
var
  E: ST_Vertragsstatus;
  i: Integer;

E := ST_Vertragsstatus(i);
i := Ord(E);
Alternativ via RTTI die Werte des ENUM umwandeln lassen, also Delphi-Referenz durchsuchenGetEnumName und Delphi-Referenz durchsuchenGetEnumValue (TypInfo.pas), bzw. siehe RTTI.pas .


ENUMs fangen bei 0 an, also wäre jetzt
Code:
_1 = 0
_2 = 1
...
_9 = 8
_A = 9
...
Aber das liese sich über einen Offset lösen.
Delphi-Quellcode:
E := ST_Vertragsstatus(i - 1);
i := Ord(E) + 1;
Code:
_1 = 1
_2 = 2
...
_9 = 9
_A = 10
...

Samashy 31. Mai 2017 15:25

AW: wie wird aus einem Mapping '_1', '1' ein '1' bei der Antwort bzw. wie lese es au
 
Erstmal vielen Dank für Deine Hilfe.
Ja, Du hast Recht, Integer ist keine gute Wahl wegen dem A und dem B.

Ich probiere mal
Zitat:

Alternativ via RTTI die Werte des ENUM umwandeln lassen, also Delphi-Referenz durchsuchen GetEnumName und Delphi-Referenz durchsuchen GetEnumValue (TypInfo.pas), bzw. siehe RTTI.pas .
aus.

Dankeschön,
Samashy


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 Uhr.

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