terça-feira, 8 de março de 2016

Wx - Voltar ao registro no Browser List apos incluir ou alterar um registro por um Form Update ao usar Querys e nao tables.



Forum.pcsoft.fr/fr-FR/pcsoft.br.windev/1029-voltar-registro-browser-list-apos-incluir-alterar-registro/read.awp



Posté le 08 mars 2016 - 23:09
Prezados,

Segue aqui um passo a passo de como voltar o ponteiro, FOCO, ou melhor, ao registro atual selecionado no BrowserList (Looper, Table) após incluir ou alterar um registro por um FormUpdate ao usar Querys e não tables, focando exatamente no registro em questão.

Esse passo a passo foi feito pelo Empresario e Desenvolvedor Jacques Bicas que cedeu para colocar no fórum a informação e assim contribuir com a comunidade.

Vamos lá ao passo a passo:

Isto vale para quando a table é populada manualmente ou não está linkada a database TABLE, quando o Browserlist foi feito via query, view, etc.

1) Criei uma variável global (do tipo VARIANT) e ao fechar o o FORM posiciona o ID da tabela que foi alterada (cliente, fornecedor, produto, etc)




//RESERVA POSICAO
gvNovoRegistro = CADTRANSPORTADORAS.TRANSPORTADORA


2) No botão incluir ou alterar uso o código abaixo:




// Botao incluir e alterar
gvNovoRegistro = CADTRANSPORTADORAS.TRANSPORTADORA






//Retorna Foco ao Registro

sRetorno is string = Open(Win_cadastro_CNPJCPF, "T")

IF sRetorno > "" THEN

IF Open(gsNomeForm,1,sRetorno) THEN

TableSelectPlus(Table_Cadastro, TableSeek(Table_Cadastro.Col_Codigo, gvNovoRegistro, True))

END

END



COMPLEMENTO DESSE POST:

http://forum.pcsoft.fr/fr-FR/pcsoft.br.windev/931-capturar-click-browse-list/read.awp…

SE GOSTOU DA UM LIKE

Forte abraço a todos e muito obrigado Jacques por compartilhar seu conhecimento.

Sucesso a todos

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











Wx - Leitura de arquivos XML com um Registro e Multiplos registros, Extração das Tag e dos Valores de cada Tag para uso em seus sistemas



forum.pcsoft.fr/fr-FR/pcsoft.br.windev/864-leitura-arquivos-xml-com-registro-multiplos-registros-extracao/read.awp?lastview

Posté le 15 janvier 2016 - 21:29
Boa tarde Prezados,

Segue 3 vídeo aulas para estudo de arquivo xml para ler xml no Android e no iOS

http://www.screencast.com/t/sPyLGnKxfa

http://www.screencast.com/t/6C4OCWcW

http://www.screencast.com/t/V0APuTWU

os fontes estão no fórum oficial

Estou passando o exemplo para a PcSoft corrigir a função arraydeleteduplicate( ) que esqueceram de fazer para o Android que dei o nome de ArrayDeleteDuplicateBoller( ). E o Pega Nó do Xml que dei o nome de PegaNoXml( )

Bons estudos, espero ter esclarecido como se trabalha com xml nas duas plataformas.

Caso alguém tenha ficado com dúvida entre em contato

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




0
0




Membre enregistré
1 517 messages
Popularité : +89 (91 votes)
Posté le 15 janvier 2016 - 21:29
//Global do Projeto
arrXml_Tags is array of strings //Nome das Tags

arrXml_TagResult is array of strings //Conteudo das Tags Resultado


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




0
0




Membre enregistré
1 517 messages
Popularité : +89 (91 votes)
Posté le 15 janvier 2016 - 21:30
Procedure LocalizarTagsEmXml(XML_Retorno is string)

//Variaveis
nXposicaoinicial is int = 0
nXposicaofinal is int = 0
arrXml_Tag is array of strings

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

NoXml is string
i is int = 1
NoXml = XMLExtractString(XML_Retorno,"NoXml",i)

Add(arrXml_Tag,"login_id")
Add(arrXml_Tag,"login_email")
Add(arrXml_Tag,"login_nome")
Add(arrXml_Tag,"login_senha")
Add(arrXml_Tag,"login_status")
Add(arrXml_Tag,"login_admin")

FOR EACH stag OF arrXml_Tag

temp is string = XMLExtractString(NoXml,stag)
Add(arrXml_TagResult, temp )

END

//Android
ELSE IF InAndroidMode() = True

XmlDoc is XMLDocument
XmlDoc = XMLOpen(XML_Retorno, fromString)
NoXml is xmlNode

FOR EACH NoXml OF XmlDoc.Xml.Retorno on NoXml

Add(arrXml_TagResult, NoXml.login_id)
Add(arrXml_TagResult, NoXml.login_email)
Add(arrXml_TagResult, NoXml.login_nome)
Add(arrXml_TagResult, NoXml.login_senha)
Add(arrXml_TagResult, NoXml.login_status)
Add(arrXml_TagResult, NoXml.login_admin)

END

END

RESULT arrXml_TagResult


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




0
0




Membre enregistré
1 517 messages
Popularité : +89 (91 votes)
Posté le 15 janvier 2016 - 21:32
//Exemplo 2
Procedure LocalizarTagsEmXml(XML_Retorno is string)

