PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 24 → WX - EXEMPLO COMPLETO DE WEBSERVICE COM WEBDEV E WINDEV MOBILE
WX - EXEMPLO COMPLETO DE WEBSERVICE COM WEBDEV E WINDEV MOBILE
Iniciado por BOLLER, ago., 16 2017 7:58 PM - 8 respostas
Membro registado
2.916 mensagems
Popularité : +89 (91 votes)
Publicado em agosto, 16 2017 - 7:58 PM
GLOBAL DO PROJETO WEBDEV

1.o CRIA A ANÁLISE COM SUAS TABELAS E RELACIONAMENTOS

//Global
HCreationIfNotFound("*")
HModifyStructure("*",hmsBackgroundTask)
GloToken is string = "0xvmkedovnvodwq3913jc0333v10934567890kjhgfdfghjk842698672"


PROCEDURE INTERNAS

// Summary: <specify the procedure action>
// Syntax:
//[ <Result> = ] Global_SQLConectarBanco ()
//
// Parameters:
// None
// Return Value:
// boolean: // None
//
// For instance:
// Indicate an example.
//
Procedure PRIVATE Global_SQLConectarBanco()

// Variáveis.
VarGlo is composed WITH
ConfigServerUsuario is string
ConfigServerSenha is string
ConfigServerBancoDados is string
ConfigServerIP is string
END

// Sets.
//if ontestmode() = true then
// VarGlo.ConfigServerUsuario = "sa_admin"
// VarGlo.ConfigServerSenha = "webservice01"
// VarGlo.ConfigServerBancoDados = "Sistema"
// VarGlo.ConfigServerIP = "localhost\sql2017express"
//else
VarGlo.ConfigServerUsuario = "admin"
VarGlo.ConfigServerSenha = "@!nt2017"
VarGlo.ConfigServerBancoDados = "baseadm"
VarGlo.ConfigServerIP = "189.130.16.11"
//END

// Conectar.
IF HDescribeConnection(ConexaoBancoDeDados,VarGlo.ConfigServerUsuario,VarGlo.ConfigServerSenha,VarGlo.ConfigServerIP,VarGlo.ConfigServerBancoDados,hNativeAccessSQLServer,hOReadWrite) THEN
IF HOpenConnection(ConexaoBancoDeDados) THEN
IF HChangeConnection("*",ConexaoBancoDeDados) THEN
HCheckStructure("*",hNoCheck)
RESULT True
ELSE
Error("HDescribeConnection (HChangeConnection): " + VarGlo.ConfigServerBancoDados + CR + "Código do Erro: " + CR + HErrorInfo())
RESULT False
END
ELSE
Error("HDescribeConnection (HOpenConnection): " + VarGlo.ConfigServerBancoDados + CR + "Código do Erro: " + CR + HErrorInfo())
RESULT False
END
ELSE
Error("HDescribeConnection (HDescribeConnection): " + VarGlo.ConfigServerBancoDados + CR + "Código do Erro: " + CR + HErrorInfo())
RESULT False
END



// Summary: <specify the procedure action>
// Syntax:
//[ <Result> = ] Global_Xml01_TagInicial (<paramID>)
//
// Parameters:
// paramID: <specify the role of paramNomeTag>
// Return Value:
// ANSI string: // None
//
// For instance:
// Indicate an example.
//
Procedure PRIVATE Global_Xml01_TagInicial(paramID)

// Variáveis.
Resultado is string

// Nó.
Resultado = "<NoXml id=" + Charact(34) + NoSpace(paramID) + Charact(34) + ">"

// Resultado
RESULT Resultado



// Summary: <specify the procedure action>
// Syntax:
//[ <Result> = ] Global_Xml02_TagDetalhe (<paramTabelaCampo>, <paramDado>)
//
// Parameters:
// paramTabelaCampo: <specify the role of paramNomeTag>
// paramDado: <specify the role of paramDado>
// Return Value:
// ANSI string: // None
//
// For instance:
// Indicate an example.
//
Procedure PRIVATE Global_Xml02_TagDetalhe(paramTabelaCampo, paramDado)

// Variáveis.
Resultado is string

// Nó.
Resultado = "<"+ NoSpace(paramTabelaCampo) +">" + NoSpace(paramDado) + "</"+ NoSpace(paramTabelaCampo) +">"

// Resultado
RESULT Resultado



