Olá a todos. Pessoal venho ate aqui pedir ajuda de vocês novamente, gostaria de saber se alguém tem um exemplo de como posso gerar um xml através de uma temp-table conforme abaixo. coluna 1 coluna 2 coluna 3 coluna 4 linha 1 RecordType yyyyyy Texto xxxxxx linha 2 RecordType ooooo Texto aaaaaa xml <linha><recordtype>yyyyyy<recordtype/><texto>xxxxxxx<text/><linha/> <linha><recordtype>ooooo<recordtype/><texto>aaaaaaa<text/><linha/> desde já agradeço.
Boa Noite Da uma olhada no comando write-xml, com ele você pode criar xml a partir de uma temp-table ou prodataset, tem um exemplo bem simples para começar no help do progress, da uma olhada se tiver algum problema avisa. Obrigado
Boa Tarde Pessoal. Então consegui gerar o XML com este código. DEFINE VARIABLE c-msg-xml AS MEMPTR NO-UNDO. DEFINE VARIABLE hSAXWriter AS HANDLE NO-UNDO. DEFINE VARIABLE lok AS LOGICAL NO-UNDO. def var i-cont as int. CREATE SAX-WRITER hSAXWriter. hSAXWriter:STRICT = FALSE. hSAXWriter:FORMATTED = false. lok = hSAXWriter:SET-OUTPUT-DESTINATION("MEMPTR",c-msg-xml). lok = hSAXWriter:START-DOCUMENT(). lok = hSAXWriter:START-ELEMENT("soapenv:Envelope"). lok = hSAXWriter:START-ELEMENT("LinhaList"). FOR EACH InsAdendo where InsAdendo.ele-cod > 100000 NO-LOCK: lok = hSAXWriter:START-ELEMENT("Linha"). lok = hSAXWriter:WRITE-DATA-ELEMENT("TipoInterface" , "zf83"). lok = hSAXWriter:WRITE-DATA-ELEMENT("RecordType" , "Adendo"). lok = hSAXWriter:WRITE-DATA-ELEMENT("Texto" , string(InsAdendo.ele-cod)). lok = hSAXWriter:END-ELEMENT("Linha"). i-cont = i-cont + 1. if i-cont > 10 then leave. END. lok = hSAXWriter:END-ELEMENT("LinhaList"). lok = hSAXWriter:START-ELEMENT("Trailer"). lok = hSAXWriter:WRITE-DATA-ELEMENT("Usuario" , "luiz.azevedo"). lok = hSAXWriter:WRITE-DATA-ELEMENT("Email" , "luiz.azevedo@ywaysoft.com.br"). lok = hSAXWriter:WRITE-DATA-ELEMENT("Programa" , "guswszf83c"). lok = hSAXWriter:WRITE-DATA-ELEMENT("TipoTransacao" , "Demanda"). lok = hSAXWriter:END-ELEMENT("Trailer"). lok = hSAXWriter:WRITE-DATA-ELEMENT("interface" , "zf83c"). lok = hSAXWriter:END-ELEMENT("soapenv:Envelope"). lok = hSAXWriter:END-DOCUMENT(). DELETE OBJECT hSAXWriter. OUTPUT TO "E:\luizAzevedo\XML WebService\XmlTestes\Gera.xml". EXPORT c-msg-xml. OUTPUT CLOSE. E ele me gera o seguinte xml. <?xml version="1.0"?><soapenv:Envelope xmlns:soapenv=""> <LinhasList> <Linha> <RecordType> Teste </RecordType> <Texto> Teste </Texto> </Linha> </LinhasList> <Trailer> <Usuario>teste</Usuario> <Email>teste</Email> <Programa> teste</Programa> <TipoTransacao> teste </TipoTransacao> </Trailer> <Interface> teste </Interface> </soapenv:Envelope> Porem estou com 2 problemas, um seria a questão do cabeçalho onde ele me gera da seguinte forma <?xml version="1.0"?><soapenv:Envelope xmlns:soapenv=""> e eu preciso desta forma : <soapenv:Envelopexmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://www.tempuri.org"> Já tentei mudar a tag que ele gera, mas ele continua a gerar conforme o primeiro que mostro em azul. esse é um, o segundo e que preciso ler este xml após gera-lo e transforma-lo em um string para colocar em uma variavel. Alguém poderia me ajudar.
Veja se é isto que você precisa: Código: DEFINE VARIABLE c-msg-xml AS MEMPTR NO-UNDO. DEFINE VARIABLE hSAXWriter AS HANDLE NO-UNDO. DEFINE VARIABLE lok AS LOGICAL NO-UNDO. def var i-cont as int. CREATE SAX-WRITER hSAXWriter. hSAXWriter:STRICT = FALSE. hSAXWriter:FORMATTED = false. lok = hSAXWriter:SET-OUTPUT-DESTINATION("MEMPTR",c-msg-xml). lok = hSAXWriter:START-DOCUMENT(). lok = hSAXWriter:START-ELEMENT("soapenv:Envelope"). lok = hSAXWriter:INSERT-ATTRIBUTE("xmlns:soapenv","http://schemas.xmlsoap.org/soap/envelope/"). lok = hSAXWriter:INSERT-ATTRIBUTE("xmlns:tem","http://www.tempuri.org"). lok = hSAXWriter:START-ELEMENT("LinhaList"). FOR EACH InsAdendo where InsAdendo.ele-cod > 100000 NO-LOCK: lok = hSAXWriter:START-ELEMENT("Linha"). lok = hSAXWriter:WRITE-DATA-ELEMENT("TipoInterface" , "zf83"). lok = hSAXWriter:WRITE-DATA-ELEMENT("RecordType" , "Adendo"). lok = hSAXWriter:WRITE-DATA-ELEMENT("Texto" , string(InsAdendo.ele-cod)). lok = hSAXWriter:END-ELEMENT("Linha"). i-cont = i-cont + 1. if i-cont > 10 then leave. END. lok = hSAXWriter:END-ELEMENT("LinhaList"). lok = hSAXWriter:START-ELEMENT("Trailer"). lok = hSAXWriter:WRITE-DATA-ELEMENT("Usuario" , "luiz.azevedo"). lok = hSAXWriter:WRITE-DATA-ELEMENT("Email" , "luiz.azevedo@ywaysoft.com.br"). lok = hSAXWriter:WRITE-DATA-ELEMENT("Programa" , "guswszf83c"). lok = hSAXWriter:WRITE-DATA-ELEMENT("TipoTransacao" , "Demanda"). lok = hSAXWriter:END-ELEMENT("Trailer"). lok = hSAXWriter:WRITE-DATA-ELEMENT("interface" , "zf83c"). lok = hSAXWriter:END-ELEMENT("soapenv:Envelope"). lok = hSAXWriter:END-DOCUMENT(). DELETE OBJECT hSAXWriter. OUTPUT TO "E:\luizAzevedo\XML WebService\XmlTestes\Gera.xml". EXPORT c-msg-xml. OUTPUT CLOSE. Abs.
Obrigado leandro. você pode me responder mais algumas duvidas, como posso retirar esta parte do xml <?xml version="1.0"?> quando ele e gerado. outra coisa tu sabe me dizer como posso enviar este xml para um webserve, no momento estou enviando via este comando. RUN Executar IN hConsultaValorPortType(input ConsultaValorEnvia, output ConsultaValorResponse). onde a variável ConsultaValorEnvia recebe um xml montado a mão, e eu gostaria de enviar este xml que estou criando. desde já agraço.