Páginas

sexta-feira, 8 de abril de 2016

WX - CONSUMINDO UM WEBSERVICE COM WINDEV, WEBDEV E WINDEV MOBILE



Fonte - forum - Adriano



//Webservice
//############################################################################
XML_Retorno is string = ""

RetornoXml is a ws_mobile_configResponse

RetornoXml = ws_mobile_config(29121974,4199491800,"SELECT")

XML_Retorno = RetornoXml.ws_mobile_configResult

XML_RetornoBuffer is Buffer = UTF8ToAnsi(XML_Retorno)
//############################################################################

XmlDoc is XMLDocument
XmlDoc = XMLOpen(XML_RetornoBuffer,fromString)
NoXml is xmlNode
FOR EACH NoXml OF XmlDoc.Xml.Retorno on NoXml

t010_MobileConfig.t010_Codigo = XmlDoc.Xml.Retorno.NoXml.NG0030_Codigo
t010_MobileConfig.t010_Descricao = XmlDoc.Xml.Retorno.NoXml.NG0030_Descricao
t010_MobileConfig.t010_Valor = XmlDoc.Xml.Retorno.NoXml.NG0030_Valor
t010_MobileConfig.t010_Status = XmlDoc.Xml.Retorno.NoXml.NG0030_Status
HAdd(t010_MobileConfig)

END


-------


//Webservice
//############################################################################
XML_Retorno is string = ""

Retorno is a ws_treino_select_bairroResponse

Retorno = ws_treino_select_bairro(29121974,4199491800,"SELECT")

XML_Retorno = Retorno.ws_treino_select_bairroResult

Info(XML_Retorno)
//############################################################################


Retorno DO Select

<Xml>
<Retorno>

<NoXml id="1"><codigo>1</codigo><bairro>CENTRO</bairro></NoXml> //Registro 1
<NoXml id="2"><codigo>2</codigo><bairro>SAO CRISTOVAO</bairro></NoXml> //Registro 2
<NoXml id="3"><codigo>3</codigo><bairro>CAPAO DA IMBUIA</bairro></NoXml> //Registro 3

<TOTAL>3</TOTAL>

</Retorno>
</Xml>



<Xml><Retorno><NoXml id="1"><codigo>1</codigo><bairro>CENTRO</bairro></NoXml><NoXml id="2"><codigo>2</codigo><bairro>SAO CRISTOVAO</bairro></NoXml><NoXml id="3"><codigo>3</codigo><bairro>CAPAO DA IMBUIA</bairro></NoXml><NoXml id="4"><codigo>4</codigo><bairro>Taruma</bairro></NoXml><TOTAL>4</TOTAL></Retorno></Xml>




//-----------------------------------------------------------------------------------------------------------------




//Modelo de consumo de webservice
//############################################################################
XML_Retorno is string = "" //Variavel que pega o resultado e exibe na tela

Retorno is a ws_treino_select_bairroResponse //Response = Envio

Retorno = ws_treino_select_bairro(29121974,4199491800,"SELECT")

XML_Retorno = Retorno.ws_treino_select_bairroResult //Result = Resultado

Info(XML_Retorno)

EDT_Retorno = XML_Retorno
//############################################################################



Retorno DO Insert

<Xml>
<Retorno>

<NoXml id="0">
<OK>Gravou com Sucesso!</OK> //Incluiu com sucesso
</NoXml>

<TOTAL>1</TOTAL>

</Retorno>
</Xml>


//-----------------------------------------------------------------------------------------------------------------



//Modelo de consumo de webservice
//############################################################################
XML_Retorno is string = "" //Variavel que pega o resultado e exibe na tela

Retorno is a ws_treino_insert_bairroResponse

Retorno = ws_treino_insert_bairro(29121974,4199491800,"INSERT",EDT_Codigo,EDT_Bairro)

XML_Retorno = Retorno.ws_treino_insert_bairroResult //Result = Resultado

Info(XML_Retorno)

EDT_Retorno = XML_Retorno
//############################################################################


<Xml><Retorno><ng0020_bairro id="0"><OK>Gravou com Sucesso!</OK></ng0020_bairro><TOTAL>1</TOTAL></Retorno></Xml><ng0020_bairro id="0"><ERRO>ACAO INVALIDA</ERRO></ng0020_bairro>


<Xml>
<Retorno>