// Summary: <specify the procedure action>
// Syntax:
//[ <Result> = ] Global_Xml03_TagTotal (<paramTotal>)
//
// Parameters:
// paramTotal: <specify the role of paramTotal>
// Return Value:
// ANSI string: // None
//
// For instance:
// Indicate an example.
//
// paramNomeTag: <specify the role of paramNomeTag>
Procedure PRIVATE Global_Xml03_TagTotal(paramTotal)

// Variáveis.
Resultado is string

// Nó.
Resultado = "<Total>"+paramTotal+"</Total>"

// Resultado
RESULT Resultado



// Summary: <specify the procedure action>
// Syntax:
//[ <Result> = ] Global_Xml04_TagFinal ()
//
// Parameters:
// None
// Return Value:
// ANSI string: // None
//
// For instance:
// Indicate an example.
//
// paramNomeTag: <specify the role of paramNomeTag>
Procedure PRIVATE Global_Xml04_TagFinal()

// Variáveis.
Resultado is string

// Nó.
Resultado = "</NoXml>"

// Resultado
RESULT Resultado



PROCEDURES PUBLICAS

NO GLOBAL DA PROCEDURE

//Declara webservice//
arr_Resultados is array of string
gsValorMemorizado is string = 1 //Necessario um valor
DeclareWebserviceContext(gsValorMemorizado) //Principal funcao que declara webservice//
DeclareWebserviceContext(arr_Resultados) //Principal funcao que declara webservice//



Procedure WS_ConsultarUsuario(token, paramCPF, paramSenha)

// Variáveis.
bLoginValido is boolean = False
sXMLRetorno is string
arrayResultadoLocal is array of string
sSQL is string
dsSelect is Data Source

//
IF Global_SQLConectarBanco() = True AND GloToken = token THEN

sSQL = "EXEC [DBO].[PR_LOGIN] '%1','%2'" //STORED PROCEDURE DO BANCO
sSQL = StringBuild(sSQL, paramCPF, paramSenha)
IF HExecuteSQLQuery(dsSelect, ConexaoBancoDeDados, hQueryWithoutCorrection, sSQL) THEN
sXMLRetorno = ""
sXMLRetorno += "<Xml><Retorno>"
HReadFirst(dsSelect,hNoRefresh)
IF HNbRec(dsSelect) > 0 THEN
sXMLRetorno += Global_Xml01_TagInicial(1)
sXMLRetorno += Global_Xml02_TagDetalhe("usuario_id",dsSelect.COD_USUR)
sXMLRetorno += Global_Xml02_TagDetalhe("usuario_cpf",dsSelect.CNPJ_CPF_USUR)
sXMLRetorno += Global_Xml02_TagDetalhe("usuario_nome",dsSelect.NOM_USUR)
sXMLRetorno += Global_Xml02_TagDetalhe("usuario_senha",dsSelect.PASSWORDHASH)
sXMLRetorno += Global_Xml02_TagDetalhe("message","Sucesso")
sXMLRetorno += Global_Xml04_TagFinal()
sXMLRetorno += Global_Xml03_TagTotal(1)
ELSE
sXMLRetorno += "<Error>Zero registro<Error>"
END
sXMLRetorno += "</Retorno></Xml>"
ELSE
sXMLRetorno = ""
sXMLRetorno += "<Error>Erro consulta<Error>"
sXMLRetorno += Global_Xml03_TagTotal(0)
END
HCancelDeclaration(dsSelect)
ELSE
sXMLRetorno = ""
sXMLRetorno += "<Error>Sem conexão<Error>"
sXMLRetorno += Global_Xml03_TagTotal(0)

END
HCloseConnection(ConexaoBancoDeDados)

// Resultado.
Add(arrayResultadoLocal, sXMLRetorno)

RESULT (arrayResultadoLocal)



Procedure WS_CriptaString(token, Texto01, Texto02)

// Variáveis.
bLoginValido is boolean = False
sXMLRetorno is string
arrayResultadoLocal is array of string
sSQL is string
dsSelect is Data Source

//
IF Global_SQLConectarBanco() = True AND GloToken = token THEN

