Ir al contenido


Foto

xml data binding


  • Por favor identifícate para responder
8 respuestas en este tema

#1 Pratasvenska

Pratasvenska

    Member

  • Miembros
  • PipPip
  • 38 mensajes
  • LocationSuecia

Escrito 29 mayo 2012 - 06:32

Buenos dias amigos,

Hoy les traigo un caso de xml data binding, he hecho un par de tutoriales y todo bien. Pero al aplicarlo a mi caso tengo algunas dudas. Tengo el siguiente código XML (si alguien ve un error de sintaxis favor de hacérmelo saber):

<sve:Order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sve="urn:oasis:names:specification:ubl:schema:xsd:Order-2" xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2">
    <UBLExtensions />
    <UBLVersionID />
    <ID>23704</ID>
    <IssueDate>2012-05-24</IssueDate>
    <IssueTime>12:33:35.4844930+02:00</IssueTime>
    <Note>Konferensbokning test av SveOrder</Note>
    <BuyerCustomerParty>
      <Party>
        <PartyIdentification>
          <ID>2520016326</ID>
        </PartyIdentification>
        <PartyName>
          <Name>Kinna församling</Name>
        </PartyName>
        <PostalAddress>
          <StreetName>Prästgatan 7</StreetName>
          <CityName>Kinna</CityName>
          <PostalZone>51154</PostalZone>
        </PostalAddress>
        <Contact>
          <Name>Bengt Bernhardsson</Name>
        </Contact>
      </Party>
    </BuyerCustomerParty>
    <SellerSupplierParty xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
      <Party>
        <PartyIdentification>
          <ID>2520012345</ID>
        </PartyIdentification>
        <PartyName>
          <Name>SellerName</Name>
        </PartyName>
        <PostalAddress>
          <StreetName>sellerAdress</StreetName>
          <CityName>SellerCity</CityName>
          <PostalZone>SellerZip</PostalZone>
        </PostalAddress>
        <Contact>
          <Name>Conrad Carlsson</Name>
          <ElectronicMail>conrad.carlsson@mail.se</ElectronicMail>
        </Contact>
      </Party>
    </SellerSupplierParty>
    <OrderLine xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
      <LineItem>
        <Quantity>1</Quantity>
        <Price>
          <PriceAmount currencyID="AED">1600</PriceAmount>
        </Price>
        <Item>
          <Description>Konferens</Description>
          <AdditionalItemProperty>
            <Name>accounting:dim2</Name>
            <Value>111319</Value>
          </AdditionalItemProperty>
          <AdditionalItemProperty>
            <Name>accounting:dim1</Name>
            <Value>28973</Value>
          </AdditionalItemProperty>
          <AdditionalItemProperty>
            <Name>accounting:account</Name>
            <Value>3613</Value>
          </AdditionalItemProperty>
          <AdditionalItemProperty>
            <Name>vat:vatcode</Name>
            <Value>900</Value>
          </AdditionalItemProperty>
          <AdditionalItemProperty>
            <Name>ProductSpecification</Name>
            <Value>Deltagare: Sofia Svensson</Value>
          </AdditionalItemProperty>
        </Item>
      </LineItem>
    </OrderLine>
    <OrderLine xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
      <LineItem>
        <Quantity>1</Quantity>
        <Price>
          <PriceAmount currencyID="AED">1600</PriceAmount>
        </Price>
        <Item>
          <Description>Konferens</Description>
          <AdditionalItemProperty>
            <Name>accounting:dim2</Name>
            <Value>111319</Value>
          </AdditionalItemProperty>
          <AdditionalItemProperty>
            <Name>accounting:dim1</Name>
            <Value>28973</Value>
          </AdditionalItemProperty>
          <AdditionalItemProperty>
            <Name>accounting:account</Name>
            <Value>3613</Value>
          </AdditionalItemProperty>
          <AdditionalItemProperty>
            <Name>vat:vatcode</Name>
            <Value>900</Value>
          </AdditionalItemProperty>
          <AdditionalItemProperty>
            <Name>ProductSpecification</Name>
            <Value>Deltagare: Maria Marie Månsson</Value>
          </AdditionalItemProperty>
        </Item>
      </LineItem>
    </OrderLine>
    <OrderLine xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
      <LineItem>
        <Quantity>1</Quantity>
        <Price>
          <PriceAmount currencyID="AED">1600</PriceAmount>
        </Price>
        <Item>
          <Description>Konferens</Description>
          <AdditionalItemProperty>
            <Name>accounting:dim2</Name>
            <Value>111319</Value>
          </AdditionalItemProperty>
          <AdditionalItemProperty>
            <Name>accounting:dim1</Name>
            <Value>28973</Value>
          </AdditionalItemProperty>
          <AdditionalItemProperty>
            <Name>accounting:account</Name>
            <Value>3613</Value>
          </AdditionalItemProperty>
          <AdditionalItemProperty>
            <Name>vat:vatcode</Name>
            <Value>900</Value>
          </AdditionalItemProperty>
          <AdditionalItemProperty>
            <Name>ProductSpecification</Name>
            <Value>Deltagare: Erik Eriksson</Value>
          </AdditionalItemProperty>
        </Item>
      </LineItem>
    </OrderLine>
    <OrderLine xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
      <LineItem>
        <Quantity>1</Quantity>
        <Price>
          <PriceAmount currencyID="AED">1600</PriceAmount>
        </Price>
        <Item>
          <Description>Konferens</Description>
          <AdditionalItemProperty>
            <Name>accounting:dim2</Name>
            <Value>111319</Value>
          </AdditionalItemProperty>
          <AdditionalItemProperty>
            <Name>accounting:dim1</Name>
            <Value>28973</Value>
          </AdditionalItemProperty>
          <AdditionalItemProperty>
            <Name>accounting:account</Name>
            <Value>3613</Value>
          </AdditionalItemProperty>
          <AdditionalItemProperty>
            <Name>vat:vatcode</Name>
            <Value>900</Value>
          </AdditionalItemProperty>
          <AdditionalItemProperty>
            <Name>ProductSpecification</Name>
            <Value>Deltagare: Sven Svensson</Value>
          </AdditionalItemProperty>
        </Item>
      </LineItem>
    </OrderLine>
  </sve:Order>


