IF YesNo("Deseja Restaurar ")=Yes THEN HourGlass() Trace("Fechando Conexao") HCloseConnection(Matos_hyperfil_server) Trace("Restaurando Backup") IF HRestoreBackup(Matos_hyperfil_server,EDT_nome_zip,EDT_nome_base,EDT_nome_base_nova,PROGBAR_backup) =False THEN Trace("Erro Restaurar Backup"+HErrorInfo(hErrMessage)) Error("Erro Restaurar Backup"+HErrorInfo(hErrMessage)) END Trace("Abrindo Conexao") HChangeConnection("*",Matos_hyperfil_server) Info("Termino do Restore") HourGlass(False) ELSE Info("Nao Foi Restaurado Copia") END
Exemplos peguei no Adriano Boller para me basear nessa aula
//le WebService
LooperDeleteAll(LOOP_Especialidades) // elimina looper
gs_meu_xml= base.Lista_medicos() // peguei xml do webservice
EDT_xml_conteudo=gs_meu_xml // joguei xml no edt_xml_conteudo apenas para visualizar o que trouxe
funcao_xml_retira_tag_especialidades(gs_meu_xml) // funcao criada para trazer apenas especialidades
//Seleciona Especialidade
EDT_especialidades=LOOP_Especialidades.ATT_especialidade // estou pegando especialidade selecionada
LooperDeleteAll(LOOP_medicos) // eliminando looper do plano 2
funcao_xml_retira_tag_medicos(gs_meu_xml) // pegando funcao para retirar apenas medicoes dessa especialidade
MyWindow..Plane=2 // indo para plano 2
PROCEDURE funcao_xml_posicao_inicial(n_pega_posicao_inicial is int,s_pega_texto is string,s_tag_comparar is string)
// essa é para pegar posicao inicial
// recebo primeira posicao , texto e qual tag para comparar
//s_tag_comparar="<Nome>" // ficara como no lado esquerdo
n_tamanho_tag is int=Length(s_tag_comparar)-1 // aqui pego o tamanho da tag - diminuindo 1
n_x is int=0 // zerando contador
s_retira is string="" // limpando o que vou retirar
n_x=n_pega_posicao_inicial // inicio com posicao inicial
LOOP // entrei no loop
n_x++ // estou somando
s_retira=s_pega_texto[[n_x TO n_x+n_tamanho_tag]] // aqui estou retirando texto ate encontrar <nome> ou a tag especificada
IF s_retira=s_tag_comparar THEN // caso encontrar o nome, é porque achei ela
n_x+=Length(s_tag_comparar) // aqui coloco posicao somando o tamanho
RESULT(n_x) // saindo da procedure e retornando valor
END
IF s_retira="" THEN // se for branco retira é porque nao tem mais nada
RESULT(0) // fecho a procedure e retorno zero
END
END
PROCEDURE funcao_xml_posicao_final(n_pega_posicao_inicial is int,s_pega_texto is string)
// funcao para pegar posicao final
n_x is int=0
n_x=n_pega_posicao_inicial // pego posicao inicial
LOOP
n_x++
IF s_pega_texto[[n_x]]="<" THEN // aqui descubro onde é a proxima posicao com < fechamento da tag
RESULT(n_x) // retorna valor
END
END
PROCEDURE funcao_xml_retira_tag_especialidades(s_texto_completo is string)
// copiar essa funcao, vai estar no blog
// é a parte que le as turmas
// essa funcao vou disponibilizar blog
s_nome_tag_inicial is string="<Especialidades>"
s_nome_tag_final is string="</Especialidades>"
arr_especialidades is array of string
s_resultado is string=""
nPosicaoInicial, nPosicaoFinal is int = 0
nPosicaoInicial = PositionOccurrence(s_texto_completo,s_nome_tag_inicial,firstRank,FromBeginning) + Length(s_nome_tag_inicial)
n_inicio is int=nPosicaoInicial // para saber se o xml terminou
//nPosicaoFinal = PositionOccurrence(s_texto_completo,s_nome_tag_final,firstRank,FromBeginning)
nPosicaoFinal=funcao_xml_posicao_final(nPosicaoInicial,s_texto_completo)
s_resultado = Middle(s_texto_completo,nPosicaoInicial,nPosicaoFinal-nPosicaoInicial)
ArrayAdd(arr_especialidades,s_resultado)
// essa especidade ja tinha passado o video, e nao mudou nada
LOOP
IF nPosicaoFinal=0 OR nPosicaoInicial=0 THEN
BREAK
ELSE
nPosicaoInicial = PositionOccurrence(s_texto_completo,s_nome_tag_inicial,nextRank,FromBeginning) + Length(s_nome_tag_inicial)
nPosicaoFinal=funcao_xml_posicao_final(nPosicaoInicial,s_texto_completo)
s_resultado = Middle(s_texto_completo,nPosicaoInicial,nPosicaoFinal-nPosicaoInicial)
IF nPosicaoInicial<n_inicio THEN // voltou ao inicio do xml e entao vamos terminar
BREAK
ELSE
IF nPosicaoFinal=0 OR nPosicaoInicial=0 THEN
BREAK
ELSE
FOR i=1 TO arr_especialidades..Occurrence // fiz isso para saber se ja tem alguma turma igual
IF arr_especialidades[i]=s_resultado THEN
s_resultado=""
BREAK
END
END
IF s_resultado<>"" THEN // caso nao tiver turma igual, mando adicionar array
ArrayAdd(arr_especialidades,s_resultado)
END
END
END
END
END
ArraySort(arr_especialidades,asAscending) // aqui estou classificando por ordem da turma
FOR i=1 TO arr_especialidades..Occurrence
LooperAddLine(LOOP_Especialidades,arr_especialidades[i]) // adiciona linha // aqui estou adicionando linhas
END
PROCEDURE funcao_xml_retira_tag_medicos(s_texto_completo is string)
// Copiar essa funcao do Blog
// sera a parte dos alunos
// essa funcao do retira tag alunos
// criei uma array para cada tag
arr_nome is array of string
arr_crm is array of string
arr_especialidades is array of string
arr_planos is array of string
arr_endereco is array of string
arr_latitude is array of string
arr_longitude is array of string
arr_cidade is array of string
arr_telefone1 is array of string
s_resultado is string=""
s_nome_tag_inicial is string="<Especialidades>"
s_nome_tag_final is string="</Especialidades>"
nPosicaoInicial, nPosicaoFinal is int = 0
nPosicaoInicial = PositionOccurrence(s_texto_completo,s_nome_tag_inicial,firstRank,FromBeginning) + Length(s_nome_tag_inicial)
n_inicio is int=nPosicaoInicial // para saber se o xml terminou
nPosicaoFinal=funcao_xml_posicao_final(nPosicaoInicial,s_texto_completo)
n_confere is int=1
// ate aqui permanece como esta
LOOP
IF nPosicaoInicial<n_inicio THEN
BREAK
ELSE
IF nPosicaoFinal=0 OR nPosicaoInicial=0 THEN
BREAK
ELSE
s_resultado = Middle(s_texto_completo,nPosicaoInicial,nPosicaoFinal-nPosicaoInicial)
IF s_resultado=EDT_especialidades THEN // aqui verifico se é a mesma turma
ArrayAdd(arr_especialidades,s_resultado)
s_nome_tag_inicial="<Nome>"
s_nome_tag_final="</Nome>"
nPosicaoInicial = funcao_xml_posicao_inicial(nPosicaoInicial,s_texto_completo,s_nome_tag_inicial)
// aqui mudei, pego a posicao inicial a partir de minha funcao
nPosicaoFinal=funcao_xml_posicao_final(nPosicaoInicial,s_texto_completo)
s_resultado = Middle(s_texto_completo,nPosicaoInicial,nPosicaoFinal-nPosicaoInicial)
ArrayAdd(arr_nome,s_resultado)
s_nome_tag_inicial="<CRM>"
s_nome_tag_final="</CRM>"
nPosicaoInicial = funcao_xml_posicao_inicial(nPosicaoInicial,s_texto_completo,s_nome_tag_inicial)
nPosicaoFinal=funcao_xml_posicao_final(nPosicaoInicial,s_texto_completo)
s_resultado = Middle(s_texto_completo,nPosicaoInicial,nPosicaoFinal-nPosicaoInicial)
ArrayAdd(arr_crm,s_resultado)
s_nome_tag_inicial="<Planos>"
s_nome_tag_final="</Planos>"
nPosicaoInicial = funcao_xml_posicao_inicial(nPosicaoInicial,s_texto_completo,s_nome_tag_inicial)
nPosicaoFinal=funcao_xml_posicao_final(nPosicaoInicial,s_texto_completo)
s_resultado = Middle(s_texto_completo,nPosicaoInicial,nPosicaoFinal-nPosicaoInicial)
ArrayAdd(arr_planos,s_resultado)
s_nome_tag_inicial="<Endereco>"
s_nome_tag_final="</Endereco>"
nPosicaoInicial = funcao_xml_posicao_inicial(nPosicaoInicial,s_texto_completo,s_nome_tag_inicial)
nPosicaoFinal=funcao_xml_posicao_final(nPosicaoInicial,s_texto_completo)
s_resultado = Middle(s_texto_completo,nPosicaoInicial,nPosicaoFinal-nPosicaoInicial)
ArrayAdd(arr_endereco,s_resultado)
s_nome_tag_inicial="<Latitude>"
s_nome_tag_final="</Latitude>"
nPosicaoInicial = funcao_xml_posicao_inicial(nPosicaoInicial,s_texto_completo,s_nome_tag_inicial)
nPosicaoFinal=funcao_xml_posicao_final(nPosicaoInicial,s_texto_completo)
s_resultado = Middle(s_texto_completo,nPosicaoInicial,nPosicaoFinal-nPosicaoInicial)
ArrayAdd(arr_latitude,s_resultado)
s_nome_tag_inicial="<Longitude>"
s_nome_tag_final="</Longitude>"
nPosicaoInicial = funcao_xml_posicao_inicial(nPosicaoInicial,s_texto_completo,s_nome_tag_inicial)
nPosicaoFinal=funcao_xml_posicao_final(nPosicaoInicial,s_texto_completo)
s_resultado = Middle(s_texto_completo,nPosicaoInicial,nPosicaoFinal-nPosicaoInicial)
ArrayAdd(arr_longitude,s_resultado)
s_nome_tag_inicial="<Cidade>"
s_nome_tag_final="</Cidade>"
nPosicaoInicial = funcao_xml_posicao_inicial(nPosicaoInicial,s_texto_completo,s_nome_tag_inicial)
nPosicaoFinal=funcao_xml_posicao_final(nPosicaoInicial,s_texto_completo)
s_resultado = Middle(s_texto_completo,nPosicaoInicial,nPosicaoFinal-nPosicaoInicial)
ArrayAdd(arr_cidade,s_resultado)
s_nome_tag_inicial="<Telefone1>"
s_nome_tag_final="</Telefone1>"
nPosicaoInicial = funcao_xml_posicao_inicial(nPosicaoInicial,s_texto_completo,s_nome_tag_inicial)
nPosicaoFinal=funcao_xml_posicao_final(nPosicaoInicial,s_texto_completo)
s_resultado = Middle(s_texto_completo,nPosicaoInicial,nPosicaoFinal-nPosicaoInicial)
ArrayAdd(arr_telefone1,s_resultado)
END
END
END
s_nome_tag_inicial="<Especialidades>"
s_nome_tag_final="</Especialidades>"
nPosicaoInicial = funcao_xml_posicao_inicial(nPosicaoInicial,s_texto_completo,s_nome_tag_inicial)
nPosicaoFinal=funcao_xml_posicao_final(nPosicaoInicial,s_texto_completo)
END
// com essas alteracoes, funciona tanto no emulador como no aparelho
// os fontes estarao disponiveis
FOR i=1 TO arr_especialidades..Occurrence
LooperAddLine(LOOP_medicos,arr_nome[i],arr_crm[i],arr_especialidades[i],arr_endereco[i],arr_planos[i],arr_cidade[i])