sSQL = "EXEC [DBO].[CriptarString] '%1', %2"
sSQL = StringBuild(sSQL, Texto01, Texto02)
IF HExecuteSQLQuery(dsSelect, ConexaoBancoDeDados, hQueryWithoutCorrection, sSQL) THEN
sXMLRetorno = ""
sXMLRetorno += "<Xml><Retorno>"
HReadFirst(dsSelect,hNoRefresh)
IF HNbRec(dsSelect) > 0 THEN
sXMLRetorno += Global_Xml01_TagInicial(1)
sXMLRetorno += Global_Xml02_TagDetalhe("retorno",dsSelect.retorno)
sXMLRetorno += Global_Xml04_TagFinal()
sXMLRetorno += Global_Xml03_TagTotal(1)
ELSE
sXMLRetorno += "<Error>Zero registro<Error>"
END
sXMLRetorno += "</Retorno></Xml>"
ELSE
sXMLRetorno = ""
sXMLRetorno += "<Error>Erro consulta<Error>"
sXMLRetorno += Global_Xml03_TagTotal(0)
END
HCancelDeclaration(dsSelect)
ELSE
sXMLRetorno = ""
sXMLRetorno += "<Error>Sem conexão<Error>"
sXMLRetorno += Global_Xml03_TagTotal(0)

END
HCloseConnection(ConexaoBancoDeDados)

// Resultado.
Add(arrayResultadoLocal, sXMLRetorno)
RESULT (arrayResultadoLocal)



Procedure WS_RotasGoogleMaps(enderecoOrigem is string, enderecoDestino is string)

Resultado is string

arrayResultadoLocal is array of string

IF enderecoOrigem = "" OR enderecoDestino = "" THEN
RESULT(Null)
END

enderecoOrigem = Replace(enderecoOrigem," ","+")
enderecoDestino = Replace(enderecoDestino," ","+")
enderecoOrigem = NoAccent(NoSpace(enderecoOrigem))
enderecoDestino = NoAccent(NoSpace(enderecoDestino))

HTTPCreateForm("GoogleMaps")
HTTPAddParameter("GoogleMaps","origin", enderecoOrigem)
HTTPAddParameter("GoogleMaps","destination", enderecoDestino)
HTTPAddParameter("GoogleMaps","language", "pt-BR")
HTTPAddParameter("GoogleMaps","region", "br")
HTTPAddParameter("GoogleMaps","units", "metric")

HTTPAddParameter("GoogleMaps","key","AIzaSyDbSVKYPwB1a-_vPbDzAr6LgAfIj4iW2hc") //CHAVE GOOGLE

cMyRequest is a httpRequest
cMyRequest..URL = "https://maps.googleapis.com/maps/api/directions/xml"
cMyRequest..Method = httpGet

cMyResponse is a httpResponse = HTTPSendForm("GoogleMaps", cMyRequest)

IF cMyResponse..StatusCode <> 200 THEN // Se não funcionou
RESULT(Null)
END

xmlGoogle is a xmlDocument = XMLOpen(cMyResponse..Content, fromString)
IF NOT xmlGoogle.DirectionsResponse.status..Text ~= "OK" THEN
RESULT(Null)
END

//Lendo nos unicos

Resultado = "<Xml><Resultado><NoXml>"
Resultado += "<enderecoOrigem>" + xmlGoogle.DirectionsResponse.route.leg.start_address + "</enderecoOrigem>"
Resultado += "<enderecoDestino>" + xmlGoogle.DirectionsResponse.route.leg.end_address + "</enderecoDestino>"
Resultado += "<durationvalue>" + xmlGoogle.DirectionsResponse.route.leg.duration.value + "</durationvalue>"
Resultado += "<durationtext>" + xmlGoogle.DirectionsResponse.route.leg.duration.text + "</durationtext>"
Resultado += "<distancevalue>" + xmlGoogle.DirectionsResponse.route.leg.distance.value + "</distancevalue>"
Resultado += "<distancetext>" + xmlGoogle.DirectionsResponse.route.leg.distance.text + "</distancetext>"
Resultado += "<polyline>" + xmlGoogle.DirectionsResponse.route.overview_polyline.points + "</polyline>"
Resultado += "<latitudeOrigem>" + xmlGoogle.DirectionsResponse.route.leg.start_location.lat + "</latitudeOrigem>"
Resultado += "<longitudeOrigem>" + xmlGoogle.DirectionsResponse.route.leg.start_location.lng + "</longitudeOrigem>"
Resultado += "<latitudeDestino>" + xmlGoogle.DirectionsResponse.route.leg.end_location.lat + "</latitudeDestino>"
Resultado += "<longitudeDestino>" + xmlGoogle.DirectionsResponse.route.leg.end_location.lng + "</longitudeDestino>"

//Loop nos nós do xml das instrucoes de rota
Contador is int = 1
FOR EACH legNode OF xmlGoogle.DirectionsResponse.route.leg
IF legNode..Name = "step" THEN
HTML is string = legNode.html_instructions
Distancia is int = legNode.distance.value
Resultado += "<instrucao id="+ Contador + ">" + HTML + " [" + Distancia + "]" + "</instrucao>"
Contador++
END
END

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

