Alguém possui exemplos de como o Progress trabalha com WEBServices e importação de arquivo XML? Obrigado!
Bom, consegui! Abaixo fontes para se alguém precisar. Código: /* Cria/Escreve no XML */ DEFINE TEMP-TABLE Pessoa FIELD nome AS CHARACTER FIELD idade AS INTEGER FIELD sexo AS CHARACTER FIELD salario AS DECIMAL. DEFINE VARIABLE cTargetType AS CHARACTER NO-UNDO. DEFINE VARIABLE cFile AS CHARACTER NO-UNDO. DEFINE VARIABLE lFormatted AS LOGICAL NO-UNDO. DEFINE VARIABLE cEncoding AS CHARACTER NO-UNDO. DEFINE VARIABLE cSchemaLocation AS CHARACTER NO-UNDO. DEFINE VARIABLE lWriteSchema AS LOGICAL NO-UNDO. DEFINE VARIABLE lMinSchema AS LOGICAL NO-UNDO. DEFINE VARIABLE retOK AS LOGICAL NO-UNDO. CREATE Pessoa. ASSIGN Pessoa.nome = "carlos" Pessoa.idade = 25 Pessoa.sexo = "m" Pessoa.salario = 1000. CREATE Pessoa. ASSIGN Pessoa.nome = "joao" Pessoa.idade = 16 Pessoa.sexo = "m" Pessoa.salario = 500. CREATE Pessoa. ASSIGN Pessoa.nome = "rita" Pessoa.idade = 32 Pessoa.sexo = "f" Pessoa.salario = 2000. CREATE Pessoa. ASSIGN Pessoa.nome = "aline" Pessoa.idade = 22 Pessoa.sexo = "f" Pessoa.salario = 1270. ASSIGN cTargetType = "file" cFile = session:temp-dir + 'Pessoa.xml' lFormatted = YES cEncoding = ? cSchemaLocation = ? lWriteSchema = NO lMinSchema = NO. retOK = TEMP-TABLE Pessoa:WRITE-XML(cTargetType, cFile,lFormatted, cEncoding, cSchemaLocation, lWriteSchema, lMinSchema). /*Arquivo gerado (pessoa.xml)*/ '<xml version=1.0> <Pessoa xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <PessoaRow> <nome>carlos</nome> <idade>25</idade> <sexo>m</sexo> <salario>1000.0</salario> </PessoaRow> <PessoaRow> <nome>joao</nome> <idade>16</idade> <sexo>m</sexo> <salario>500.0</salario> </PessoaRow> <PessoaRow> <nome>rita</nome> <idade>32</idade> <sexo>f</sexo> <salario>2000.0</salario> </PessoaRow> <PessoaRow> <nome>aline</nome> <idade>22</idade> <sexo>f</sexo> <salario>1270.0</salario> </PessoaRow> </Pessoa>' Código: /* Lê Arquivo XML */ DEFINE VARIABLE cSourceType AS CHARACTER NO-UNDO. DEFINE VARIABLE cReadMode AS CHARACTER NO-UNDO. DEFINE VARIABLE lOverrideDefaultMapping AS LOGICAL NO-UNDO. DEFINE VARIABLE cFile AS CHARACTER NO-UNDO. DEFINE VARIABLE cEncoding AS CHARACTER NO-UNDO. DEFINE VARIABLE cSchemaLocation AS CHARACTER NO-UNDO. DEFINE VARIABLE cFieldTypeMapping AS CHARACTER NO-UNDO. DEFINE VARIABLE cVerifySchemaMode AS CHARACTER NO-UNDO. DEFINE VARIABLE retOK AS LOGICAL NO-UNDO. DEFINE VARIABLE httPessoa AS HANDLE NO-UNDO. DEFINE VARIABLE i_campos AS INTEGER. DEFINE VARIABLE bh AS HANDLE NO-UNDO. DEFINE VARIABLE qh AS HANDLE NO-UNDO. DEFINE VARIABLE fld1 AS HANDLE NO-UNDO. CREATE TEMP-TABLE httPessoa. ASSIGN cSourceType = 'file' cFile = 'pessoa.xml' cReadMode = 'empty' cSchemaLocation = 'pessoa.xsd' lOverrideDefaultMapping = ? cFieldTypeMapping = ? cVerifySchemaMode = ?. retOK = httPessoa:READ-XML(cSourceType, cFile, cReadMode, cSchemaLocation, lOverrideDefaultMapping, cFieldTypeMapping, cVerifySchemaMode). bh = httPessoa:DEFAULT-BUFFER-HANDLE. CREATE QUERY qh. qh:SET-BUFFERS(bh). qh:QUERY-PREPARE('for each ' + bh:Table). qh:QUERY-OPEN(). REPEAT: qh:GET-NEXT(). IF qh:QUERY-OFF-END THEN LEAVE. Do i_campos = 1 To bh:Num-fields: fld1 = bh:BUFFER-FIELD(i_campos). MESSAGE bh:BUFFER-FIELD(i_campos):name fld1:BUFFER-VALUE() VIEW-AS ALERT-BOX. END. END. qh:QUERY-CLOSE(). bh:BUFFER-RELEASE(). DELETE OBJECT httPessoa. DELETE OBJECT qh. Valeeu!
Só complementando: Encontrei um erro no fonte de leitura, segue o fonte corrigido: Código: DEFINE VARIABLE cSourceType AS CHARACTER NO-UNDO. DEFINE VARIABLE cReadMode AS CHARACTER NO-UNDO. DEFINE VARIABLE lOverrideDefaultMapping AS LOGICAL NO-UNDO. DEFINE VARIABLE cFile AS CHARACTER NO-UNDO. DEFINE VARIABLE cEncoding AS CHARACTER NO-UNDO. DEFINE VARIABLE cSchemaLocation AS CHARACTER NO-UNDO. DEFINE VARIABLE cFieldTypeMapping AS CHARACTER NO-UNDO. DEFINE VARIABLE cVerifySchemaMode AS CHARACTER NO-UNDO. DEFINE VARIABLE retOK AS LOGICAL NO-UNDO. DEFINE VARIABLE httPessoa AS HANDLE NO-UNDO. DEFINE VARIABLE i_campos AS INTEGER. DEFINE VARIABLE bh AS HANDLE NO-UNDO. DEFINE VARIABLE qh AS HANDLE NO-UNDO. DEFINE VARIABLE fld1 AS HANDLE NO-UNDO. CREATE TEMP-TABLE httPessoa. ASSIGN cSourceType = 'file' cFile = session:temp-dir + 'pessoa.xml' cReadMode = 'empty' cSchemaLocation = 'pessoa.xml' lOverrideDefaultMapping = ? cFieldTypeMapping = ? cVerifySchemaMode = ?. retOK = httPessoa:READ-XML(cSourceType, cFile, cReadMode, "", /*cSchemaLocation,*/ /* tirei essa linha */ lOverrideDefaultMapping, cFieldTypeMapping, cVerifySchemaMode). bh = httPessoa:DEFAULT-BUFFER-HANDLE. CREATE QUERY qh. qh:SET-BUFFERS(bh). qh:QUERY-PREPARE('for each ' + bh:Table). qh:QUERY-OPEN(). REPEAT: qh:GET-NEXT(). IF qh:QUERY-OFF-END THEN LEAVE. Do i_campos = 1 To bh:Num-fields: fld1 = bh:BUFFER-FIELD(i_campos). MESSAGE bh:BUFFER-FIELD(i_campos):name fld1:BUFFER-VALUE() VIEW-AS ALERT-BOX. END. END. qh:QUERY-CLOSE(). bh:BUFFER-RELEASE(). DELETE OBJECT httPessoa. DELETE OBJECT qh. Abaixo um novo método de criação do XML utilizando o SAXWrite: 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. DEFINE TEMP-TABLE Pessoa FIELD nome AS CHARACTER FIELD idade AS INTEGER FIELD sexo AS CHARACTER FIELD salario AS DECIMAL. CREATE Pessoa. ASSIGN Pessoa.nome = "carlos" Pessoa.idade = 25 Pessoa.sexo = "m" Pessoa.salario = 1000. CREATE Pessoa. ASSIGN Pessoa.nome = "joao" Pessoa.idade = 16 Pessoa.sexo = "m" Pessoa.salario = 500. CREATE Pessoa. ASSIGN Pessoa.nome = "rita" Pessoa.idade = 32 Pessoa.sexo = "f" Pessoa.salario = 2000. CREATE Pessoa. ASSIGN Pessoa.nome = "aline" Pessoa.idade = 22 Pessoa.sexo = "f" Pessoa.salario = 1270. CREATE SAX-WRITER hSAXWriter. hSAXWriter:STRICT = FALSE. hSAXWriter:FORMATTED = TRUE. lok = hSAXWriter:SET-OUTPUT-DESTINATION('MEMPTR', c-msg-xml). lok = hSAXWriter:START-DOCUMENT(). lok = hSAXWriter:START-ELEMENT('pessoa'). FOR EACH pessoa NO-LOCK: lok = hSAXWriter:START-ELEMENT('pessoa'). lok = hSAXWriter:WRITE-DATA-ELEMENT('nome', pessoa.nome). lok = hSAXWriter:WRITE-DATA-ELEMENT('idade', string(pessoa.idade)). lok = hSAXWriter:WRITE-DATA-ELEMENT('sexo', pessoa.sexo). lok = hSAXWriter:WRITE-DATA-ELEMENT('salario', string(pessoa.salario)). lok = hSAXWriter:END-ELEMENT('pessoa'). END. lok = hSAXWriter:END-ELEMENT('pessoa'). lok = hSAXWriter:END-DOCUMENT(). DELETE OBJECT hSAXWriter. OUTPUT TO pessoa.xml. EXPORT c-msg-xml. OUTPUT CLOSE. Todos os códigos estão funcionando perfeitamente.