<NoXml id="1"><codigo>1</codigo><bairro>CENTRO</bairro></NoXml>
<NoXml id="2"><codigo>2</codigo><bairro>SAO CRISTOVAO</bairro></NoXml>
<NoXml id="3"><codigo>3</codigo><bairro>CAPAO DA IMBUIA</bairro></NoXml>
<NoXml id="4"><codigo>4</codigo><bairro>Boqueirao</bairro></NoXml> //-----> Registro Alterado com sucesso

<TOTAL>4</TOTAL>

</Retorno>
</Xml>



//------------------------------------------------------------------------------------------------------------------


//Modelo de consumo de webservice
//############################################################################
XML_Retorno is string = "" //Variavel que pega o resultado e exibe na tela

Retorno is a ws_treino_delete_bairroResponse //Vaio via Drag in Drop

Retorno = ws_treino_delete_bairro(29121974,4199491800,"DELETE") // Executa o comando de exclusao dos registros

XML_Retorno = Retorno.ws_treino_delete_bairroResult //Result = Resultado

Info(XML_Retorno)

EDT_Retorno = XML_Retorno //Exibe o retorno
//############################################################################



<Xml><Retorno><ng0020_bairro id="0"><OK>Deletou com Sucesso!</OK></ng0020_bairro><TOTAL>1</TOTAL></Retorno></Xml><ng0020_bairro id="0"><ERRO>ACAO INVALIDA</ERRO></ng0020_bairro>


//Pelo Select Obtenho que nao tenho mais registros


<NoXml id="0"><Erro>NENHUM REGISTRO!</Erro></NoXml><TOTAL>0</TOTAL></Retorno></Xml>

//-------------------------------


Segue aqui outro exemplo de procedures, podem converter para classe esses códigos automatizando assim a leitura.

<Xml>
<Retorno>
<NoXml id="1">
<TJogadorID>2</TJogadorID>
<TNome>Neri</TNome>
<TClassificacao>600</TClassificacao>
<TFone>1</TFone>
<TFoto>1</TFoto>
</NoXml>
<NoXml id="2">
<TJogadorID>1</TJogadorID>
<TNome>Adriano Boller</TNome>
<TClassificacao>1</TClassificacao>
<TFone>1</TFone>
<TFoto>1</TFoto>
</NoXml>
<Total>2</Total>
</Retorno>
</Xml>



CODIGO GLOBAL CODE

//Global do Projeto
arrXml_Tags is array of strings //Nome das Tags

arrXml_TagResult is array of strings //Conteudo das Tags Resultado

gsGloXmlResultado is string = ""

GloTotalRegistros is int = 0

GloXml is string



//OPEN DA JANELA
pws_listar_jogador(0)

ws_listar_jogadores()



Procedure ArrayDeleteDuplicateBoller(ArrayResultado is array of strings)

x, NaoAchou is int = 0

ArrayResultadoNovo is array of strings

nTotal is int = ArrayCount(ArrayResultado)

LOOP (nTotal)

x += 1

NaoAchou = ArraySeek(ArrayResultadoNovo,asLinearFirst,ArrayResultado[x])

IF NaoAchou = -1

Add(ArrayResultadoNovo,ArrayResultado[x])

END

END

RESULT (ArrayResultadoNovo)



Procedure IdentificarTagsNoXml(XmlConteudo)

x, Inicial, Final, Tamanho is int = 0

Tag, Anterior is string = ""

IF XmlConteudo <> "" THEN

XmlConteudo = NoAccent(XmlConteudo)
XmlConteudo = Replace(XmlConteudo,CR,"")
XmlConteudo = Replace(XmlConteudo,Charact(13),"")
XmlConteudo = Replace(XmlConteudo,Charact(10),"")

Total is int = Length(XmlConteudo)

LOOP (Total)

x += 1

IF XmlConteudo[[x]] = "<"
Inicial = x+1
ELSE IF XmlConteudo[[x]] = ">"
Final = x
IF Final <= Inicial THEN
Final = 0
END
END

IF Inicial > 0 AND Final > 0 AND Final > Inicial

Tamanho = Final - Inicial

Tag = Middle(XmlConteudo,Inicial,Tamanho)

//IGNORAR AS TAGS DE FECHAMENTO E ID
IF Middle(Tag,1,1) = "/" OR PositionOccurrence(Upper(Tag),"ID=",firstRank,FromBeginning) > 0
Tag = ""
END

//VALIDA TAGS DO NÓ
IF Tag <> "" AND Tamanho > 0 AND Anterior <> Tag AND Upper(Tag) <> "XML" AND Upper(Tag) <> "RETORNO" AND Upper(Tag) <> "TOTAL"