Add(arrayResultadoLocal, Resultado)

RESULT(arrayResultadoLocal)



Procedure Ws_BuscaEndereco(Token, Endereco)

//Variaveis
arrResultado is array of string
ok is boolean = False
X is int = 0
nTokenOk is int = 0
sTabela is string = "Enderecos"
Resultado is string = ""
sErro is string = ""

//Code
IF Token <> "" AND Token = GloToken

OkConn is boolean = False

OkConn = HConnectionOpen(MyHfsql)

IF OkConn = True THEN

ok = HExecuteQuery(QRY_Select_Cliente,MyHfsql,hQueryWithoutHFCorrection,Token)

IF ok = True THEN

FOR EACH QRY_Select_Cliente

IF HFound(QRY_Select_Cliente) = True THEN

ok = HExecuteQuery(QRY_Select_CEP,MyHfsql,hQueryWithoutCorrection,Endereco)

IF ok =True THEN

Resultado = "<Xml><Retorno>"

FOR EACH QRY_Select_CEP

IF HFound(QRY_Select_CEP) = True AND X = 0

X += 1

Resultado += ws_xml_registro_comeco(X)

Resultado += ws_xml_registro_corpo(QRY_Select_CEP.Sequencial,"Sequencial")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.LogradouroUpper,"LogradouroUpper")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.LogradouroAbrev,"LogradouroAbrev")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.Logradouro,"Logradouro")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.LogradouroCompl,"LogradouroCompl")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.Fonetica,"Fonetica")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.LogradouroTipo,"LogradouroTipo")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.CEP,"CEP")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.Bairro,"Bairro")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.BairroAbrev,"BairroAbrev")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.IDCidade,"IDCidade")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.Cidade,"Cidade")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.SubCidadeAbrev,"SubCidadeAbrev")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.SubCidade,"SubCidade")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.CodIBGECid,"CodIBGECid")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.CodIBGEUF,"CodIBGEUF")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.UF,"UF")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.Pais,"Pais")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.LogradouroIniciais,"LogradouroIniciais")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.NumeroInicial,"NumeroInicial")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.NumeroFinal,"NumeroFinal")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.DMSLatitude,"DMSLatitude")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.DMSLongitude,"DMSLongitude")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.GDLatitude,"GDLatitude")
Resultado += ws_xml_registro_corpo(QRY_Select_CEP.GDLongitude,"GDLongitude")

Resultado += ws_xml_registro_final()

END

END

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

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

ELSE

Resultado += "<Error>Erro 002 tabela<Error>"

END

ELSE

Resultado += "<Error>Erro 003 tabela<Error>"

END


END


ELSE

Resultado += "<Error>Erro 004 tabela<Error>"

END


ELSE

Resultado += "<Error>Erro 005 Conexao<Error>"

END

HReset(QRY_Select_CEP) // <----- Limpar atenção

HReset(QRY_Select_Cliente) // <----- Limpar atenção

HConnectionClose(ConnNativa)

ELSE

Resultado += "<Error>Token invalido<Error>"

END

Tamanho is int = Length(Resultado)

Add(arrResultado,Resultado)

RESULT (arrResultado)



//---------------------------------------- WINDEV MOBILE ------------------------

2.o GLOBAL DO PROJETO

//Global
HCreationIfNotFound("*")
HModifyStructure("*",hmsBackgroundTask)
GloToken is string = "0xvmkedovnvodwq3913jc0333v10934567890kjhgfdfghjk842698672"



Procedure Ws_ConsultaUsuario(CPF,SENHA)

ok, Confere is boolean

x is int = 0

nCountError is int = 0

arrXml_TagResult is array of strings

ChangeCharset(charsetOccidental) // SEM ACENTO

CPF = Replace(CPF,".","")

CPF = Replace(CPF,"-","")

IF CPF <> "" AND SENHA <> 0 AND PingVPN() = True THEN

//########################################################################

sXML_Retorno, sXML_RetornoMd5 is string = ""

RetornoXml is a WS_ConsultarUsuarioResponse

RetornoXml = WS_ConsultarUsuario(GloToken,CPF,SENHA)

sXML_Retorno = RetornoXml.WS_ConsultarUsuarioResult

sXML_Retorno = RemoveAcentos(sXML_Retorno)

Debug("WS_ConsultarUsuario",sXML_Retorno)