Utilizando el Data Binding wizard obtengo la clase correspondiente. Para tratar de acceder a los datos creo un form con varios TEdit, un TButton y un TXMLDocument.

declaracion global:


delphi
  1. public
  2.   order: IXMLOrderType;



En el evento OnCreate de mi form tengo:


delphi
  1. procedure TfrmSveorderTest.FormCreate(Sender: TObject);
  2. begin
  3.   inherited;
  4.   order := GetOrder(xmldc1)
  5. end;



Pero en OnClick del botón algo tan simple como:


delphi
  1. edt1.Text := IntToStr(order.ID);



Me da el error: 'Could not convert variant of type (Null) into type (Integer)'

Por qué no está captando los valores que hay en el xml? Alguna idea? Si alguien pudiera generar la clase con la herramienta de Data Binding y hacer un par de pruebas lo agradeceria mucho.

Saludos
  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 29 mayo 2012 - 06:53

Es que a menos que se indique en el XML que ese dato es un integer u otro tipo de dato, todos son strings:



delphi
  1. edt1.Text := order.ID.value;



Saludos.
  • 0

#3 Pratasvenska

Pratasvenska

    Member

  • Miembros
  • PipPip
  • 38 mensajes
  • LocationSuecia

Escrito 29 mayo 2012 - 07:12

Es que a menos que se indique en el XML que ese dato es un integer u otro tipo de dato, todos son strings:



delphi
  1. edt1.Text := order.ID.value;



Saludos.


No existe la propiedad Value... la herramienta XML Data Binding genera un conjunto de datos en el cual, como bien dices, la mayoría de los campos son de tipo WideString, pero en este caso ID si está especificado como entero en mi "Dataset" resultante. De cualquier modo, si uso otro campo que sea string, por ejemplo Orders.Note, no genera error pero la cadena esta vacia..

Espero mis explicaciones no sean confusas??

Gracias.
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.469 mensajes
  • LocationMéxico

Escrito 29 mayo 2012 - 07:50

Hola,

Y que pasa si agregas el namespace sve: a los nodos

Algo así

<sve:ID>23704</sve:ID>


Saludos
  • 0

#5 Pratasvenska

Pratasvenska

    Member

  • Miembros
  • PipPip
  • 38 mensajes
  • LocationSuecia

Escrito 29 mayo 2012 - 08:22

Hola,

Y que pasa si agregas el namespace sve: a los nodos

Algo así

<sve:ID>23704</sve:ID>


Saludos


Excelente!... no se me había ocurrido, muchas gracias
  • 0

#6 Pratasvenska

Pratasvenska

    Member

  • Miembros
  • PipPip
  • 38 mensajes
  • LocationSuecia

Escrito 30 mayo 2012 - 06:19

Hola,

Y que pasa si agregas el namespace sve: a los nodos

Algo así

<sve:ID>23704</sve:ID>


Saludos

hola de nuevo, como respondi ayer, tu solucion funciona. El problema ahora es hacerlo programaticamente. No puedo modificar el archivo XML, debo encontrar una forma de añadir el prefijo "sve" al momento de crear los ChildNodes. He intentado algo que vi en otro foro que sugeria:



delphi
  1. function GetOrder(Doc: IXMLDocument): IXMLOrderType;
  2. begin
  3.   Result := Doc.GetDocBinding('sve:Order', TXMLOrderType, TargetNamespace) as IXMLOrderType;
  4. end;



Pero no funciona, alguna otra idea? Saludos
  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.469 mensajes
  • LocationMéxico

Escrito 30 mayo 2012 - 07:57

Porque no puedes modificar el XML ? antes de "meterlo" a la clase puedes editarlo, por otro lado en lugar de incluir el namespace porque no lo quitas del nodo Order. Al final los XML al ser un string puedes utilizar la función StringReplace() sustituyendo el namespace 'svn:' por vacio.

Saludos
  • 0

#8 Pratasvenska

Pratasvenska

    Member

  • Miembros
  • PipPip
  • 38 mensajes
  • LocationSuecia

Escrito 31 mayo 2012 - 01:28

Como siempre, buenas soluciones. Tal vez se me habría ocurrido pero no tan rápido como a ti, Gracias Egostar!
  • 0

#9 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.469 mensajes
  • LocationMéxico

Escrito 31 mayo 2012 - 07:35

Como siempre, buenas soluciones. Tal vez se me habría ocurrido pero no tan rápido como a ti, Gracias Egostar!


Que bien que haya sido útil, pongo éste hilo como [RESUELTO].

Saludos
  • 0




IP.Board spam blocked by CleanTalk.