Anterior = Tag

//DEBUG
//add(arrXml_Tags,Tag +" / "+ Inicial +" / "+ Final +" / "+ Tamanho )
//INFO(TAG)

Add(arrXml_Tags,Tag) //VAR GLOBAL: arrXml_Tags

END

END

END

END


//INSIRA O TARGETCODE


//TARGET CODE ANDROID

arrXml_Tags = ArrayDeleteDuplicateBoller(arrXml_Tags)


//TARGET CODE IOS

ArrayDeleteDuplicate(arrXml_Tags,tccIgnoreSpace)

//TARGET CODE

RESULT (arrXml_Tags)



Procedure LeituraGravacaoXml(XmlRetorno,Tabela)

buf_Foto is Buffer = ""

//Processamento
//<login_id>3</login_id>
//<login_email>teste@teste.com</login_email>
//<login_nome>Usuario teste</login_nome>
//<login_senha>123</login_senha>
//<login_status>1</login_status>
//<login_admin>0</login_admin>

LocalizarTagsEmXml(XmlRetorno)

//Exibindo o resultado
XmlRetorno = ""

X, T is int = 0

QTD_TAGS is int = ArrayCount(arrXml_Tags)

QTD_Resultados is int = ArrayCount(arrXml_TagResult)

IF Tabela = "TJogador"
HDeleteAll(TJogador)
//else...
END

LOOP (QTD_Resultados)

X += 1
T += 1

XmlRetorno += arrXml_Tags[T] + ": " + arrXml_TagResult[X] + CR

IF Tabela = "TJogador"
IF T = 1
TJogador.TJogadorID = arrXml_TagResult[X]
ELSE IF T = 2
TJogador.TNome = arrXml_TagResult[X]
ELSE IF T = 3
TJogador.TClassificacao = arrXml_TagResult[X]
ELSE IF T = 4
TJogador.TFone = arrXml_TagResult[X]
ELSE IF T = 5
buf_Foto = arrXml_TagResult[X]
TJogador.TFoto = Uncrypt(buf_Foto,"",cryptNone)
HAdd(TJogador)
END
//else...
END

IF T = QTD_TAGS THEN
T = 0
XmlRetorno += CR
END

END



Procedure LocalizarTagsEmXml(XML_Retorno is string)

//Variaveis
nXposicaoinicial is int = 0
nXposicaofinal is int = 0

X is int = 0

//Exemplo
//<Xml>
//<Retorno>
//<NoXml ID="3"> // <------------------------ motivo do erro
//<login_id>3</login_id>
//<login_email>teste@teste.com</login_email>
//<login_nome>Usuario teste</login_nome>
//<login_senha>123</login_senha>
//<login_status>1</login_status>
//<login_admin>0</login_admin>
//</NoXml> // <------------------------ motivo do erro
//<Total>1</Total>
//</Retorno>
//</Xml>


//iOS - Apple (iPhone / iPad / iPod)
IF IniOSMode() = True THEN

T, N is int = 0

RegistroXml is string

NoXml is string

i is int = 1

NoXml = XMLExtractString(XML_Retorno,"NoXml",i)

//FUNCAO IDENTIFICA TAG
IdentificarTagsNoXml(XML_Retorno)

nQtde_Registros is int = XMLExtractString(gsGloXmlResultado,"Total") //5

LOOP (nQtde_Registros)

T = 0

N += 1

RegistroXml = PegaNoXml(XML_Retorno,N)

NoXml = XMLExtractString(RegistroXml,"NoXml",i)

FOR EACH stag OF arrXml_Tags //VAR GLOBAL

temp is string = XMLExtractString(NoXml,stag)

Add(arrXml_TagResult, temp )

END

END



//Android
ELSE IF InAndroidMode() = True

T, N is int = 0

IdentificarTagsNoXml(XML_Retorno) //FUNCAO IDENTIFICA TAG

nQtde_tags is int = ArrayCount(arrXml_Tags)

TagRegistro, RegistroXml is string

TagValor is string

nQtde_Registros is int = XMLExtractString(gsGloXmlResultado,"Total") //5

LOOP (nQtde_Registros)

T = 0

N += 1

RegistroXml = PegaNoXml(XML_Retorno,N) //corta

LOOP (nQtde_tags)

T += 1

TagRegistro = arrXml_Tags[T]

TagValor = XMLExtractString(RegistroXml,TagRegistro)