arrXml_TagResult = Android_iOs_ReadXml(sXML_Retorno,"NoXml")

//########################################################################

IF PositionOccurrence(sXML_Retorno,"NoXml",firstRank,FromBeginning) > 0 THEN

HCreationIfNotFound("*")

HCheckStructure("*",hNoCheck)


XmlDoc is a xmlDocument
XmlDoc = XMLOpen(sXML_Retorno,fromString)
NoXml is a xmlNode

FOR EACH NoXml OF XmlDoc.Xml.Retorno on NoXml

GloIDFun = XmlDoc.Xml.Retorno.NoXml.usuario_id

GloFuncCPF = XmlDoc.Xml.Retorno.NoXml.usuario_cpf

GloFuncSenha = "0x" +XmlDoc.Xml.Retorno.NoXml.usuario_senha //md5

GloFuncCPF = Replace(GloFuncCPF,".","")

GloFuncCPF = Replace(GloFuncCPF,"-","")


//########################################################################

RetornoXml is a WS_CriptaStringResponse

RetornoXml = WS_CriptaString(GloToken,SENHA,GloFuncSenha)

sXML_Retorno = RetornoXmlWS_CriptaStringResult

Retorno is int = PositionOccurrence(sXML_Retorno,"<retorno>1</retorno>",firstRank,FromBeginning)

//########################################################################

IF Retorno > 0 THEN
Confere = 1
ELSE
Confere = 0
END

IF CPF = GloFuncCPF AND Confere = 1 AND CPF <> ""

ok = HReadSeekFirst(t001_funcionario,t001_cpf,CPF,hKeepFilter)

IF ok = True AND HFound(t001_funcionario) = True THEN

//altera
IF HFound(t001_funcionario) = True THEN
t001_funcionario.t001_usuariosID = XmlDoc.Xml.Retorno.NoXml.usuario_id
t001_funcionario.t001_nome = XmlDoc.Xml.Retorno.NoXml.usuario_nome
t001_funcionario.t001_cpf = XmlDoc.Xml.Retorno.NoXml.usuario_cpf
t001_funcionario.t001_senha = SENHA
t001_funcionario.t001_lembrarSenha = GloCheckbox
ok = HModify(t001_funcionario)
IF ok = False THEN
GloIDFun = 0
GloFuncCPF = 0
ok = False
ELSE
ok = True
END
END

ELSE

//Inclui
t001_funcionario.t001_usuariosID = XmlDoc.Xml.Retorno.NoXml.usuario_id
t001_funcionario.t001_nome = XmlDoc.Xml.Retorno.NoXml.usuario_nome
t001_funcionario.t001_cpf = XmlDoc.Xml.Retorno.NoXml.usuario_cpf
t001_funcionario.t001_senha = SENHA
t001_funcionario.t001_lembrarSenha = GloCheckbox
ok = HAdd(t001_funcionario)
IF ok = False THEN
GloIDFun = 0
GloFuncCPF = 0
ok = False
ELSE
ok = True
END

END

ELSE
ok = False
END

END

ELSE

ok = False

END

END

RESULT(ok)



Procedure Ws_RegistrarAtivaCancela(Instalacao, Situacao, MacAddress, NomeWifi, SenhaWifi, InicioInstalacao, FimInstalacao, CodigoMotivoCancelamento, Observacao)

GloDataHora = FormatarDataHora()

ok is boolean

IF Instalacao <> "" AND Instalacao <> 0 AND PingVPN() = True

sXML_Retorno is string = ""

RetornoXml is a WS_RegistrarAtivacaoResponse
//Instalacao, Situacao, MacAddress, NomeWifi, SenhaWifi, InicioInstalacao, FimInstalacao, CodigoMotivoCancelamento, Observacao)

RetornoXml = WS_RegistrarAtivacao(GloToken,Instalacao,Situacao,MacAddress,NomeWifi,SenhaWifi,InicioInstalacao,FimInstalacao,CodigoMotivoCancelamento,Observacao)

sXML_Retorno = RetornoXml.WS_RegistrarAtivacaoResult

sXML_Retorno = RemoveAcentos(sXML_Retorno)

Debug("WS_RegistrarAtivacao",sXML_Retorno)

//info(sXML_Retorno)

//sXML_Retorno = UnicodeToAnsi(sXML_Retorno)

IF PositionOccurrence(sXML_Retorno,"NoXml",firstRank,FromBeginning) > 0 THEN

//on line
ok = True

ELSE

//Off line
ok = False

END

END