//Variaveis
nXposicaoinicial is int = 0
nXposicaofinal is int = 0
arrXml_Tag is array of strings

X is int = 0

//Exemplo
//<Xml>
//<Retorno>
//<NoXml ID="3"> // <------------------------ motivo do erro deve ser um nome para todas as consultas nao mude NoXml
//<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 deve ser um nome para todas as consultas nao mude NoXml 
//<Total>1</Total>
//</Retorno>
//</Xml>


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

NoXml is string
i is int = 1
NoXml = XMLExtractString(XML_Retorno,"NoXml",i)

Add(arrXml_Tag,"login_id")
Add(arrXml_Tag,"login_email")
Add(arrXml_Tag,"login_nome")
Add(arrXml_Tag,"login_senha")
Add(arrXml_Tag,"login_status")
Add(arrXml_Tag,"login_admin")

XmlDoc is XMLDocument

XmlDoc = XMLOpen(XML_Retorno, fromString)

total is int = XMLExtractString(XML_Retorno,"Total") //5

LOOP (total)

FOR EACH stag OF arrXml_Tag on stag

temp is string = XMLExtractString(NoXml,stag)
Add(arrXml_TagResult, temp )

END

END

//Android
ELSE IF InAndroidMode() = True

XmlDoc is XMLDocument
XmlDoc = XMLOpen(XML_Retorno, fromString)
NoXml is xmlNode

FOR EACH NoXml OF XmlDoc.Xml.Retorno on NoXml

Add(arrXml_TagResult, NoXml.login_id)
Add(arrXml_TagResult, NoXml.login_email)
Add(arrXml_TagResult, NoXml.login_nome)
Add(arrXml_TagResult, NoXml.login_senha)
Add(arrXml_TagResult, NoXml.login_status)
Add(arrXml_TagResult, NoXml.login_admin)

END

END

RESULT arrXml_TagResult


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




0
0




Membre enregistré
1 517 messages
Popularité : +89 (91 votes)
Posté le 15 janvier 2016 - 21:34
//Exemplo 3

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)


outra procedure

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) = "/" ORPositionOccurrence(Upper(Tag),"ID=",firstRank,FromBeginning) > 0
Tag = ""
END

//VALIDA TAGS DO NÓ
IF Tag <> "" AND Tamanho > 0 AND Anterior <> Tag AND Upper(Tag) <> "XML" ANDUpper(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

//TARGET CODE
ArrayDeleteDuplicate(arrXml_Tags,tccIgnoreSpace)


//TARGET CODE


outra procedure

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

NoXml is string
i is int = 1
NoXml = XMLExtractString(XML_Retorno,"NoXml",i)

//FUNCAO IDENTIFICA TAG
IdentificarTagsNoXml(XML_Retorno)

FOR EACH stag OF arrXml_Tags //VAR GLOBAL

temp is string = XMLExtractString(NoXml,stag)

Add(arrXml_TagResult, temp )

END

//Android
ELSE IF InAndroidMode() = True

T is int = 0

IdentificarTagsNoXml(XML_Retorno) //FUNCAO IDENTIFICA TAG

nQtde_tags is int = ArrayCount(arrXml_Tags)
TagRegistro is string 
TagValor is string

LOOP (nQtde_tags)

T += 1

TagRegistro = arrXml_Tags[T]

TagValor = XMLExtractString(XML_Retorno,TagRegistro)

IF TagValor <> "" 

Add(arrXml_TagResult,TagValor)

END

END


END

RESULT arrXml_TagResult


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




0
0




Membre enregistré
47 messages
Popularité : +5 (5 votes)
Posté le 15 janvier 2016 - 21:36
Muito Bom Adriano Show De bola

--
Atte. Willian Fernando




0
0




Membre enregistré
1 517 messages
Popularité : +89 (91 votes)
Posté le 15 janvier 2016 - 21:37
//Exemplo 4 do video

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)


outra procedure

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) = "/" ORPositionOccurrence(Upper(Tag),"ID=",firstRank,FromBeginning) > 0
Tag = ""
END

//VALIDA TAGS DO NÓ
IF Tag <> "" AND Tamanho > 0 AND Anterior <> Tag AND Upper(Tag) <> "XML" ANDUpper(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

//TARGET CODE
ArrayDeleteDuplicate(arrXml_Tags,tccIgnoreSpace)


//TARGET CODE


Outra Procedure

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(EDT_XML,"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(EDT_XML,"Total") //5

LOOP (nQtde_Registros)

T = 0

N += 1

RegistroXml = PegaNoXml(XML_Retorno,N)

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


Outra Procedure

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 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


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




0
0




Membre enregistré
1 517 messages
Popularité : +89 (91 votes)
Posté le 15 janvier 2016 - 21:40
Lembrando que eu coloquei em modo ANSI o projeto inteiro




Se não aparece tudo em japonês, rssss.

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




0
0




Membre enregistré
1 517 messages
Popularité : +89 (91 votes)
Posté le 15 janvier 2016 - 22:04
Prezados,

Segue aqui o fonte para estudos




https://mega.nz/…

Bons estudos

Tendo sugestões, sobre o assunto, favor postem material, 
por mais simples que pareça, mas caso não tenha no help 
é interessante para quem esta iniciando os estudos da
plataforma PcSoft.

:merci:

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