PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 24 → WB - WEBDEV - Webservice Funções Internas para auxilizar a criação de XML
WB - WEBDEV - Webservice Funções Internas para auxilizar a criação de XML
Débuté par adrianoboller, 02 sep. 2015 16:13 - 39 réponses
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:13
Procedure ws_conexao_falha(Tabela)

Servidor is string = ConnNativa..Server

Resultado is string = ""
Resultado = "<Xml><Retorno>"
Resultado += "<"+ NoSpace(Tabela) +" id="+Charact(34)+0+Charact(34)+">"
Resultado += "<Erro>ERRO DE CONEXAO COM O BANCO</Erro>"
Resultado += "<Banco>"+Servidor+"</Banco>"
Resultado += "</"+ NoSpace(Tabela) +">"
Resultado += "</Retorno></Xml>"

ws_a_log(Tabela,"MOBILE",HErrorInfo() +" - "+ ErrorInfo())

RESULT(Resultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:14
Procedure ws_conexao_sucesso(Tabela)

Servidor is string = ConnNativa..Server

Resultado is string = ""
Resultado += "<"+ NoSpace(Tabela) +" id="+Charact(34)+1+Charact(34)+">"
Resultado += "<OK>CONEXAO COM SUCESSO AO BANCO!!!!!!</OK>"
Resultado += "<Banco>"+Servidor+"</Banco>"
Resultado += "</"+ NoSpace(Tabela) +">"
Resultado += "<TOTAL>1</TOTAL>"

RESULT(Resultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:14
Procedure ws_deletou(Tabela)

Resultado is string = ""
Resultado = "<Xml><Retorno>"
Resultado += "<"+ NoSpace(Tabela) +" id="+Charact(34)+0+Charact(34)+">"
Resultado += "<OK>Deletou com Sucesso!</OK>"
Resultado += "</"+ NoSpace(Tabela) +">"
Resultado += "<TOTAL>1</TOTAL>"
Resultado += "</Retorno></Xml>"

RESULT(Resultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:14
Procedure ws_erro_acesso_tabela(Tabela)

Resultado is string = ""
Resultado = "<Xml><Retorno>"
Resultado += "<"+ NoSpace(Tabela) +" id="+Charact(34)+0+Charact(34)+">"
Resultado += "<Erro>ERRO DE ACESSO A TABELA: "+ NoSpace(Tabela) + "</Erro>"
Resultado += "</"+ NoSpace(Tabela) +">"
Resultado += "<TOTAL>0</TOTAL>"
Resultado += "</Retorno></Xml>"

RESULT(Resultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:15
Procedure ws_a_log(Token, Aplicativo, Metodo)

ok is boolean = False

dsQryLog is Data Source

sDataHoraServidor is string = ""

////Ex.: 20150304154034447
//ok = HExecuteSQLQuery(dsQryDataHora, ConnNativa, hQueryWithoutCorrection,"Select CURRENT_TIMESTAMP as datahoraatual")
//IF ok = True THEN
//FOR EACH dsQryDataHora
//DataHoraServidor = dsQryDataHora.datahoraatual
//END
//END

SqlExecutar is string = [
INSERT INTO Webservice_Log
(
DataHora,
Token,
Aplicativo,
Metodo
)
VALUES
(
getdate(),
'@Token@',
'@Aplicativo@',
'@Metodo@'
)
]

//Ip que executou o webservice
Metodo = WebserviceClientIPAddress() + " => " + Metodo

SqlExecutar = Replace(SqlExecutar,"@Token@",Token)
SqlExecutar = Replace(SqlExecutar,"@Aplicativo@",Aplicativo)
SqlExecutar = Replace(SqlExecutar,"@Metodo@",Metodo)

ok = HExecuteSQLQuery(dsQryLog, ConnNativa, hQueryWithoutCorrection,SqlExecutar)

RESULT (ok)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:15
Procedure ws_erro_token(Tabela)

Resultado is string = ""

Resultado = "<Xml><Retorno>"
Resultado += "<"+ NoSpace(Tabela) +" id="+Charact(34)+0+Charact(34)+">"
Resultado += "<Erro>ERRO TOKEN</Erro>"
Resultado += "</"+ NoSpace(Tabela) +">"
Resultado += "<TOTAL>0</TOTAL>"
Resultado += "</Retorno></Xml>"

RESULT(Resultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:16
Procedure ws_gravou(Tabela)

Resultado is string = ""
Resultado = "<Xml><Retorno>"
Resultado += "<"+ NoSpace(Tabela) +" id="+Charact(34)+0+Charact(34)+">"
Resultado += "<OK>Gravou com Sucesso!</OK>"
Resultado += "</"+ NoSpace(Tabela) +">"
Resultado += "<TOTAL>1</TOTAL>"
Resultado += "</Retorno></Xml>"

RESULT(Resultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:16
Procedure ws_msg_retorno(Mensagem)

Resultado is string = ""
Resultado = "<Xml><Retorno>"
Resultado += "<NoXml id="+Charact(34)+1+Charact(34)+">"
Resultado += "<OK>" + Mensagem + "</OK>"
Resultado += "</NoXml>"
Resultado += "<TOTAL>1</TOTAL>"
Resultado += "</Retorno></Xml>"

RESULT(Resultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:17
Procedure ws_nao_deletou(Tabela)

Resultado is string = ""
Resultado = "<Xml><Retorno>"
Resultado += "<"+ NoSpace(Tabela) +" id="+Charact(34)+0+Charact(34)+">"
Resultado += "<Erro>NAO DELETOU!</Erro>"
Resultado += "</"+ NoSpace(Tabela) +">"
Resultado += "<TOTAL>0</TOTAL>"
Resultado += "</Retorno></Xml>"

ws_a_log("Msg","MOBILE",HErrorInfo() +" - "+ ErrorInfo())

RESULT(Resultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:17
Procedure ws_nao_gravou(Tabela)

Resultado is string = ""
Resultado = "<Xml><Retorno>"
Resultado += "<"+ NoSpace(Tabela) +" id="+Charact(34)+0+Charact(34)+">"
Resultado += "<Erro>NAO GRAVOU!</Erro>"
Resultado += "</"+ NoSpace(Tabela) +">"
Resultado += "<TOTAL>0</TOTAL>"
Resultado += "</Retorno></Xml>"

ws_a_log("Msg","MOBILE",HErrorInfo() +" - "+ ErrorInfo())

RESULT(Resultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:17
Procedure ws_parametros_invalidos(Tabela)

Resultado is string = ""

Resultado = "<Xml><Retorno>"
Resultado += "<NoXml id="+Charact(34)+0+Charact(34)+">"
Resultado += "<Erro>PARAMETROS INVALIDOS OU CLIENTE BLOQUEADO: " + Tabela +HErrorInfo()+ErrorInfo()+"</Erro>"
Resultado += "</NoXml>"
Resultado += "<TOTAL>0</TOTAL>"
Resultado += "</Retorno></Xml>"

ws_a_log(Tabela,"MOBILE",HErrorInfo() +" - "+ ErrorInfo())


RESULT(Resultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:17
Procedure ws_retorno(Tabela, NomeCampo, Retorno)

Resultado is string = ""

IF Retorno <> ""
Resultado = "<Xml><Retorno>"
Resultado += "<"+ NoSpace(Tabela) +" id="+Charact(34)+1+Charact(34)+">"
Resultado += "<"+NomeCampo+">"+Retorno+"</"+NomeCampo+">"
Resultado += "</"+ NoSpace(Tabela) +">"
Resultado += "<TOTAL>1</TOTAL>"
Resultado += "</Retorno></Xml>"
END

RESULT(Resultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:18
Procedure ws_token_invalido(Tabela)

Resultado is string = ""
Resultado = "<Xml><Retorno>"
Resultado += "<"+ NoSpace(Tabela) +" id="+Charact(34)+0+Charact(34)+">"
Resultado += "<Erro>TOQUEM INVALIDO OU NAO INFORMADO</Erro>"
Resultado += "</"+ NoSpace(Tabela) +">"
Resultado += "<TOTAL>0</TOTAL>"
Resultado += "</Retorno></Xml>"

ws_a_log("Msg","MOBILE",HErrorInfo() +" - "+ ErrorInfo())

RESULT(Resultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:18
Procedure ws_xml_registro_comeco(Tabela, id)

Resultado is string = ""
Resultado = "<"+ NoSpace(Tabela) +" id="+Charact(34)+ NoSpace(id) +Charact(34)+">" // Tag = <Avisos id=1> controle de registros
RESULT(Resultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:19
Procedure ws_xml_registro_corpo(TabelaCampo, Campo)

Resultado is string = ""
Resultado = "<"+ NoSpace(Campo) +">" + NoSpace(TabelaCampo) + "</"+ NoSpace(Campo) +">"

RESULT(Resultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:19
Procedure ws_xml_registro_final(Tabela)

Resultado is string = ""
Resultado = "</"+ NoSpace(Tabela) +">"

RESULT(Resultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:19
Procedure ws_zero_registros(Tabela)

Resultado is string = ""

Resultado += "<"+ NoSpace(Tabela) +" id="+Charact(34)+0+Charact(34)+">"
Resultado += "<Erro>NENHUM REGISTRO! "+ HErrorInfo() +" - "+ ErrorInfo() +" </Erro>"
Resultado += "</"+ NoSpace(Tabela) +">"

ws_a_log("Msg","MOBILE",HErrorInfo() +" - "+ ErrorInfo())

RESULT(Resultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:22
Procedure ws_token_novo(Token, DDD_Telefone, Acao, Metodo)

ok, TokenOk is boolean = False
Resultado is string = ""

HReadSeekFirst(WS_Token,WS_Token.Token,Token,hKeepFilter)
IF HFound(WS_Token) = True AND WS_Token.Token = Token AND WS_Token.Situacao = "A" AND WS_Token.Telefone_IMEI = DDD_Telefone THEN
TokenOk = True
WS_Token.DataUltimoAcesso = DateSys()
ok = HModify(WS_Token)
IF ok = False THEN
Resultado = ws_erro_acesso_tabela("WS_Token")
RESULT(Resultado)
END
ELSE
TokenOk = False
WS_Tentativas.TentativaAcesso = DateSys()
WS_Tentativas.Token = Token
WS_Tentativas.Metodo = Metodo
WS_Tentativas.Acao = Acao
WS_Tentativas.Telefone_IMEI = DDD_Telefone
ok = HAdd(WS_Tentativas)
IF ok = False THEN
Resultado = ws_erro_acesso_tabela("WS_Tentativas")
RESULT(Resultado)
END
END

RESULT(TokenOk)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:23
Procedure ReplaceNull(Texto, Busca, Troca)

IF Texto <> "" AND Busca <> ""
IF Troca <> "" AND PositionOccurrence(Texto,"'"+ Busca +"'",firstRank,FromBeginning) > 0
Texto = Replace(Texto, "'"+ Busca +"'", "'"+ Troca +"'")
ELSE IF Troca <> "" AND PositionOccurrence(Texto, Busca, firstRank,FromBeginning) > 0
Texto = Replace(Texto, Busca, Troca)
ELSE IF Troca = "" AND PositionOccurrence(Texto,"'"+ Busca +"'",firstRank,FromBeginning) > 0
Texto = Replace(Texto, "'"+ Busca +"'", "null")
ELSE IF Troca = "" AND PositionOccurrence(Texto, Busca, firstRank,FromBeginning) > 0
Texto = Replace(Texto ,Busca, "null")
END
END

RESULT(Texto)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:24
Procedure ws_verifica_conexao()

x is int = 0

Resultado is string = ""

arrResultado is array of string

ArrayDeleteAll(arrResultado)

dsQryDataHora is Data Source

DataHoraServidor is string = ""

OkConn is boolean = False

OkConn = HOpenConnection(ConnNativa)

//Data e Hora do Servidor
IF OkConn = True
//Ex.: 20150304154034447
ok is boolean = HExecuteSQLQuery(dsQryDataHora, ConnNativa, hQueryWithoutCorrection,"Select CURRENT_TIMESTAMP as datahoraatual")
IF ok = True THEN
FOR EACH dsQryDataHora
DataHoraServidor = dsQryDataHora.datahoraatual
END
END
//Trace(DataHoraServidor)
END



IF OkConn = True THEN
Resultado = "<Xml><Retorno>"

Resultado += "<AbriuConnexao>" + OkConn + "</AbriuConnexao>"

Resultado += ws_conexao_sucesso("Tabelas")

Resultado += "<SeuIP>" + NetIPAddress() + "</SeuIP>"

Resultado += "<ListaIP>" + NetListIPAddress() + "</ListaIP>"

Resultado += "<ListaIP>" + WebserviceClientIPAddress() + "</ListaIP>"

Resultado += "<FechouConnexao>" + OkConn + "</FechouConnexao>"

Resultado += "</Retorno></Xml>"
ELSE
Resultado = ws_conexao_falha("TesteConexao")
END

OkConn = HCloseConnection(ConnNativa)

ArrayAdd(arrResultado,Resultado)

RESULT (arrResultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:24
Procedure ws_verifica_datahora_servidor(Token, Telefone_Imei, Acao, DataHoraMobile)

Q is int = 0

Resultado is string = ""

arrResultado is array of string

ArrayDeleteAll(arrResultado)

ok, DataHoraValida, OkConn, TokenOk is boolean = False

dsQryDataHora is Data Source

DataHoraServidor is string = ""

Metodo is string = "ws_verifica_datahora_servidor"

Tabela is string = "Temp"

OkConn = HOpenConnection(ConnNativa)

//Valida intervalo valido
DataHoraServidorMaior, DataHoraServidorMenor, DataHoraMobileCompara is DateTime

//Token
TokenOk = ws_token(Token,Telefone_Imei,Acao,Metodo)

IF TokenOk = False THEN

Resultado = ws_erro_token(Tabela)
Msg is string = Metodo +";"+ Resultado
ws_a_log(Token +" "+ Tabela,"MOBILE",Msg)

ELSE

//LOG
Comando is string = Metodo +";"+ Acao +";"+ DataHoraMobile
ws_a_log(Token +" "+ Tabela,"MOBILE",Comando)

//Data e Hora do Servidor
IF TokenOk = True AND OkConn = True AND DataHoraMobile <> "" AND DataHoraMobile <> Null THEN

//Ex.: 20150304154034447
ok = HExecuteSQLQuery(dsQryDataHora, ConnNativa, hQueryWithoutCorrection,"Select CURRENT_TIMESTAMP as datahoraatual")
IF ok = True THEN
FOR EACH dsQryDataHora
DataHoraServidor = dsQryDataHora.datahoraatual
END
END

//Tamanho padrao
IF Length(DataHoraMobile) < 17 THEN
Q = 17 - Length(DataHoraMobile)
DataHoraMobile = DataHoraMobile + RepeatString("0", Q)
END
IF Length(DataHoraServidor) < 17 THEN
Q = 17 - Length(DataHoraServidor)
DataHoraServidor = DataHoraServidor + RepeatString("0", Q)
END

//Ex.: 20150304154034000
// 12345678901234567
DataHoraServidorMaior..Year = Middle(DataHoraServidor,01,04)
DataHoraServidorMaior..Month = Middle(DataHoraServidor,05,02)
DataHoraServidorMaior..Day = Middle(DataHoraServidor,07,02)
DataHoraServidorMaior..Hour = Middle(DataHoraServidor,09,02)
DataHoraServidorMaior..Minute = Middle(DataHoraServidor,11,02)
DataHoraServidorMaior..Minute += 30 //+30 min

//Ex.: 20150304154034000
// 12345678901234567
DataHoraServidorMenor..Year = Middle(DataHoraServidor,01,04)
DataHoraServidorMenor..Month = Middle(DataHoraServidor,05,02)
DataHoraServidorMenor..Day = Middle(DataHoraServidor,07,02)
DataHoraServidorMenor..Hour = Middle(DataHoraServidor,09,02)
DataHoraServidorMenor..Minute = Middle(DataHoraServidor,11,02)
DataHoraServidorMenor..Minute -= 30 //-30 min

//Ex.: 20150304154034000
// 12345678901234567
DataHoraMobileCompara..Year = Middle(DataHoraMobile,01,04)
DataHoraMobileCompara..Month = Middle(DataHoraMobile,05,02)
DataHoraMobileCompara..Day = Middle(DataHoraMobile,07,02)
DataHoraMobileCompara..Hour = Middle(DataHoraMobile,09,02)
DataHoraMobileCompara..Minute = Middle(DataHoraMobile,11,02)

// 20150304154034447 >= 20150304161034447 20150304154034447 <= 20150304151034447
IF Val(DataHoraMobileCompara) >= Val(DataHoraServidorMaior) OR Val(DataHoraMobileCompara) <= Val(DataHoraServidorMenor) THEN
DataHoraValida = False
ELSE
DataHoraValida = True
END

END



IF OkConn = True THEN

Resultado = "<Xml><Retorno>"

Resultado += "<AbriuConnexao>" + OkConn + "</AbriuConnexao>"

Resultado += "<DataHoraServidor>" + DataHoraServidor + "</DataHoraServidor>"

Resultado += "<DataHoraValida>" + DataHoraValida + "</DataHoraValida>"

Resultado += "<SeuIP>" + NetIPAddress() + "</SeuIP>"

Resultado += "<ListaIP>" + NetListIPAddress() + "</ListaIP>"

Resultado += "<ListaIP>" + WebserviceClientIPAddress() + "</ListaIP>"

Resultado += ws_conexao_sucesso("Tabelas")

Resultado += "<FechouConnexao>" + OkConn + "</FechouConnexao>"

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

ELSE

Resultado = ws_conexao_falha("VerificaDataHoraServidor")

END

OkConn = HCloseConnection(ConnNativa)

END

ArrayAdd(arrResultado,Resultado)

RESULT (arrResultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:25
//Exemplo de USO
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:25
Procedure ws_bairros_select(Token, Telefone_Imei, Acao)

//Token = Codigo unico de acesso com o parceiro ou dispositivo mobile
//Telefone = Numero do Telefone ou Celular
//ACAO = Ler, Incluir, Alterar, Excluir


//Variaveis
X is int = 0

Resultado is string = ""
arrResultado is array of string
ArrayDeleteAll(arrResultado)

TokenOk is boolean = False
Metodo is string = "ws_bairros_select"
No_Xml is string = "NoXml"

IF Token <> "" THEN

OkConn is boolean = False

OkConn = HConnectionOpen(ConnNativa)

IF OkConn = False THEN

Resultado = ws_conexao_falha(No_Xml)

ELSE

TokenOk = ws_token(Token,Telefone_Imei,Acao,Metodo)

IF TokenOk = False THEN

Resultado = ws_erro_token(No_Xml)
Msg is string = Metodo +";"+ Resultado
ws_a_log(Token,"MOBILE",Msg)

ELSE

//LOG
Comando is string = Metodo +";"+ Acao
ws_a_log(Token,"MOBILE",Comando)

END


//Filtro de leitura
IF TokenOk = True AND Upper(Acao) = "SELECT"

ok is boolean = HExecuteQuery(QRY_Select_Bairros,hQueryDefault)

Resultado = "<Xml><Retorno>"

IF ok = True

FOR EACH QRY_Select_Bairros

//Sem filtro

X += 1

Resultado += ws_xml_registro_comeco(No_Xml, X)

Resultado += ws_xml_registro_corpo(QRY_Select_Bairros.BairrosID,"BairrosID")
Resultado += ws_xml_registro_corpo(QRY_Select_Bairros.NomeBairro,"NomeBairro")

Resultado += ws_xml_registro_final(No_Xml)


END

ELSE

IF X = 0 THEN
Resultado = ws_zero_registros(No_Xml)
END

END



Resultado += "<TOTAL>"+X+"</TOTAL>" //Total de Registros para usar em barras de progresso
Resultado += "</Retorno></Xml>"


ELSE

Resultado = ws_parametros_invalidos(No_Xml)

END

END

IF Upper(Acao) <> "SELECT" THEN
Resultado += ws_xml_registro_comeco(No_Xml, X)

Resultado += "<ERRO>ACAO INVALIDA</ERRO>"

Resultado += ws_xml_registro_final(No_Xml)

ws_a_log(No_Xml,"MOBILE",HErrorInfo() +" - "+ ErrorInfo())
END


HConnectionClose(ConnNativa)

ELSE

Resultado = ws_token_invalido(No_Xml)

END

ArrayAdd(arrResultado,Resultado)

RESULT (arrResultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:25
Procedure ws_bairros_filtro_select(Token, Telefone_Imei, Acao, ID, Bairro)


//Token = Codigo unico de acesso com o parceiro ou dispositivo mobile
//Telefone = Numero do Telefone ou Celular
//ACAO = Ler, Incluir, Alterar, Excluir


//Variaveis
X is int = 0

Resultado is string = ""
arrResultado is array of string
ArrayDeleteAll(arrResultado)

TokenOk is boolean = False
Metodo is string = "ws_bairros_filtro_select"
No_Xml is string = "NoXml"

IF Token <> "" THEN

OkConn is boolean = False

OkConn = HConnectionOpen(ConnNativa)

IF OkConn = False THEN

Resultado = ws_conexao_falha(No_Xml)

ELSE

TokenOk = ws_token(Token,Telefone_Imei,Acao,Metodo)

IF TokenOk = False THEN

Resultado = ws_erro_token(No_Xml)
Msg is string = Metodo +";"+ Resultado
ws_a_log(Token,"MOBILE",Msg)

ELSE

//LOG
Comando is string = Metodo +";"+ Acao
ws_a_log(Token,"MOBILE",Comando)

END


//Filtro de leitura
IF TokenOk = True AND Upper(Acao) = "SELECT"

ok is boolean = HExecuteQuery(QRY_SelectBairro_Filtro,hQueryDefault,ID, Bairro)

Resultado = "<Xml><Retorno>"

IF ok = True

FOR EACH QRY_SelectBairro_Filtro

//Sem filtro

X += 1

Resultado += ws_xml_registro_comeco(No_Xml, X)

Resultado += ws_xml_registro_corpo(QRY_SelectBairro_Filtro.BairrosID,"BairrosID")
Resultado += ws_xml_registro_corpo(QRY_SelectBairro_Filtro.NomeBairro,"NomeBairro")

Resultado += ws_xml_registro_final(No_Xml)


END

ELSE

IF X = 0 THEN
Resultado = ws_zero_registros(No_Xml)
END

END



Resultado += "<TOTAL>"+X+"</TOTAL>" //Total de Registros para usar em barras de progresso
Resultado += "</Retorno></Xml>"


ELSE

Resultado = ws_parametros_invalidos(No_Xml)

END

END

IF Upper(Acao) <> "SELECT" THEN
Resultado += ws_xml_registro_comeco(No_Xml, X)

Resultado += "<ERRO>ACAO INVALIDA</ERRO>"

Resultado += ws_xml_registro_final(No_Xml)

ws_a_log(No_Xml,"MOBILE",HErrorInfo() +" - "+ ErrorInfo())
END


HConnectionClose(ConnNativa)

ELSE

Resultado = ws_token_invalido(No_Xml)

END

ArrayAdd(arrResultado,Resultado)

RESULT (arrResultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:26
Procedure ws_bairro_update(Token, Telefone_Imei, Acao, ID, Bairro)

//Token = Codigo unico de acesso com o parceiro ou dispositivo mobile
//Telefone = Numero do Telefone ou Celular
//ACAO = Ler, Incluir, Alterar, Excluir

//Variaveis
X is int = 0

Resultado is string = ""
arrResultado is array of string
ArrayDeleteAll(arrResultado)

TokenOk is boolean = False
Metodo is string = "ws_bairro_update"
No_Xml is string = "NoXml"

IF Token <> "" THEN

OkConn is boolean = False

OkConn = HConnectionOpen(ConnNativa)

IF OkConn = False THEN

Resultado = ws_conexao_falha(No_Xml)

ELSE

TokenOk = ws_token(Token,Telefone_Imei,Acao,Metodo)

IF TokenOk = False THEN

Resultado = ws_erro_token(No_Xml)
Msg is string = Metodo +";"+ Resultado
ws_a_log(Token,"MOBILE",Msg)

ELSE

//LOG
Comando is string = Metodo +";"+ Acao
ws_a_log(Token,"MOBILE",Comando)

END


//Filtro de leitura
IF TokenOk = True AND Upper(Acao) = "UPDATE"

ok is boolean = HExecuteQuery(QRY_UpdateBairro,hQueryDefault,Bairro,ID)

Resultado = "<Xml><Retorno>"

IF ok = True

Resultado = ws_gravou("Bairro")

ELSE

IF X = 0 THEN
Resultado = ws_zero_registros(No_Xml)
END

END



Resultado += "<TOTAL>"+X+"</TOTAL>" //Total de Registros para usar em barras de progresso
Resultado += "</Retorno></Xml>"


ELSE

Resultado = ws_parametros_invalidos(No_Xml)

END

END

IF Upper(Acao) <> "SELECT" THEN
Resultado += ws_xml_registro_comeco(No_Xml, X)

Resultado += "<ERRO>ACAO INVALIDA</ERRO>"

Resultado += ws_xml_registro_final(No_Xml)

ws_a_log(No_Xml,"MOBILE",HErrorInfo() +" - "+ ErrorInfo())
END


HConnectionClose(ConnNativa)

ELSE

Resultado = ws_token_invalido(No_Xml)

END

ArrayAdd(arrResultado,Resultado)

RESULT (arrResultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:26
Procedure ws_bairro_incluir(Token, Telefone_Imei, Acao, Bairro)

//Token = Codigo unico de acesso com o parceiro ou dispositivo mobile
//Telefone = Numero do Telefone ou Celular
//ACAO = Ler, Incluir, Alterar, Excluir

//Variaveis
X is int = 0

Resultado is string = ""
arrResultado is array of string
ArrayDeleteAll(arrResultado)

TokenOk is boolean = False
Metodo is string = "ws_bairro_incluir"
No_Xml is string = "NoXml"

IF Token <> "" THEN

OkConn is boolean = False

OkConn = HConnectionOpen(ConnNativa)

IF OkConn = False THEN

Resultado = ws_conexao_falha(No_Xml)

ELSE

TokenOk = ws_token(Token,Telefone_Imei,Acao,Metodo)

IF TokenOk = False THEN

Resultado = ws_erro_token(No_Xml)
Msg is string = Metodo +";"+ Resultado
ws_a_log(Token,"MOBILE",Msg)

ELSE

//LOG
Comando is string = Metodo +";"+ Acao
ws_a_log(Token,"MOBILE",Comando)

END


//Filtro de leitura
IF TokenOk = True AND Upper(Acao) = "INSERT"

ok is boolean = HExecuteQuery(QRY_IncluirBairro,hQueryDefault,Bairro)

Resultado = "<Xml><Retorno>"

IF ok = True

Resultado = ws_gravou("Bairro")

ELSE

IF X = 0 THEN
Resultado = ws_zero_registros(No_Xml)
END

END



Resultado += "<TOTAL>"+X+"</TOTAL>" //Total de Registros para usar em barras de progresso
Resultado += "</Retorno></Xml>"


ELSE

Resultado = ws_parametros_invalidos(No_Xml)

END

END

IF Upper(Acao) <> "SELECT" THEN
Resultado += ws_xml_registro_comeco(No_Xml, X)

Resultado += "<ERRO>ACAO INVALIDA</ERRO>"

Resultado += ws_xml_registro_final(No_Xml)

ws_a_log(No_Xml,"MOBILE",HErrorInfo() +" - "+ ErrorInfo())
END


HConnectionClose(ConnNativa)

ELSE

Resultado = ws_token_invalido(No_Xml)

END

ArrayAdd(arrResultado,Resultado)

RESULT (arrResultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:26
Procedure ws_bairro_delete_unico(Token, Telefone_Imei, Acao, ID)

//Token = Codigo unico de acesso com o parceiro ou dispositivo mobile
//Telefone = Numero do Telefone ou Celular
//ACAO = Ler, Incluir, Alterar, Excluir

//Variaveis
X is int = 0

Resultado is string = ""
arrResultado is array of string
ArrayDeleteAll(arrResultado)

TokenOk is boolean = False
Metodo is string = "ws_bairro_delete_unico"
No_Xml is string = "NoXml"

IF Token <> "" THEN

OkConn is boolean = False

OkConn = HConnectionOpen(ConnNativa)

IF OkConn = False THEN

Resultado = ws_conexao_falha(No_Xml)

ELSE

TokenOk = ws_token(Token,Telefone_Imei,Acao,Metodo)

IF TokenOk = False THEN

Resultado = ws_erro_token(No_Xml)
Msg is string = Metodo +";"+ Resultado
ws_a_log(Token,"MOBILE",Msg)

ELSE

//LOG
Comando is string = Metodo +";"+ Acao
ws_a_log(Token,"MOBILE",Comando)

END


//Filtro de leitura
IF TokenOk = True AND Upper(Acao) = "DELETE"

ok is boolean = HExecuteQuery(QRY_DeleteBairroUnico,hQueryDefault,ID)

Resultado = "<Xml><Retorno>"

IF ok = True

Resultado = ws_deletou("Bairros")

ELSE

IF X = 0 THEN
Resultado = ws_zero_registros(No_Xml)
END

END



Resultado += "<TOTAL>"+X+"</TOTAL>" //Total de Registros para usar em barras de progresso
Resultado += "</Retorno></Xml>"


ELSE

Resultado = ws_parametros_invalidos(No_Xml)

END

END

IF Upper(Acao) <> "SELECT" THEN
Resultado += ws_xml_registro_comeco(No_Xml, X)

Resultado += "<ERRO>ACAO INVALIDA</ERRO>"

Resultado += ws_xml_registro_final(No_Xml)

ws_a_log(No_Xml,"MOBILE",HErrorInfo() +" - "+ ErrorInfo())
END


HConnectionClose(ConnNativa)

ELSE

Resultado = ws_token_invalido(No_Xml)

END

ArrayAdd(arrResultado,Resultado)

RESULT (arrResultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:27
Procedure ws_bairro_delete_todos(Token, Telefone_Imei, Acao)

//Token = Codigo unico de acesso com o parceiro ou dispositivo mobile
//Telefone = Numero do Telefone ou Celular
//ACAO = Ler, Incluir, Alterar, Excluir

//Variaveis
X is int = 0

Resultado is string = ""
arrResultado is array of string
ArrayDeleteAll(arrResultado)

TokenOk is boolean = False
Metodo is string = "ws_bairro_delete_todos"
No_Xml is string = "NoXml"

IF Token <> "" THEN

OkConn is boolean = False

OkConn = HConnectionOpen(ConnNativa)

IF OkConn = False THEN

Resultado = ws_conexao_falha(No_Xml)

ELSE

TokenOk = ws_token(Token,Telefone_Imei,Acao,Metodo)

IF TokenOk = False THEN

Resultado = ws_erro_token(No_Xml)
Msg is string = Metodo +";"+ Resultado
ws_a_log(Token,"MOBILE",Msg)

ELSE

//LOG
Comando is string = Metodo +";"+ Acao
ws_a_log(Token,"MOBILE",Comando)

END


//Filtro de leitura
IF TokenOk = True AND Upper(Acao) = "DELETE"

ok is boolean = HExecuteQuery(QRY_DeleteBairrosTodos,hQueryDefault)

Resultado = "<Xml><Retorno>"

IF ok = True

Resultado = ws_deletou("Bairros")

ELSE

IF X = 0 THEN
Resultado = ws_zero_registros(No_Xml)
END

END



Resultado += "<TOTAL>"+X+"</TOTAL>" //Total de Registros para usar em barras de progresso
Resultado += "</Retorno></Xml>"


ELSE

Resultado = ws_parametros_invalidos(No_Xml)

END

END

IF Upper(Acao) <> "SELECT" THEN
Resultado += ws_xml_registro_comeco(No_Xml, X)

Resultado += "<ERRO>ACAO INVALIDA</ERRO>"

Resultado += ws_xml_registro_final(No_Xml)

ws_a_log(No_Xml,"MOBILE",HErrorInfo() +" - "+ ErrorInfo())
END


HConnectionClose(ConnNativa)

ELSE

Resultado = ws_token_invalido(No_Xml)

END

ArrayAdd(arrResultado,Resultado)

RESULT (arrResultado)
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:29
Obs.:

Deve ter o analisys criado com a conexao com o banco de dados e as querys definidas para usar esses metodos acima, bem como toda a configuração do WAS.

http://forum.pcsoft.fr/fr-FR/pcsoft.br.windev/443-was-webdev-aplicativo-server/read.awp

:merci:
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:30


Membre enregistré
13 messages
Popularité : +2 (2 votes)
Posté le 02 septembre 2015 - 16:49
Excelente Tutorial, estou finalizando meu webservice seguindo os tutoriais e video () do Adriano..esta ficando show de bola!! Assim que finalizar disponibilizarei o link para verificarem....excelente Ferramenta!!! Parabéns pelos videos e aulas Adriano!!
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 16:55
Obrigado!

Sucesso, se possivel divulgue os meus posts em suas redes sociais...

[ ]´s

Adriano Boller
Representante PcSoft
(41) 9949 1800
adrianoboller@gmail.com
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 17:03
//Exemplo de consumo Webservice
//############################################################################
XML_Retorno is string = ""

Retorno is a ws_treino_select_bairroResponse

Retorno = ws_treino_select_bairro(290,1800,"SELECT")

XML_Retorno = Retorno.ws_treino_select_bairroResult

Info(XML_Retorno)
//############################################################################
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 02 septembre 2015 - 17:05
Obs.: o Webservice ao ser importado deve usar a URL do WSDL que foi criado no Deploy do Projeto

Ex.:

http://177.120.60.30:3750/SITES_WEB/awws/WBS_CX.awws…
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 03 septembre 2015 - 22:28
Observações Importantes para um Webservice:

1 - Segurança - voce deve ter controle quem esta fazendo as consultas em seu codigo deve ter o log que é uma tabela simples do proprio banco que tenha o ip de quem esta acessando o seu webservice e o metodo que esta fazendo consulta. É interessante fazer um controle de execuções indevidas, quantidade de vezes que fez o comando no dia pra saber se nao estao tentando derrubar o serviço... No caso de ser o mesmo ip e muitas vezes a execucao do metodo nao deixe executar o comando que leia o restante do metodo do webservice aborte e notifique via xml que a quantidade excedeu. Faça Log é o unico controle que voce terá para dai tomar as suas atitudes de controle. Crie um token de acesso, não deixe executar nenhum comando se o token nao existir cadastrado em seu banco de dados e que esteja com o status de ativo, só entao dai deixe ler, incluir, alterar e excluir as tabelas do seu banco de dados, veja meus exemplos de webservice todos tem Token.

2 - Firewall - é um dos vilões, que as vezes mal configurado o teu webservice nao funciona, veja se ele esta usando as portas certas e se as regras do seu firewall nao estao bloqueando o acesso e a execução dos metodos externamente.

3 - Testes - Teste em sua rede do ip interno e no ip externo se tem o mesmo comportamento, voce tem que ser capaz de executar os comandos nas duas classes de ips sem problemas, caso contrario peça a ajuda de um administrador de infraestrutura de redes e explique o caso.

4 - Servidor Local de Internet - Você terá que ter 2 links de internet caso o servidor de webservice esteja localmente na sua empresa... voce tera que usar um wifi de outra operadora ou a rede do seu celular com credito e no modo Romaning ou outro meio para poder fazer o Deploy. Pois o Ip externo pode gerar um conflito de dns que acaba nao achando o servidor e o Deploy não acaba funcionando. Estou verificando com a PcSoft ter no Deploy o local para por o ip interno e o o ip externo para evitar esse tipo de manobra.

5 - Anti-virus - Interessante ter um bom antivirus (Kaspersky é um bom antivirus, eu uso o Endpoint Corporante Original e registrado para 40 maquinas, recomendo pela central de controle da rede) e um Hardware DMZ habilitado, pode ser um Microtik bem configurado já ajuda.

6 - Relação de confiança - Entre o servidor de banco de dados e o servidor de webservice no caso de ter cada item/serviço em maquinas diferentes, oas acessos entre as duas maquinas devem ser transparentes, não pode podeir senha entre as duas maquinas ao fazer uma consulta no banco de dados pelo servidor de webservice, faça esse teste, um pequeno programa que faça o connect e leia uma tabela sem problemas. Deve ter o mesmo usuario nas duas maquinas com mesmo nome, senha e diretivas IDENTICAS, isso gera assim uma relação de confiaça entre os 2 servidores.

Julgo que com essas informações consiga ter um bom WEBSERVICE

Forte abraço e sucesso...

--
Adriano Jose Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
______________________________________________
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 19 septembre 2015 - 21:58
Procedure ws_mobile_configuracoes()

DB_InitializeDatabase() // inicializa base de dados

ChangeCharset(charsetOccidental) // SEM ACENTO

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

RetornoXml is a ws_mobile_configResponse

RetornoXml = ws_mobile_config(11111111,222222222,"SELECT")

XML_Retorno = RetornoXml.ws_mobile_configResult

XML_RetornoBuffer is Buffer = UTF8ToAnsi(XML_Retorno) /// evitar erro de utf-8
//############################################################################

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


--
Adriano Jose Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
______________________________________________
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 08 octobre 2015 - 16:26
Procedure ws_a_log(Token, Aplicativo, Metodo)

//Ip que executou o webservice
Ip is string = MeuIpFixo()
IF Ip = ""
ip = WebserviceClientIPAddress()
END
Metodo = Ip + " => " + Metodo

Token = NoAccent(Token)
Token = Middle(Token,1,50)
Token = NoSpace(NoEnter(Token))

Aplicativo = NoAccent(Aplicativo)
Aplicativo = Middle(Aplicativo,1,255)
Aplicativo = NoSpace(NoEnter(Aplicativo))

Metodo = NoAccent(Metodo)
Metodo = Middle(Metodo,1,1000)
Metodo = NoSpace(NoEnter(Metodo))

ERRO_SQL is string = ""

ok is boolean = False

IF Token <> ""

NG0013_Webservice_Log.DataHora = DateSys() + TimeSys()
NG0013_Webservice_Log.Token = Token
NG0013_Webservice_Log.Aplicativo = Aplicativo
NG0013_Webservice_Log.Metodo = Metodo
ok = HAdd(NG0013_Webservice_Log)

IF ok = False THEN
ERRO_SQL = HErrorInfo() + ErrorInfo()
END

END

RESULT (ok)


--
Adriano Jose Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
______________________________________________
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 08 octobre 2015 - 16:26
Procedure MeuIpFixo()

// function showInfos(){
//setTimeout('document.getElementById("div_ip").innerHTML = "177.6.166.73"', 1000);
//setTimeout('document.getElementById("div_reverso").innerHTML = "4130757575.e.brasiltelecom.net.br"', 2000);
//setTimeout('document.getElementById("div_provedor").innerHTML = "VELOX"', 3000);
//
//}

nInicioBloco, nFinalBloco is int = 0

IP is string = ""

Url is string = "http://www.meuip.com.br/"

HTTPTimeOut(1000)

HTTPRequest(Url)

bufRetorno is Buffer = HTTPGetResult(httpResult)

bufRetorno = Replace(bufRetorno,Charact(34),"")

bufRetorno = Replace(bufRetorno,"'","")

//info(bufRetorno)

nInicioBloco = PositionOccurrence(bufRetorno,"document.getElementById(div_ip).innerHTML = ",firstRank,FromBeginning) + Length("document.getElementById(div_ip).innerHTML = ")

//Info(bufRetorno)

IF nInicioBloco > 0 THEN

//document.getElementById(div_ip).innerHTML = 177.6.166.73, 1000);
// setTimeout(document.getElementById(div_reverso).innerHTML = 4130757575.e.brasiltelecom.net.br, 2000);
//setTimeout(document.getElementById(div_provedor).innerHTML = VELOX, 3000);
//
// }
// </script>
//
// <div align=left ><br>
// <H1><b>      Meu IP: <div id=div_ip style=display:inline><!--<span class=style1> detectando (IPv4 ou IPv6)...</span>--> 177.6.166.73 </div> </b>

bufRetorno = Middle(bufRetorno,nInicioBloco,1000)

IF nInicioBloco > 0
bufRetorno = Middle(bufRetorno,1,20)
END

//Info(bufRetorno)

ELSE

// <div align=left ><br>
// <H1><b>      Meu IP: <div id=div_ip style=display:inline><!--<span class=style1> detectando (IPv4 ou IPv6)...</span>--> 177.6.166.73 </div> </b>

nInicioBloco = PositionOccurrence(bufRetorno,"<span class=style1> detectando (IPv4 ou IPv6)...</span>-->",firstRank,FromBeginning) + Length("<span class=style1> detectando (IPv4 ou IPv6)...</span>-->")

IF nInicioBloco > 0
bufRetorno = Middle(bufRetorno,nInicioBloco,20)
END

//Info(bufRetorno)

END


//192.168.1.180, 1000);

IF bufRetorno <> ""

nFinalBloco = PositionOccurrence(bufRetorno,",",firstRank,FromBeginning) - 1

IF nFinalBloco > 0 THEN
bufRetorno = Middle(bufRetorno,1,nFinalBloco)
END

END

bufRetorno = Replace(bufRetorno,"=","")

bufRetorno = NoSpace(bufRetorno)

IP = NoSpace(bufRetorno)

RESULT(IP)


--
Adriano Jose Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
______________________________________________
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 06 mai 2016 - 01:21
PREZADOS,

NAO ESQUEÇAM DE COLOCAR NO GLOBAL DA PROCEDURE NA PRIMEIRA LINHA ESSE CODIGO OK:

//server
arr_Resultados is array of string

//Declara webservice//
gsValorMemorizado is string = 1 //Necessario um valor

DeclareWebserviceContext(gsValorMemorizado) //Principal funcao que declara webservice//

DeclareWebserviceContext(arr_Resultados) //Principal funcao que declara webservice//


SEM ISSO NAO APARECE O(S) CUBO(S) AZUL(IS)...

:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
2 935 messages
Popularité : +89 (91 votes)
Posté le 09 juin 2016 - 16:05
Prezado,

Lembro e é importante para um webservice controles de TOKEN, controles que capturem IP de quem consome, controles que façam log de tudo que acontece via Webservice, lembro que podem sofrer Force Brute, lembro que tem muito mais do que apenas citei nos meus posts. Vejam o webservice como acesso ao seu banco e a sua empresa, todos os cuidados devem ser tomados e ainda é pouco... mas é muito melhor incomparavelmente do que colocar a string de conexão dentro do mobile e dar a chave ao bandido de bandeja para ele roubar os dados e dar drop em seu banco.

:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/