IF TagValor <> ""

Add(arrXml_TagResult,TagValor)

END

END

END

END

RESULT arrXml_TagResult



Procedure PegaNoXml(RetornoXml, NoXmlId) //outra procedure para facilitar, que nem dizia Jac, vamos por partes...

Inicio, Final, Tamanho is int = 0

NoXml is string = "<Xml><Retorno>"

IF RetornoXml <> "" AND NoXmlId > 0 THEN

Inicio = PositionOccurrence(RetornoXml,"<NoXml ID="+Charact(34)+NoXmlId+Charact(34)+">",firstRank,FromBeginning)
IF Inicio = 0 THEN
Inicio = PositionOccurrence(RetornoXml,"<NoXml id="+Charact(34)+NoXmlId+Charact(34)+">",firstRank,FromBeginning)
IF Inicio = 0 THEN
Inicio = PositionOccurrence(RetornoXml,"<NoXml Id="+Charact(34)+NoXmlId+Charact(34)+">",firstRank,FromBeginning)
END
END

IF NoXmlId = 1
Final = PositionOccurrence(RetornoXml,"</NoXml>",firstRank,FromBeginning)
ELSE
Final = PositionOccurrence(RetornoXml,"</NoXml>",nextRank,FromBeginning)
END

Tamanho = Final - Inicio

NoXml += Middle(RetornoXml,Inicio,Tamanho)

END

NoXml += "</NoXml></Retorno></Xml>"

NoXml = Replace(NoXml,CR,"")
NoXml = Replace(NoXml,Charact(13),"")
NoXml = Replace(NoXml,Charact(10),"")

RESULT NoXml



Procedure pws_listar_jogador(id is int)

//LIMPAR VARIAVEIS GLOBAIS
ArrayDeleteAll(arrXml_Tags)

ArrayDeleteAll(arrXml_TagResult)

gsGloXmlResultado = ""

GloTotalRegistros = 0

GloXml = ""


//leitura do webservice
Xml_retorno is string
retornoXml is a ws_listar_jogadorResponse
retornoXml = ws_listar_jogador("20872",id)
Xml_retorno = retornoXml.ws_listar_jogadorResult
Xml_retorno = UTF8ToAnsi(Xml_retorno) //vai trazer tudo foto etc
gsGloXmlResultado = Xml_retorno
GloTotalRegistros = XMLExtractString(gsGloXmlResultado,"Total") //5

//<Xml>
// <Retorno>
// <NoXml id="1">
// <TJogadorID>2</TJogadorID>
// <TNome>Neri</TNome>
// <TClassificacao>600</TClassificacao>
// <TFone>1</TFone>
// <TFoto>1</TFoto>
// </NoXml>
// <NoXml id="2">
// <TJogadorID>1</TJogadorID>
// <TNome>Adriano Boller</TNome>
// <TClassificacao>1</TClassificacao>
// <TFone>1</TFone>
// <TFoto>1</TFoto>
// </NoXml>
// <Total>2</Total>
// </Retorno>
// </Xml>


//leitura do xml
HDeleteAll(TJogador)

LeituraGravacaoXml(Xml_retorno,"TJogador")


RESULTADO




Publicado em abril, 06 2016 - 7:14 PM
Prezados,

Na janela do aplicativo em local procedures:

Procedure ws_listar_jogadores()
x is int = 0
ok, registro is boolean

ok = HExecuteQuery(QRY_ranking_jogadores,hQueryDefault)
IF ok = True
FOR EACH QRY_ranking_jogadores
x += 1
ok = HExecuteQuery(QRY_Update_Ranking,hQueryDefault,x,QRY_ranking_jogadores.TJogadorID)
END
END

ok = HExecuteQuery(QRY_ranking_jogadores,hQueryDefault)
IF ok = True THEN
FOR EACH QRY_ranking_jogadores
registro = HFound(QRY_ranking_jogadores)
IF registro = True THEN
LooperAdd(LOOP_Ranking, QRY_ranking_jogadores.TRanking + TAB + QRY_ranking_jogadores.TNome + TAB + QRY_ranking_jogadores.TFone + TAB + QRY_ranking_jogadores.TClassificacao + TAB + QRY_ranking_jogadores.TFoto)
END
END
END

LooperDisplay(WIN_Lista_Jogadores.LOOP_Ranking,taReExecuteQuery)

LooperDisplay(WIN_Lista_Jogadores.LOOP_Ranking,taInit)




Nenhum comentário:

Postar um comentário