RESULT(ok)


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Mensagem modificada, agosto, 16 2017 - 8:09 PM
Membro registado
2.916 mensagems
Popularité : +89 (91 votes)
Publicado em agosto, 16 2017 - 8:50 PM
//Exemplo de XML

<Xml> <Retorno>
<NoXml id="1"> <CodigoCliente>1</CodigoCliente><Nome>Adriano Boller</Nome> </NoXml>
<NoXml id="2"> <CodigoCliente>10</CodigoCliente><Nome>Juliana Boller</Nome> </NoXml>
<NoXml id="3"> <CodigoCliente>100</CodigoCliente><Nome>Rafael Boller</Nome> </NoXml>
<NoXml id="4"> <CodigoCliente>1000</CodigoCliente><Nome>Larissa Boller</Nome> </NoXml>
<NoXml id="5"> <CodigoCliente>10000</CodigoCliente><Nome>Gabriel Boller</Nome> </NoXml>
<Total>5</Total>
</Retorno></Xml>


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Mensagem modificada, agosto, 16 2017 - 8:51 PM
Membro registado
2.916 mensagems
Popularité : +89 (91 votes)
Publicado em agosto, 16 2017 - 9:01 PM
Canal no Youtube



:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
2.916 mensagems
Popularité : +89 (91 votes)
Publicado em agosto, 16 2017 - 9:26 PM


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
2.916 mensagems
Popularité : +89 (91 votes)
Publicado em agosto, 16 2017 - 10:35 PM
Vídeo referente a postagem acima



:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
2.916 mensagems
Popularité : +89 (91 votes)
Publicado em agosto, 17 2017 - 3:20 AM
ATIVANDO REGRAS DE FIREWALL VIA SCRIPT

reset ao padrao
netsh advfirewall reset

Bloquear IP
c:\> netsh advfirewall firewall add rule name="IP Block" dir=in interface=any action=block remoteip=198.51.100.108/32

Status IP
c:\> netsh advfirewall firewall show rule name="IP Block"

Desbloquear IP
c:\> netsh advfirewall firewall delete rule name="IP Block" remoteip=198.51.100.108/32


Bloquear o Facebook
netsh advfirewall firewall add rule name="Block facebook" dir=in action=block remoteip=31.13.24.0/21,31.13.64.0/19,31.13.64.0/24,31.13.69.0/24,31.13.70.0/24,31.13.71.0/24,31.13.72.0/24,31.13.73.0/24,31.13.75.0/24,31.13.76.0/24,31.13.77.0/24,31.13.78.0/24,31.13.79.0/24,31.13.80.0/24,66.220.144.0/20,66.220.144.0/21,66.220.149.11/16,66.220.152.0/21,66.220.158.11/16,66.220.159.0/24,69.63.176.0/21,69.63.176.0/24,69.63.184.0/21,69.171.224.0/19,69.171.224.0/20,69.171.224.37/16,69.171.229.11/16,69.171.239.0/24,69.171.240.0/20,69.171.242.11/16,69.171.255.0/24,74.119.76.0/22,173.252.64.0/19,173.252.70.0/24,173.252.96.0/19,204.15.20.0/22

desativar a firewall no perfil Domínio
netsh advfirewall set domainprofile state off

desativar a firewall no perfil Privado
netsh advfirewall set privateprofile state off

desativar a firewall no perfil Público
netsh advfirewall set publicprofile state off

desativar a firewall para todos os perfis
netsh advfirewall set all state off / Netsh advfirewall set allprofiles state off

Ativara firewall no perfil Domínio
netsh advfirewall set domainprofile state on

Ativara firewall no perfil Privado
netsh advfirewall set privateprofile state on

Ativara firewall no perfil Público
netsh advfirewall set publicprofile state on

Ativara firewall para todos os perfis
netsh advfirewall set all state on

Exportar todas as configurações da firewall
netsh advfirewall export c:\advfirewall.wfw

Importar ficheiro com as configurações da firewall
netsh advfirewall import c:\advfirewall.wfw

Adicionar uma excepção para uma aplicação em específico
netsh advfirewall firewall add rule name=regra_para_permitir_acesso_inbound_do_notepad dir=in program=c:\Windows\System32\notepad.exe action=allow

Criar uma excepção para o porto 80 do protocolo TCP
netsh advfirewall firewall add rule name= permitir_trafego_porto_80 dir=in action=allow protocol=TCP localport=80

Repor as configurações originais da firewall
netsh advfirewall reset

Registar todas as ligações ignoradas pela firewal referente a todos os perfis
netsh advfirewall set allprofiles logging droppedconnections enable

