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

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/










Curso WinDev - Tabela - 013 - Tabela Selecionar Varias Linhas






Video youtube


Nessa aula vou mostrar como Selecionar Varias Linhas da Tabela

This lesson will show how to select multiple rows of Table

Cette leçon va vous montrer comment sélectionner plusieurs lignes du tableau
 

TABLE_Bancos..Multiselection=True


http://doc.windev.com/en-US/?1013224&name=Table_control
http://doc.pcsoft.fr/fr-FR/?1013224&name=champ_table

WinDev - Tabela - 001/... Ancorar Tabela e coluna
WinDev - Tabela - 002/... Esconder ou Mostrar Coluna Tabela 
WinDev - Tabela - 003/... Mudar Cor e Fundo da Coluna da Tabela 
WinDev - Tabela - 004/... Mudar Largura e Fonte da Coluna da Tabela 
WinDev - Tabela - 005/... Coluna de valor Deixar em Branco 
WinDev - Tabela - 006/... Alterar Nome,Cor,Cor de Fundo da Coluna da Tabela 
WinDev - Tabela - 007/... Alterar ordem das Colunas por Programacao
WinDev - Tabela - 008/... TableSeek Pesquizar se Existe
WinDev - Tabela - 009/... TableSelectPlus - Seleciona Iten tabela
WinDev - Tabela - 010/... TableSort - Classifica Coluna
WinDev - Tabela - 011/... Zoom
WinDev - Tabela - 012/... for Each Row Of - Percorrer
WinDev - Tabela - 013/... Selecionar Varias Linhas
WinDev - Tabela - 014/... Balao - Tabela ToolTip
WinDev - Tabela - 015/... Coluna Contrainer
WinDev - Tabela - 016/... Sum - Como Mudar Nome
WinDev - Tabela - 017/... TableInfoXY - Saber Nome,Posição e Linha da Coluna
WinDev - Tabela - 018/... Guardar e Recuperar Posição Tabela
WinDev - Tabela - 019/... TableInputsearch
WinDev - Tabela - 020/... Descobrir Posição cliente Novo
WinDev - Tabela - 021/... Saber quantos e nome das Colunas
WinDev - Tabela - 022/... Tableselect - Selecionar varias linhas tabela e Ler

 



























segunda-feira, 7 de março de 2016

Windev Cronograma/002 - Organizer - Relatorio






Video Youtube


http://doc.windev.com/en-US/?1016320&name=Organizer_control
http://doc.pcsoft.fr/fr-FR/?1016320&name=champ_agenda



Blog - Curso Cronograma/Organizer/1 ... Organizer - Criar
Blog - Curso Cronograma/Organizer/2 ... Organizer - Relatorio



Nessa aula vou mostrar como tirar relatorio cronograma Organizer

In this lecture I will show how to take report Organizer schedule

Dans cette conférence, je vais vous montrer comment prendre un rapport horaire Organizer
 


iPreview(ipvZoom100)
iPrintReport(RPT_atendimento_ligacoes)



























Teste

Teste
teste