Registar todas as ligações efectuadas com sucesso referente a todos os perfis
netsh advfirewall set allprofiles logging allowedconnections enable

Verificar as configurações gerais da firewall referente a todos os perfis
netsh advfirewall show allprofiles


:: Adicionando regra para bloquear porta 8000
netsh advfirewall firewall add rule name="disablePort8000" protocol=ALL dir=in localport=8000 action=block


:: Bloqueando o 'Programa'
netsh advfirewall firewall add rule name="Programa" dir=in program="C:\Pasta\Programa.exe" action=block

Para abrir portas de saida no windows xp
netsh firewall add portopening TCP 80 "abrir a porta 8888"

Para abrir portas de saida no Windows 7, 8
netsh advfirewall firewall adicionar nome da regra = "Abrir porta 8888" dir = ação = permitir protocolo = TCP localport = 8888

COMANDO PARA LIBERAR PORTA NO FIREWALL.
netsh firewall set portopening TCP 3070 "Firebird Server - 3070"

onde:
netsh: Executável da ferramenta.
firewall: É um parâmetro da ferramenta NETSH e indica que vamos ‘trabalhar’ no FIREWALL do Windows.
set: É um parâmetro da ferramenta NETSH Firewall e indica que vamos configurar o firewall.
portopening: É um parâmetro do comando NETSH firewall SET e indica que vamos configurar portas do firewall.
TCP: Define o protocolo usado para acessar o servidor, no geral vai ser TCP ou, menos frequente: UDP.
3050: A porta para a qual desejamos liberar o acesso.
“Firebird Server – 3050”: Esse é uma informação textual que vai aparecer na configuração do firewall, de forma que você identifique o que faz aquela configuração.

*** A parte que está em negrito é fixa do comando, a parte que está em itálico variam de acordo com a necessidade.

COMANDO PARA LIBERAR PROGRAMA NO FIREWALL.
netsh firewall set allowedprogram c:\progra~1\firebird\fbserver.exe "Firebird server (app)" ENABLE SUBNET ALL

Onde:
netsh: Executável da ferramenta.
firewall: É um parâmetro da ferramenta NETSH e indica que vamos ‘trabalhar’ no FIREWALL do Windows.
set: É um parâmetro da ferramenta NETSH Firewall e indica que vamos configurar o firewall.
allowedprogram: É um parâmetro do comando NETSH firewall SET e indica que vamos configurar liberação de programas no firewall.
c:\progra~1\firebird\fbserver.exe: Caminho completo do executável do programa que será liberado.
“Firebird server (app)”: Esse é uma informação textual que vai aparecer na configuração do firewall, de forma que você identifique o que faz aquela configuração.
ENABLE: Parâmetro que indica permissão pelo firewall (caso queira NÃO permitir, usar DISABLE).
SUBNET: Indica a abrangência da liberação, neste caso estamos liberando para a mesma sub-rede (uma rede local por exemplo).
ALL: Indica em qual perfil de firewall será liberado o programa, neste caso estamos liberando para todos os perfis de firewall.

*** A parte que está em negrito é fixa do comando, a parte que está em itálico variam de acordo com a necessidade.

COMANDO PARA VISUALIZAR QUAIS PORTAS ESTÃO LIBERADAS NO FIREWALL
netsh firewall show portopening

COMANDO PARA VISUALIZAR QUAIS PROGRAMAS ESTÃO LIBERADAS NO FIREWALL
netsh firewall show allowedprogram

Para informações mais detalhadas, entre em contato pelo jcsuporte@gmail.com ou digite netsh firewall /? no prompt de comando

comandos devidamente mostrados e explicados, segue algumas explicações para quem não sabe bem o que é e como funciona as PORTAs que liberamos no firewall.

Quando um usuário abre a lista de cliente do software que está na sua maquina, esse software precisa fazer uma requisição no servidor de banco de dados para buscar e apresentar na tela os dados solicitados.
Para que isso ocorra um servidor de banco de dados está instalado numa máquina, e para acessá-lo é necessário indicar o endereço desta máquina (endereço IP ou nome da máquina) e o número da porta na qual o serviço solicitado responde, conclui-se então, que a porta é um complemento do endereço para chegar ao servidor.

Cada serviço tem uma porta padrão (veja a lista de alguns serviços no final do post) e isso fica transparente para o usuário porque a aplicação que acessa o servidor já sabe qual a porta padrão e coloca automaticamente, isso também quer dizer que se o administrador do sistema mudar a porta padrão para uma outra qualquer, será necessário indicar a porta ao tentar acessar o serviço. Bem, com isso espero ter conseguido explicar a função da ‘porta’

… continuando o raciocínio: se o servidor será acessado pela dobradinha ‘IP:Porta’ a máquina onde está instalado precisa liberar o tráfego de dados por essa porta, certo?

O papel do FIREWALL é exatamente dar segurança aos dados e bloquear o acesso a esta máquina e aos serviços instalados nela, portanto, se precisamos acessar o servidor e o FIREWALL está travando, é necessário informar para ele que deve liberar o acesso a porta indicada.

A solução mais comum que vejo por aí, principalmente em pequenas empresas usando o Windows, é desabilitar o firewall, mas essa não é nem de perto a melhor solução, já que acaba com toda segurança contra acessos não autorizados que o FIREWALL implementa.

Uma forma de liberar esse acesso é especificando qual porta poderá ser acessada, e para isso existem 2 formas:

Pela ferramenta gráfica que o Windows oferece no Painel de controle, e através da linha de comando, que é a motivação desse post. Muitos devem pensar: mas pela linha de comando é mais complicado…. é sim, tem razão, mas se for preciso fazer o processo em várias máquinas, e colocar o comando dentro de um script .bat a execução fica mais prático, seguro e rápido, para construir o script .bat, basta pegar os comando do inicio do post, colocar num arquivo texto vazio e salvar como abre_portas_firewall.bat
Portas padrões por serviço:
FTP – 21
HTTP – Porta 80
DNS – 53
MS-SQL – 1433 e 1434 em alguns casos
Firebird – 3050
Remote Desktop – 3389

Maiores detalhes
https://support.microsoft.com/pt-br/help/947709/how-to-use-the-netsh-advfirewall-firewall-context-instead-of-the-netsh

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
2.916 mensagems
Popularité : +89 (91 votes)
Publicado em novembro, 11 2017 - 2:19 PM
Procedure glo_rot_distancia(origem,destino)

arquivo is string=gsdirtemp+DateSys()+TimeSys()+".xml"

HTTPAddParameter("GoogleMaps","key","AIzaSyDbSVKYPwB1a-_vPbDzAr6LgAfIj4iW2hc")//CHAVE GOOGLE

HTTPDestination(arquivo)

IF NOT httpRequest(StringBuild("http://maps.googleapis.com/maps/api/distancematrix/xml?origins=%1&destinations=%2&mode=driving&language=pt-BR&sensor=false",Replace(origem," ","%20"),Replace(destino," ","%20"))) THEN

RESULT(0)

END

sArqxml is string=fLoadText(arquivo)

//fDelete(arquivo)

IF NOT xmlDocument("XML",sArqxml) THEN

RESULT(0)

END

RESULT(XMLRead("XML","/DistanceMatrixResponse/row/element/distance/text"))


by Paulo Viana

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Publicado em maio, 25 2019 - 12:06 PM
GLOBAL DA Procedure

//Declara webservice//
arr_Resultados is array of string
gsValorMemorizado is string = 1 //Necessario um valor
DeclareWebserviceContext(gsValorMemorizado) //Principal funcao que declara webservice//
DeclareWebserviceContext(arr_Resultados) //Principal funcao que declara webservice//




Procedure ws_ListaClientes(Token)

ArrResultado is array IF string

Resultado is string

IF Token = 123

For each clientes


Foto is buffer = clientes.FotoBinaria

Foto = Crypt(foto, encode64)

Resultado += clientes.codigo +,+ clientes.nome +,+ Foto +CR

END


ELSE

Resultado = “erro de Token

END

Add(arrResultado,resultado)

RESULT (arrResultado)
Publicado em maio, 25 2019 - 12:06 PM
GLOBAL DA Procedure

//Declara webservice//
arr_Resultados is array of string
gsValorMemorizado is string = 1 //Necessario um valor
DeclareWebserviceContext(gsValorMemorizado) //Principal funcao que declara webservice//
DeclareWebserviceContext(arr_Resultados) //Principal funcao que declara webservice//




Procedure ws_ListaClientes(Token)

ArrResultado is array IF string

Resultado is string

IF Token = 123

For each clientes


Foto is buffer = clientes.FotoBinaria

Foto = Crypt(foto, encode64)

Resultado += clientes.codigo +,+ clientes.nome +,+ Foto +CR

END


ELSE

Resultado = “erro de Token

END

Add(arrResultado,resultado)

RESULT (arrResultado)