web - programaçao advpl para web
TRANSCRIPT
1
Programaccedilatildeo Advpl para WEB
Revisatildeo 27042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este toacutepico engloba todo o conhecimento e informaccedilotildees necessaacuterias para usufruirmos da tecnologia implementada na ferramenta Protheus e de sua Infra-Estrutura para o desenvolvimento de aplicaccedilotildees orientadas agrave
Internet
O objetivo desta seccedilatildeo eacute centralizar as informaccedilotildees pertinentes ao desenvolvimento de projetos WEB em uma ferramenta que permita o acesso e atualizaccedilotildees destes dados de maneira raacutepida e dinacircmica aleacutem de
mostrar uma boa parte do que eacute possiacutevel fazer utilizando-se dos recursos disponiacuteveis na ferramenta Protheus
Para que seja possiacutevel compreender as funcionalidades e tecnologias envolvidas no processo de desenvolvimento de uma aplicaccedilatildeo WEB utilizando-se da ferramenta Protheus eacute de fundamental importacircncia que os
toacutepicos deste grupo sejam lidos e assimilados pois nos mesmos encontram-se as informaccedilotildees que servem de base para a compreensatildeo e consequente melhor aproveitamento dos recursos disponiacuteveis
Para se ter uma ideacuteia superficial do poder do Protheus como servidor http esta aplicaccedilatildeo ( DEM - Documentaccedilatildeo Eletrocircnica Microsiga ) foi escrita em Advpl-ASP utilizando uma compilaccedilatildeo do Server Protheus ISAPI
integrado com o IIS 5 utilizando um Banco de Dados SQL Server 2000 atraveacutes do TopConnect 4 utilizando se de Working Threads Extended (WEBEX) e das funccedilotildees de Infra-Estrutura da lib APWEBEX
01 O Servidor Protheus como um servidor HTTP
Revisatildeo 27042004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710
O Servidor Protheus como um servidor HTTP
O servidor Protheus pode ser configurado para trabalhar como um servidor WEB Isso significa trabalhar como um servidor de requisiccedilotildees dos protocolos HTTP eou FTP do mesmo modo que outros servidores
conhecidos no mercado (por exemplo o IIS ndash Internet Information Server da Microsoft (R) ou o Apache para Linux) Assim basta ter o Protheus para poder criar sua proacutepria Intranet num ambiente de rede local ou
publicar o endereccedilo IP da maacutequina com o servidor Protheus na Internet e executar funccedilotildees atraveacutes de RPC ou simplesmente criar o seu proacuteprio Web Site com paacuteginas HTML estaacuteticas ou dinacircmicas
Serviccedilo de HTTP
O protocolo HTTP (Hyper Text Transfer Protocol) eacute o protocolo utilizado na comunicaccedilatildeo entre um servidor e um Web Browser Eacute o protocolo utilizado para o envio e recebimento de paacuteginas formatadas em padrotildees
SGML (HTMLXML etc) Este protocolo se baseia principalmente em dois comandos GET e POST O comando GET eacute utilizado para obter alguma informaccedilatildeo do servidor HTTP e o POST para ldquopostarrdquo informaccedilotildees
para o servidor Mas adiante seraacute mais faacutecil compreender onde tais comandos satildeo utilizados no servidor Protheus
Utilizando o servidor Protheus como um servidor HTTP o mesmo poderaacute ser acessado atraveacutes de um Web Browser como o Internet Explorer por exemplo que receberaacute as paacuteginas HTML enviadas de um diretoacuterio
configurado no servidor Adicionalmente ao envio e recebimento de paacuteginas estaacuteticas formatadas pode-se utilizar a linguagem Advpl do Protheus para processar paacuteginas mistas que conteacutem coacutedigo Advpl e comandos
HTML de formataccedilatildeo Tais paacuteginas seratildeo processadas no servidor Protheus e entatildeo enviadar para o Web Browser que iraacute formataacute-las de acordo com os comandos HTML contidos Tambeacutem eacute possiacutevel executar
diretamente funccedilotildees compiladas no repositoacuterio do Protheus atraveacutes de um request HTTP (por exemplo atraveacutes de um POST em um formulaacuterio em HTML ou de um link ou mesmo diretamente na linha de URL do
Web Browser O mesmo vale para qualquer outra aplicaccedilatildeo que seja capaz de efetuar comandos GET ou POST utilizando o protocolo HTTP)
Paacuteginas Dinacircmicas e Advpl ASP Quando eacute utilizado o servidor Protheus para desenvolvimento de aplicaccedilotildees Web eacute possiacutevel lanccedilar matildeo do recurso de criaccedilatildeo de paacuteginas dinacircmicas isto eacute uma requisiccedilatildeo HTTP realizada agraveo Server
Protheus devidamente configurado para atendecirc-la dispara o processamento de uma funccedilatildeo no Servidor e esta funccedilatildeo encarrega-se de devolver agraveo usuaacuterio uma paacutegina HTML com o resultado do processamento
Para viabilizar o desenvolvimento deste tipo de funccedilatildeo foi criado um tipo de arquivo especial no Protheus IDE com a extensatildeo APH onde eacute inserido um conteuacutedo Html a ser enviado ao Web Browser e instruccedilotildees
Advpl que seratildeo processadas no momento em que a paacutegina for solicitada ao servidor Protheus sendo possiacutevel de forma praacutetica mesclar um conteuacutedo gerado por este processamento agrave uma paacutegina Html para
ser retornado agraveo Web Browser
Nos toacutepicos abaixo relacionados seraacute visto em mais detalhes as configuraccedilotildees necessaacuterias para atender agrave estas requisiccedilotildees as caracteriacutesticas particulares de cada uma delas e as funccedilotildees de infra-estrutura criadas para
auxiliar o desenvolvimento de aplicaccedilotildees Web
Aleacutem da criaccedilatildeo de arquivos foi disponibilizado no repositoacuterio padratildeo do Protheus as funccedilotildees de infra-estrutura ApWebEx desenvolvidas para permitir um melhor aproveitamento dos recursos disponibilizados pela
ferramenta Protheus para o desenvolvimento de soluccedilotildees Web Estas funcionalidades satildeo exploradas no toacutepico Infra-Estrutura ApWebEx
02 Executando funccedilotildees Advpl via HTTP
Revisatildeo 28042004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
Princiacutepio de Funcionamento do HTTP A utilizaccedilatildeo do protocolo HTTP natildeo envolve o uso de uma conexatildeo persistente entre o Web Browser e o Servidor HTTP Isto significa que ao ser solicitada uma paacutegina imagem ou ateacute o processamento de uma
funccedilatildeo o Web Browser abre uma conexatildeo com o Server HTTP realiza a solicitaccedilatildeo e fica com a conexatildeo aberta aguardando pelo retorno do Server Quando o server jaacute houver enviado os dados solicitados a conexatildeo
eacute fechada
Processamento de Funccedilotildees Para o retorno de paacuteginas estaacuteticas imagens e demais arquivos via HTTP o servidor identifica o que estaacute sendo solicitado pelo Web Browser atraveacutes da extensatildeo do Link Por exemplo ao receber uma soilicitaccedilatildeo da
URL httposervidorhtmlsimagemgif o Server HTTP sabe que deve procurar um arquivo chamado imagemgif dentro da pasta htmls a partir da pasta local no servidor configurada para armazenar os arquivos para o
acesso HTTP
No servidor Protheus foram implementadas duas extensotildees de Link para permitir a execuccedilatildeo de funccedilotildees Advpl atraveacutes de uma requisiccedilatildeo HTTP A extensatildeo APL e a extrensatildeo APW Quando o servidor recebe uma
requisiccedilatildeo via HTTP por exemplo da url httposervidortimeapl e estaacute corretamente configurado para atender agrave esta requisiccedilatildeo o Protheus Server realiza o processamento e informa para o Web Browser solicitante
que a string que seraacute retornada deve ser interpretada pelo Web Browser como sendo um Script HTML
Caracteriacutesticas comuns do processamento de funccedilotildees Advpl via HTTP
Independente da extensatildeo de link utilizada existem caracteriacutesticas e preacute-requisitos comuns ao funcionamento de ambas as requisiccedilotildees que seguem abaixo
A funccedilatildeo seja Advpl ou uma funccedilatildeo compilada no Repositoacuterio deve obrigatoriamente ter um retorno do tipo String pois o Web Browser solicitante seraacute informado pelo Server Protheus que a string
retornada deveraacute ser interpretada e mostrada pelo Browser como um HTML
Devido agrave origem da requisiccedilatildeo natildeo ter relaccedilatildeo alguma com a interface Remote do Protheus natildeo eacute possiacutevel utilizar determinadas funccedilotildees Advpl que foram escritas exclusivamente para esta interface
como por exemplo as funccedilotildees MsgStop Alert e demais funccedilotildees e objetos de Interface de Janelas
O que iraacute diferenciar uma funccedilatildeo executada via link apl e apw seraacute as etapas de execuccedilatildeo das mesmas Esta caracteriacutestica de funcionamento seraacute melhor esclarecida apoacutes a leitura dos toacutepicos sobre desenvolvimento de
funccedilotildees apl e desenvolvimento de funccedilotildees apw
03 Paacuteginas dinacircmicas - O Advpl ASP
Revisatildeo 26042004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
Uma paacutegina ASP (Active Server Pages) eacute uma paacutegina HTML contendo coacutedigo interpretaacutevel em uma linguagem compreensiacutevel ao servidor HTTP em uso Por exemplo o IIS da Microsoft utiliza o VBScript para criar
suas paacuteginas ASP do mesmo modo que o Protheus utiliza o ADVPL Uma paacutegina ASP eacute uma combinaccedilatildeo de script HTML e coacutedigo interpretaacutevel No ADVPL ASP esse coacutedigo eacute padratildeo xBase portanto a preocupaccedilatildeo
maior daqueles que jaacute conhecem e trabalham com o Protheus e desejam desenvolver paacuteginas ativas para aplicaccedilotildees Web utilizando essa facilidade eacute conhecer HTML
Caracteriacutesticas do ADVPL ASP - Arquivos APH Os arquivos ADVPL ASP tecircm a extensatildeo padratildeo APH Satildeo arquivos texto e devem ser adicionados a um projeto no Protheus IDE e compilados da mesma maneira que os programas tradicionais A diferenccedila eacute que o
Protheus Server identificaraacute que se trata de um ADVPL ASP e executaraacute uma espeacutecie de tradutor (parser) antes que a compilaccedilatildeo seja executada Este parser iraacute transformar todo o arquivo em uma funccedilatildeo uacutenica que
receberaacute os mesmos paracircmetros das funccedilotildees APL simples como explicado anteriormente no Item Desenvolvendo Funccedilotildees APL e retornaraacute uma string
O desenvolvedor natildeo precisa se preocupar em retornar HMTL algum pois o APH tambeacutem eacute um arquivo HTML A funccedilatildeo que foi gerada na compilaccedilatildeo iraacute se encarregar de retornar o HTML contigo no arquivo
depois que o coacutedigo foi processado Um Arquivo APH gera no repositoacuterio de Objetos do Protheus uma funccedilatildeo com o mesmo nome do arquivo poreacutem prefixada com H_ + nome_do_arquivo_aph
Por se tornar uma funccedilatildeo no momento da compilaccedilatildeo natildeo eacute possiacutevel utilizar a claacuteusula FUNCTION para criar outras funccedilotildees dentro de um arquivo APH Caso exista essa necessidade tais funccedilotildees devem ser criadas
em um arquivo PRW tradicional e chamadas de dentro do APH
A extensatildeo APH para o nome dos arquivos eacute obrigatoacuteria Qualquer outra extensatildeo usada no nome do arquivo natildeo seraacute reconhecida e o parser do IDE natildeo seraacute executado durante a compilaccedilatildeo Foi criada tambeacutem a
extensatildeo de arquivos AHU ( Aph de Usuaacuterio ) que possui o mesmo tratamento de Parser do aruqivo APH gerando uma funccedilatildeo prefixada com L_ A diferenccedila eacute que a funccedilatildeo gerada pelo AHU pode ser gerada sem a
necessiade de autorizaccedilatildeo de compilaccedilatildeo com permissatildeo para substituir fontes microsiga por tratar-se de um Aph de Usuaacuterio qeuivalente agrave uma User Function
Assim como outros ASPacutes a diferenciaccedilatildeo entre script HTML e coacutedigo eacute efetuada atraveacutes dos caracteres lt para indicaccedilatildeo de abertura de coacutedigo e gt para indicaccedilatildeo do encerramento de coacutedigo Por exemplo o
HTML abaixo conteacutem um pedaccedilo de coacutedigo ADVPL separado pelos delimitadores
lthtmlgtltheadgtlttitlegtADVPL ASP Demolttitlegtltheadgt
ltbodygt
ltpgtBem vindo ao mundo do ADVPL ASPltpgt
lt
Soma os 100 primeiros nuacutemeros
Local i nSoma = 0
For i = 1 To 100
NSoma += i
2
Next i
gt
ltbodygt
lthtmlgt
Quando este arquivo for requisitado ao Protheus Server (atraveacutes de uma chamada em URL por exemplo) o coacutedigo entre os delimitadores seraacute executado poreacutem o script colocado ao redor do coacutedigo seraacute mantido
exatamente como se encontra Por exemplo
httplocalhostH_WEBDEMOAPL
A grande vantagem de se utilizar dos arquivos ADVPL ASP em relaccedilatildeo a criar funccedilotildees APL simples decorre do fato de que nas funccedilotildees APL simples o desenvolvedor deve se preocupar em retornar todo o HTML
necessaacuterio para a correta exibiccedilatildeo no Web Browser
E tambeacutem como o ADVPL ASP mistura o script HTML com o coacutedigo interpretaacutevel pode-se criar um arquivo APH utilizando o editor desejado (como o Microsoft FrontPage por exemplo) e inserir nele os coacutedigos
Advpl necessaacuterios entre as Tags Outro detalhe importante eacute que pode-se utilizar as estruturas de fluxo da linguagem ADVPL para repetir comandos do proacuteprio script HTML (por exemplo colocar um comando de
script HTML dentro de um comando While em ADVPL)
lt While EOF() gt
ltBgt Esta linha seraacute repetida no HTML ateacute ocorrer o fim de arquivo ltBgt
lt
dbSkip()
EndDo
gt
Note que tambeacutem pode existir diferentes blocos de coacutedigo interpretaacutevel separados pelos delimitadores dentro de um mesmo arquivo
Tatildeo importante quanto mesclar coacutedigo interpretaacutevel com script de formataccedilatildeo HTML eacute utilizar os comandos ADVPL para alterar o script de formataccedilatildeo Ou seja colocar o conteuacutedo de variaacuteveis campos etc
diretamente no HTML que seraacute enviado agrave aplicaccedilatildeo client (ao Browser por exemplo) Isso pode ser realizado atraveacutes dos delimitadores de avaliaccedilatildeo Os delimitadores de avaliaccedilatildeo satildeo lt= para abertura e gt para
encerramento Diferentemente dos delimitadores de coacutedigo interpretaacutevel estes devem sempre estar na mesma linha Com eles pode-se criar uma linha de script HTML cujo conteuacutedo conteacutem uma expressatildeo que seraacute
avaliada em tempo de execuccedilatildeo e seu resultado inserido como parte do Html retornado agraveo Browse
ltbgtEsta linha eacute HTML mas o horaacuterio exibido aqui lt= Time() gt foi obtido em tempo de execuccedilatildeo no Servidorltbgt
No exemplo acima a linha HTML seraacute retornada para o Browser com o resultado da funccedilatildeo time (ou seja a hora atual no servidor) inserido no texto
Utilizando todos esses conceitos pode-se criar toda uma aplicaccedilatildeo Web baseada no Protheus Ou seja o processamento e acesso aos dados fica por conta do Protheus Server e a interface fica por conta do Browser
(utilizando o HTML)
Importante
Ao codigicar um arquivo APH eou AHU devemos estar atentos agraves regras de utilizaccedilatildeo dos delimitadores de execuccedilatildeo e avaliaccedilatildeo Advpl
1 A Abertura e fechamendo dos delimitadores de execuccedilatildeo lt gt devem estar isoladas em suas respectivas linhas natildeo devendo ter qualquer conteudo adicional nem duas aberturas e fechamentos na mesma linha
Partindo dessa premissa veja abaixo alguns exemplos de como inserir o coacutedigo Advpl abaixo dentro de um APH
IF lOk
nErro++
Endif
CERTO
lt
IF lOk
nErro++
Endif
gt
CERTO lt IF lOk gt
lt nErro++ gt
lt Endif gt
CERTO lt IF lOk nErro++ Endif gt
ERRADO lt IF lOk gtlt nErro++ gt -- 2 aberturas e fechamentos na mesma linha
lt Endif gt
2 Quantograve agraveos delimitadores de avaliaccedilatildeo lt= gt podemos ter vaacuterias aberturas e fechamentos na mesma lionha poreacutem natildeo podemos ter uma abertura e seu respectivo fechamento em linhas diferentes
3 Uma linha qualquer em um arquivo APH nao deve conter mais do que 150 Caracteres pois o Parser insere caracteres de controle em cada linha do mesmo durante a preacute-compilaccedilatildeo e a linha final resultante natildeo
pode ultrapassar 254 caracteres pois neste caso isto impossibilita a compilaccedilatildeo do APH
02 Executando funccedilotildees Advpl via HTTP
Revisatildeo 28042004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
Princiacutepio de Funcionamento do HTTP
A utilizaccedilatildeo do protocolo HTTP natildeo envolve o uso de uma conexatildeo persistente entre o Web Browser e o Servidor HTTP Isto significa que ao ser solicitada uma paacutegina imagem ou ateacute o processamento de uma
funccedilatildeo o Web Browser abre uma conexatildeo com o Server HTTP realiza a solicitaccedilatildeo e fica com a conexatildeo aberta aguardando pelo retorno do Server Quando o server jaacute houver enviado os dados solicitados a conexatildeo
eacute fechada
Processamento de Funccedilotildees
Para o retorno de paacuteginas estaacuteticas imagens e demais arquivos via HTTP o servidor identifica o que estaacute sendo solicitado pelo Web Browser atraveacutes da extensatildeo do Link Por exemplo ao receber uma soilicitaccedilatildeo da
URL httposervidorhtmlsimagemgif o Server HTTP sabe que deve procurar um arquivo chamado imagemgif dentro da pasta htmls a partir da pasta local no servidor configurada para armazenar os arquivos para o
acesso HTTP
No servidor Protheus foram implementadas duas extensotildees de Link para permitir a execuccedilatildeo de funccedilotildees Advpl atraveacutes de uma requisiccedilatildeo HTTP A extensatildeo APL e a extrensatildeo APW Quando o servidor recebe uma
requisiccedilatildeo via HTTP por exemplo da url httposervidortimeapl e estaacute corretamente configurado para atender agrave esta requisiccedilatildeo o Protheus Server realiza o processamento e informa para o Web Browser solicitante
que a string que seraacute retornada deve ser interpretada pelo Web Browser como sendo um Script HTML
Caracteriacutesticas comuns do processamento de funccedilotildees Advpl via HTTP Independente da extensatildeo de link utilizada existem caracteriacutesticas e preacute-requisitos comuns ao funcionamento de ambas as requisiccedilotildees que seguem abaixo
A funccedilatildeo seja Advpl ou uma funccedilatildeo compilada no Repositoacuterio deve obrigatoriamente ter um retorno do tipo String pois o Web Browser solicitante seraacute informado pelo Server Protheus que a string
retornada deveraacute ser interpretada e mostrada pelo Browser como um HTML
Devido agrave origem da requisiccedilatildeo natildeo ter relaccedilatildeo alguma com a interface Remote do Protheus natildeo eacute possiacutevel utilizar determinadas funccedilotildees Advpl que foram escritas exclusivamente para esta interface
como por exemplo as funccedilotildees MsgStop Alert e demais funccedilotildees e objetos de Interface de Janelas
O que iraacute diferenciar uma funccedilatildeo executada via link apl e apw seraacute as etapas de execuccedilatildeo das mesmas Esta caracteriacutestica de funcionamento seraacute melhor esclarecida apoacutes a leitura dos toacutepicos sobre desenvolvimento de
funccedilotildees apl e desenvolvimento de funccedilotildees apw
03 Paacuteginas dinacircmicas - O Advpl ASP
Revisatildeo 26042004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
Uma paacutegina ASP (Active Server Pages) eacute uma paacutegina HTML contendo coacutedigo interpretaacutevel em uma linguagem compreensiacutevel ao servidor HTTP em uso Por exemplo o IIS da Microsoft utiliza o VBScript para criar
suas paacuteginas ASP do mesmo modo que o Protheus utiliza o ADVPL Uma paacutegina ASP eacute uma combinaccedilatildeo de script HTML e coacutedigo interpretaacutevel No ADVPL ASP esse coacutedigo eacute padratildeo xBase portanto a preocupaccedilatildeo
maior daqueles que jaacute conhecem e trabalham com o Protheus e desejam desenvolver paacuteginas ativas para aplicaccedilotildees Web utilizando essa facilidade eacute conhecer HTML
3
Caracteriacutesticas do ADVPL ASP - Arquivos APH Os arquivos ADVPL ASP tecircm a extensatildeo padratildeo APH Satildeo arquivos texto e devem ser adicionados a um projeto no Protheus IDE e compilados da mesma maneira que os programas tradicionais A diferenccedila eacute que o
Protheus Server identificaraacute que se trata de um ADVPL ASP e executaraacute uma espeacutecie de tradutor (parser) antes que a compilaccedilatildeo seja executada Este parser iraacute transformar todo o arquivo em uma funccedilatildeo uacutenica que
receberaacute os mesmos paracircmetros das funccedilotildees APL simples como explicado anteriormente no Item Desenvolvendo Funccedilotildees APL e retornaraacute uma string
O desenvolvedor natildeo precisa se preocupar em retornar HMTL algum pois o APH tambeacutem eacute um arquivo HTML A funccedilatildeo que foi gerada na compilaccedilatildeo iraacute se encarregar de retornar o HTML contigo no arquivo
depois que o coacutedigo foi processado Um Arquivo APH gera no repositoacuterio de Objetos do Protheus uma funccedilatildeo com o mesmo nome do arquivo poreacutem prefixada com H_ + nome_do_arquivo_aph
Por se tornar uma funccedilatildeo no momento da compilaccedilatildeo natildeo eacute possiacutevel utilizar a claacuteusula FUNCTION para criar outras funccedilotildees dentro de um arquivo APH Caso exista essa necessidade tais funccedilotildees devem ser criadas
em um arquivo PRW tradicional e chamadas de dentro do APH
A extensatildeo APH para o nome dos arquivos eacute obrigatoacuteria Qualquer outra extensatildeo usada no nome do arquivo natildeo seraacute reconhecida e o parser do IDE natildeo seraacute executado durante a compilaccedilatildeo Foi criada tambeacutem a
extensatildeo de arquivos AHU ( Aph de Usuaacuterio ) que possui o mesmo tratamento de Parser do aruqivo APH gerando uma funccedilatildeo prefixada com L_ A diferenccedila eacute que a funccedilatildeo gerada pelo AHU pode ser gerada sem a
necessiade de autorizaccedilatildeo de compilaccedilatildeo com permissatildeo para substituir fontes microsiga por tratar-se de um Aph de Usuaacuterio qeuivalente agrave uma User Function
Assim como outros ASPacutes a diferenciaccedilatildeo entre script HTML e coacutedigo eacute efetuada atraveacutes dos caracteres lt para indicaccedilatildeo de abertura de coacutedigo e gt para indicaccedilatildeo do encerramento de coacutedigo Por exemplo o
HTML abaixo conteacutem um pedaccedilo de coacutedigo ADVPL separado pelos delimitadores
lthtmlgtltheadgtlttitlegtADVPL ASP Demolttitlegtltheadgt
ltbodygt
ltpgtBem vindo ao mundo do ADVPL ASPltpgt
lt
Soma os 100 primeiros nuacutemeros
Local i nSoma = 0
For i = 1 To 100
NSoma += i
Next i
gt
ltbodygt
lthtmlgt
Quando este arquivo for requisitado ao Protheus Server (atraveacutes de uma chamada em URL por exemplo) o coacutedigo entre os delimitadores seraacute executado poreacutem o script colocado ao redor do coacutedigo seraacute mantido
exatamente como se encontra Por exemplo
httplocalhostH_WEBDEMOAPL
A grande vantagem de se utilizar dos arquivos ADVPL ASP em relaccedilatildeo a criar funccedilotildees APL simples decorre do fato de que nas funccedilotildees APL simples o desenvolvedor deve se preocupar em retornar todo o HTML
necessaacuterio para a correta exibiccedilatildeo no Web Browser
E tambeacutem como o ADVPL ASP mistura o script HTML com o coacutedigo interpretaacutevel pode-se criar um arquivo APH utilizando o editor desejado (como o Microsoft FrontPage por exemplo) e inserir nele os coacutedigos
Advpl necessaacuterios entre as Tags Outro detalhe importante eacute que pode-se utilizar as estruturas de fluxo da linguagem ADVPL para repetir comandos do proacuteprio script HTML (por exemplo colocar um comando de
script HTML dentro de um comando While em ADVPL)
lt While EOF() gt
ltBgt Esta linha seraacute repetida no HTML ateacute ocorrer o fim de arquivo ltBgt
lt
dbSkip()
EndDo
gt
Note que tambeacutem pode existir diferentes blocos de coacutedigo interpretaacutevel separados pelos delimitadores dentro de um mesmo arquivo
Tatildeo importante quanto mesclar coacutedigo interpretaacutevel com script de formataccedilatildeo HTML eacute utilizar os comandos ADVPL para alterar o script de formataccedilatildeo Ou seja colocar o conteuacutedo de variaacuteveis campos etc
diretamente no HTML que seraacute enviado agrave aplicaccedilatildeo client (ao Browser por exemplo) Isso pode ser realizado atraveacutes dos delimitadores de avaliaccedilatildeo Os delimitadores de avaliaccedilatildeo satildeo lt= para abertura e gt para
encerramento Diferentemente dos delimitadores de coacutedigo interpretaacutevel estes devem sempre estar na mesma linha Com eles pode-se criar uma linha de script HTML cujo conteuacutedo conteacutem uma expressatildeo que seraacute
avaliada em tempo de execuccedilatildeo e seu resultado inserido como parte do Html retornado agraveo Browse
ltbgtEsta linha eacute HTML mas o horaacuterio exibido aqui lt= Time() gt foi obtido em tempo de execuccedilatildeo no Servidorltbgt
No exemplo acima a linha HTML seraacute retornada para o Browser com o resultado da funccedilatildeo time (ou seja a hora atual no servidor) inserido no texto
Utilizando todos esses conceitos pode-se criar toda uma aplicaccedilatildeo Web baseada no Protheus Ou seja o processamento e acesso aos dados fica por conta do Protheus Server e a interface fica por conta do Browser
(utilizando o HTML)
Importante Ao codigicar um arquivo APH eou AHU devemos estar atentos agraves regras de utilizaccedilatildeo dos delimitadores de execuccedilatildeo e avaliaccedilatildeo Advpl
1 A Abertura e fechamendo dos delimitadores de execuccedilatildeo lt gt devem estar isoladas em suas respectivas linhas natildeo devendo ter qualquer conteudo adicional nem duas aberturas e fechamentos na mesma linha
Partindo dessa premissa veja abaixo alguns exemplos de como inserir o coacutedigo Advpl abaixo dentro de um APH
IF lOk
nErro++
Endif
CERTO
lt
IF lOk
nErro++
Endif
gt
CERTO
lt IF lOk gt
lt nErro++ gt
lt Endif gt
CERTO
lt IF lOk nErro++ Endif gt
ERRADO
lt IF lOk gtlt nErro++ gt -- 2 aberturas e fechamentos na mesma linha
lt Endif gt
2 Quantograve agraveos delimitadores de avaliaccedilatildeo lt= gt podemos ter vaacuterias aberturas e fechamentos na mesma lionha poreacutem natildeo podemos ter uma abertura e seu respectivo fechamento em linhas diferentes
3 Uma linha qualquer em um arquivo APH nao deve conter mais do que 150 Caracteres pois o Parser insere caracteres de controle em cada linha do mesmo durante a preacute-compilaccedilatildeo e a linha final resultante natildeo
pode ultrapassar 254 caracteres pois neste caso isto impossibilita a compilaccedilatildeo do APH
04 Desenvolvimento de Funccedilotildees APL
Revisatildeo 27042004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
A princiacutepio todas as funccedilotildees contidas no repositoacuterio podem ser executadas diretamente atraveacutes de uma requisiccedilatildeo HTTP via link com extensatildeo apl ao Protheus Server Poreacutem alguns detalhes devem ser
considerados
4
Uma funccedilatildeo executada no momento do recebimento de uma requisiccedilatildeo HTTP eacute executada como um JOB ou seja natildeo contem interface Por isso tais funccedilotildees natildeo podem conter comandos de interface
como criaccedilatildeo de janelas ou exibiccedilatildeo de helps e mensagens de alerta
A uacutenica interface possiacutevel eacute a utilizada no client HTTP Por isso tais funccedilotildees devem SEMPRE retornar uma string de caracteres Apoacutes o processamento da funccedilatildeo essa string de retorno seraacute enviada
diretamente ao client HTTP e este seraacute o responsaacutevel por sua interpretaccedilatildeo Por exemplo utilizando um Web Browser como client pode-se retornar a string de comandos HTML diretamente O HTML entatildeo seraacute
propriamente exibido no Web Browser
Qualquer retorno diferente de uma string de caracteres geraraacute um erro que seraacute enviado agrave aplicaccedilatildeo client HTTP (o erro gerado eacute ldquoInvalid Proc Returnrdquo)
O servidor Protheus passa alguns paracircmetros para as funccedilotildees chamadas Isso significa que ao criar funccedilotildees para serem utilizadas em resposta agraves requisiccedilotildees HTTP deve-se criar o cabeccedilalho da funccedilatildeo
com estes paracircmetros Natildeo eacute obrigatoacuterio utilizar os mesmos nomes de paracircmetros sugeridos abaixo quando criar diretamente estas funccedilotildees Poreacutem como satildeo esses os nomes utilizados no ADVPL ASP explicado mas a
frente eacute aconselhaacutevel utilizaacute-los por motivo de padronizaccedilatildeo
o __aCookies Este paracircmetro recebe um array bidimensional com os Cookies criados na aplicaccedilatildeo client HTTP (por exemplo no Internet Explorer 5) Pode-se utilizaacute-lo para checar
validaccedilotildees mantidas nas maacutequinas client por exemplo Para maiores detalhes consulte a documentaccedilatildeo do HTML ou do Web Browser utilizado
o __aPostParms Este paracircmetro recebe um array bidimensional com os campos contidos em um formulaacuterio HTML recebido atraveacutes de um comando POST Cada item deste array conteacutem
um array com o nome do campo e o valor informado Por exemplo para um formulaacuterio com dois campos para digitaccedilatildeo (um chamado nome e o outro chamado endereco) que enviam os dados para a funccedilatildeo
cadastroapl atraveacutes de um POST a funccedilatildeo receberaacute o array __aPostParms da seguinte forma
ldquonomerdquo ldquoNOME DIGITADO NA PAGINA HTMLrdquo
ldquoenderecordquo ldquoENDERECO DIGITADO NA PAGINA HTMLrdquo
A funccedilatildeo pode tratar os dados recebidos neste array para realizar um processamento especiacutefico com tais informaccedilotildees Para campos onde natildeo eacute possiacutevel a entrada de dados e sim a escolha de uma informaccedilatildeo preacute-
definida (como por exemplo um checkbox) o item somente existiraacute no array caso o campo tenha sido selecionado no formulaacuterio HTML (por exemplo se o checkbox for marcado)
o __nProcID Conteacutem o Handle da Thread de execuccedilatildeo daquela funccedilatildeo A utilizaccedilatildeo deste paracircmetro seraacute explicada juntamente com o toacutepico ADVPL ASP posteriormente
o __aProcParms Este paracircmetro recebe um array bidimensional com os paracircmetros enviados na linha de URL do Web Browser Por exemplo na execuccedilatildeo de uma funccedilatildeo via linha de URL
do Web Browser como
httpservidorvendeaplcod=000001ampnome=PRODUTO DE TESTEampquant=20
a funccedilatildeo chamada vende receberaacute o array __aProcParms da seguinte forma
ldquocodrdquo ldquo000001rdquo
ldquonomerdquo ldquoPRODUTO DE TESTErdquo
ldquoquantrdquo ldquo20rdquo
A funccedilatildeo pode tratar estes dados recebidos para realizar processamentos especiacuteficos Eacute muito uacutetil tambeacutem para criar links de execuccedilatildeo diretamente atraveacutes de um Web Browser
o __cHTTPPage Esse paracircmetro foi criado originbalmente para recebe o nome da paacutegina arquivo ou funccedilatildeo originalmente requisitada para o Protheus Server poreacutem natildeo foi utilizado e
permaneceu por compatibilidadeCaso consultado ele retorna uma string em branco
o __aHTTPHead Esse paracircmetro recebe um array com os Headers do cabeccedilalho da requisiccedilatildeo HTTP enviados pelo Web Browser
Exemplo de funccedilatildeo APL
A funccedilatildeo a seguir eacute um bom exemplo para ser executado atraveacutes de um Web Browser Ela retorna uma string contendo a paacutegina HTML onde estaacute escrita a mensagem ldquoHello Worldrdquo e a lista de paracircmetros passados na
linha de URL Para testaacute-la crie um arquivo novo no Protheus IDE cole o coacutedigo abaixo e salve o arquivo como WEBDEMOPRW Apoacutes compilar o programa basta chamar em um Web Browser uma URL como
httplocalhostu_webdemoaplcod=000001ampdesc=DESCRICAO DO PRODUTOampqtd=2
Coacutedigo da funccedilatildeo include rwmakech
User Function WebDemo(__aCookies__aPostParms__nProcID__aProcParms__cHTTPPage)
Local cHTML =
Local i
Coloca uma mensagem em HTML
cHTML += ltpgtlth1 align=centergtHello Worldlth1gtltpgt
Coloca um separador de linha em HTML
cHTML += lthrgt
If Len(__aProcParms) = 0
cHTML += ltpgtNenhum paracircmetro informado na linha de URL
Else
For i = 1 To Len(__aProcParms)
cHTML += ltpgtParacircmetro + __aProcParms[i1] + - Valor +
__aProcParms[i2] + ltpgt
Next i
Endif
Return(cHTML)
Importante
Para crias as funccedilotildees que seratildeo utilizadas em chamadas via um Web Browser ou seja em qualquer request HTTP deve-se seguir o procedimento normal de criaccedilatildeo de funccedilotildees no AP5 utilizando o AP5 IDE para a
ediccedilatildeo e para a compilaccedilatildeo
Note que no caso de funccedilotildees do usuaacuterio (User Function) o nome chamado na URL do Browser tambeacutem deveraacute conter o U_ no comeccedilo da funccedilatildeo por exemplo
httpservidoru_WebDemoapl
Configuraccedilatildeo Miacutenima Em toacutepico agrave parte eacute explicada toda a configuraccedilatildeo referente agrave seccedilatildeo http do Protheus Server A configuraccedilatildeo abaixo eacute a miacutenima necessaacuteria para executar o exemplo acima
[http]
Port=80
Path=(caminho absoluto de disco para arquivos publicados no servidor )
Environment=(nome do environment do Serber que seraacute utilizado para o processamento)
Para testar sua configuraccedilatildeo reinicie o server Protheus e chame via WebBrowser a url
httplocalhosttimeapl
Deveraacute ser mostrada no Browse o horaacuterio atual no formato hhmmss no Servidor pois este eacute o resultado da funccedilatildeo Advpl TIME()
O Protheus atendendo agrave requisiccedilotildees apl
Quando solicitado atraveacutes de um Web Browser um processamento de uma funccedilatildeo via link apl a funccedilatildeo solicitada deve ser responsaacutevel por abrir o ambiente necessaacuterio agraveo processamento conectar com o Banco de
Dados caso necessaacuterio realizar o processamento e retornar a String Html ao Web Browser
Este ambiente criado eacute fechado imediatamente apoacutes o teacutermino do processamento o que exige muito do Servidor da aplicaccedilatildeo em se tratando de uma aplicaccedilatildeo web com vaacuterios usuaacuterios efetuando acessos simultacircneos
Para atender com mais eficiecircncia agraves requisiccedilotildees de processamento de um projeto web foi implementada no Protheus a tecnologia de Working Threads explicada em mais detalhes no toacutepico Desenvolvimento de
Funccedilotildees apw
05 Desenvolvimento de Funccedilotildees APW
Revisatildeo 26042004
Abrangecircncia
Versatildeo 609 Versatildeo 710 Versatildeo 811
Diferenccedila de Funcionamento entre links APL e APW
Como visto em toacutepicos anteriores ao desenvolver uma funccedilatildeo para ser executada via link apl a funccedilatildeo deve ser responsaacutevel pela abertura do ambiente e inicializaccedilotildees necessaacuterias para um processamento qualquer e
apoacutes ser finalizado este processamento o ambiente montado e utilizado eacute fechado automaticamente de modo que cada requisiccedilatildeo de processamento de usuaacuterio atraveacutes de link apl iraacute iniciar uma nova Thread onde o
ambiente deveraacute ser preparado novamente A programaccedilatildeo neste tipo de ambiente exige muito do servidor Protheus
Visando dar perfornance agraves aplicaccedilotildees WEB desenvolvidas utilizando-se o Protheus foi criado link APW que utiliza um recurso do servidor Protheus conhecido como working threads Uma wortking thread eacute uma
configuraccedilatildeo especial de job que permite configurar umacutenuacutemero preacute-definido de Threads no Servidor as quais teratildeo o ambiente de execuccedilatildeo preparado e inicializado atraveacutes de uma funccedilatildeo Advpl onde cada working
5
thread eacute deixada na memoacuteria do servidor em modo de espera (stand-by) de modo que um usuaacuterio ao acessar um link apw o servidor Protheus iraacute direcionar a requisiccedilatildeo de processamento agrave uma working thread que
estiver em stand-by e apoacutes o processamento ser efetuado e o HTML ser retornado ao Browser a working thread retorna novamente ao estado de stand-by voltando a estar disponiacutevel para atender agrave uma nova
requisiccedilatildeo do mesmo ou de outro usuaacuterio navegando no site aplicaccedilatildeo Web
A utilizaccedilatildeo de Working Threads exige a definiccedilatildeo miacutenima de duas funccedilotildees Advpl que seratildeo executadas em dois momentos distintos A primeira funccedilatildeo eacute responsaacutevel pela inicializaccedilatildeo do ambiente comum de
execuccedilatildeo de requisiccedilotildees devendo estabelecer conexatildeo com a Base de Dados utilizada abrir as tabelas utilizadas no Site e preparar as variaacuteveis comuns de utilizaccedilatildeo da aplicaccedilatildeo A segunda funccedilatildeo seraacute responsaacutevel
por encapsular a requisiccedilatildeo do usuaacuterio realizada a partir do Web Browse Ela receberaacute como paracircmetro o nome do link digitado e macro-executar a funccedilatildeo correspondente realizando o tratamento de erro e retorno
Deste modo um ambiente uma vez inicializado natildeo eacute fechado e pode ser utilizado por vaacuterios usuaacuterios que estatildeo navegando no Site o que viabiliza um grande ganho em perfoemance e carga do Servidor
Tipos de Working Threads
Existem dois tipos de Working Threads configuraacuteveis no Protheus a Working Thread WEB e a Working Thread WEBEX ( abreviaccedilatildeo de WEB EXtended ) Ambas possuem basicamente o mesmo princiacutepio de
funcionamento poreacutem o que muda entre ambas eacute a recepccedilatildeo de paracircmetros e a utilizaccedilatildeo de Sessions nativas do Server Protheus Para visualizarmos melhor estas diferenccedilas vejamos com um detalhe um pouco maior
os modelos de funccedilatildeo de inicializaccedilatildeo de ambiente e conexatildeo para ambas as configuraccedilotildees de Working Threads WEB e WEBEX
Working Threads WEB
Para nos utilizarmos das Working Threasd WEB devemos criar as funccedilotildees responsaacuteveis pela inicializaccedilatildeo de ambiente e a funccedilatildeo de conexatildeo
A funccedilatildeo de inicializaccedilatildeo de ambiente natildeo recebe paracircmetro algum realizar a preparaccedilatildeo do ambiente comum de execuccedilatildeo de requisiccedilotildees e deve retornar um valor booleano (T) verdadeiro caso o ambiente tenha sido
inicializado com sucesso ou (F) falso no caso de alguma condiccedilatildeo ou erro que torne o ambiente montado por esta thread natildeo operacional caso este em que a Thread eacute removida da memoacuteria apoacutes a inicializaccedilatildeo
A funccedilatildeo de conexatildeo recebe os mesmos seis paracircmetros de uma funccedilatildeo chamada via link apl e um seacutetimo parametro String que conteacutem apenas o nome da funccedilatildeo chamada no link Por exemplo a chamada de um
link httplocalhostu_testeapw no seacutetimo paracircmetro da funccedilatildeo de conexatildeo a string u_teste A funccedilatildeo de conexatildeo deve ter tratamento de erro proacuteprio e diferenciado e sempre deveraacute retornar um conteuacutedo do tipo
String
Working Threads WEBEX Para nos utilizarmos das Working Threasd WEBEX devemos tambeacutem criar as funccedilotildees responsaacuteveis pela inicializaccedilatildeo de ambiente e a funccedilatildeo de conexatildeo
A funccedilatildeo de inicializaccedilatildeo comporta-se de maneira idecircntica a de inicializaccedilatildeo WEB natildeo recebendo paracircmetro algum e devendo retornar um valor booleano (T) verdadeiro caso o ambiente tenha sido inicializado com
sucesso ou (F) falso no caso de alguma condiccedilatildeo ou erro que torne o ambiente montado por esta thread natildeo operacional caso este em que a Thread eacute removida da memoacuteria apoacutes a inicializaccedilatildeo
A funccedilatildeo de conexatildeo natildeo recebe diretamente paracircmetro algum Isso mesmo Todos os paracircmetros recebidos em versotildees anteriores atraveacutes de Arrays satildeo recebidos agora por Alias Virtuais de alta velocidade
HttpGet
HttpPost
HttpCookies
HttpHeadIn
Cada um destes alias virtuais eacute responsaacutevel respectivamente pela recepccedilatildeo de paracircmetros via GET POST COOKIES e Header HTTP da requisiccedilatildeo
Tambeacutem foram implementados os Alias virtuais HttpHeadOut e HttpSession para respecrivamente permitir alterar ou adicionar informaccedilotildees do Header HTTP de retorno de processamento de uma requisiccedilatildeo e
utilizaccedilatildeo de variaacuteveis tipo SESSION por usuaacuterio Web Estes recursos satildeo detalhados nos toacutepicos WEBEX - Detalhamento de Operaccedilatildeo e posteriores
O Futuro das aplicaccedilotildees WEB no Protheus
Apoacutes o desenvolvimento de aplicaccedilotildees em ambiente WEBEX e dados os oacutetimos resultados obtidos recomenda-se fortemente que as aplicaccedilotildees web desenvolvidas utilizando-se o Protheus Server sejam escritas em
conformidade para a utilizaccedilatildeo dos recursos WEBEX
Para facilitar tal desenvolvimento em paralelo agrave tecnologia disponibilizada na aplicaccedilatildeo jaacute estaacute integrada com a Infra-Estrutura disponiacutevel no repositoacuterio padratildeo do Microsiga Protheus 8 as funccedilotildees da Infra-Estrutura
ApWebEx escritas e publicadas para melhor atender agraves necessidades comuns verificadas no decorrer do desenvolvimento de uma aplicaccedilatildeo Web
Os recursos disponiacuteveis nesta lib estatildeo documentados nos toacutepicos Infra-Estrutura APWEBEX e posteriores englobando comandos funccedilotildees exemplos e dicas de utilizaccedilatildeo destes recursos
6
06 Configurando o Server Protheus para HTTP
Revisatildeo 28042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
As configuraccedilotildees de http do Server Protheus permitem a configuraccedilatildeo de sites estaacuteticos e dinacircmicos com a criaccedilatildeo de um ou mais hosts de acesso criaccedilatildeo de pastas virtuais e dites dinacircmicos com resposta para links
apl e apw simultaneamente Neste documento abrangeremos um resumo exemplificado das configuraccedilotildees HTTP do Server Protheus As seccedilotildees abaixo devem ser inseridas no arquivo de configuraccedilotildees do servidor
Protheus ( mp8srvini )
Configuraccedilatildeo Miacutenima [http]
Enable=1
Path=cAp_Datahttp
Observaccedilatildeo Vale lembrar que apoacutes ter inserido a configuraccedilatildeo do [http] no INI do Protheus eacute importante baixar o Server e subir novamente
Com esta configuraccedilatildeo habilitamos o Server Protheus como um servidor de arquivos e paacuteginas estaacuteticas com o HTTP na porta padratildeo (80) e utilizando o diretorio em cAp_dataHttp como diretoacuterio raiz de
publicaccedilotildees WEB Como natildeo haacute configuraccedilatildeo de host especiacutefica um arquivo nesta pasta poseraacute ser acessado atraveacutes dos hosts httplocalhost ( desde que o browse seja aberto na estaccedilatildeo servidora )
httpnnnnnnnnnnnn ( IP da estaccedilatildeo servidora ) ou httpxxxxxxxxxx ( nome da estaccedilatildeo servidora ) Por exemplo Dentro da pasta configurada na chave PATH do HTTP crie um arquivo chamado defaulthtm
com o seguinte conteuacutedo ( pode ser criado inclusove com o notepad )
lthrgt
Ola Mundo HTTP
lthrgt
Agora abra um Web Browser no mesmo equipamento e digite na url httplocalhost Ao acessar esta url deveraacute ser mostrado na tela do Browse huas barras horizontais e o texto Ola Mundo HTTP entre elas
Atendendo agrave requisiccedilotildees apl
Agora vamos habilitar este host para atender agrave requisiccedilotildees de funccedilotildees atraveacutes de link apl Para tal precisamos apenas do nome de um Environment (ambiente) configurado no INI Podemos usar o proacuteprio ambinete
do ERP Basta acrescentarmos na seccedilatildeo http a chave Environment=ltnome_do_ambientegt para que este ambiente passe a atender agraveo processamento de funccedilotildees Advpl atraveacutes de links apl Por exemlo caso o
ambiente configurado para o ERP chame-se EnvADS710 basta acrescentar na seccedilatildeo http a chave Environment=EnvADS710 O INI ficaria conforme abaixo
[http]
Enable=1
Path=cAp_Datahttp
Environment=EnvADS710
Para testar a execuccedilatildeo de funccedilotildees abra um Web Browse na estaccedilatildeo servidora e acesse o link httplocalhosttimeapl IStoacuteiraacute executar a funccedilatildeo Advpl TIME() que retornaraacute ao Browse uma string contendo o
horaacuterio atual no servidor no formato HHMMSS
Atendendo agrave requisiccedilotildees apw
A configuraccedilatildeo para atendimento de requisiccedilotildees de processamento http atraveacutes de links apw envolve a criaccedilatildeo de uma nova seccedilatildeo no INI com um nome natildeo-especiacutefico para configurar o tipo de job que iraacute executar o
processamento ( WEB ou WEBEX ) juntamente com as funccedilotildees responsaacuteveis pela inicializaccedilatildeo e conexatildeo das Threads Advpl e na seccedilatildeo http configuramos uma chave chamada ResponseJob apontando para a seccedilatildeo
de configuraccedilatildeo do JOB
Por exemplo para configurarmos o atendimento de requisiccedilotildees apw em um ambiente ERP utilizando a infra-estrutura APWEBEX vamos criar uma seccedilatildeo chamada ERP_APWEBEX apontando para as funccedilotildees da
Infra-Estrutura APWEBEX correspondentes
[ERP_APWEBEX]
type=WEBEX
onstart=STARTWEBEX
onconnect=CONNECTWEBEX
Environment=EnvADS710
Instances=13
SigaWeb=MAK
Atraveacutes desta configuraccedilatildeo especificamos um Job do tipo WEBEX onde a funccedilatildeo de inicializaccedilatildeo utilizada seraacute a STARTWEBEX a funccedilatildeo de conexatildeo seraacute a CONNECTWEBEX ( ambas da Infra-estrutura
APWEBEX ) que utilizaratildeo o ambiente AnvADS710 para processamento e seratildeo colocadas no ar apenas uma Working Thread para atendimento de processamento ateacute o maacuteximo de 3 Threads As threads colocadas
no ar acima do nuacutemero miacutenimo ( no exemplo apenas 1 ) satildeo colocadas on-demand caso sejam realizadas requisiccedilotildees apw ao Servidor e natildeo hajam Working Threads dispoviacuteveis no momento e o nuacutemero de Working
Threads no ar ainda natildeo tenha atingido o maacuteximo definido Atraveacutes da configuraccedilatildeo SigaWeb=MAK informamos ao sistema que a mesma estaacute sendo utilizada para o desenvolvimento de um moacutedulo especiacutefico e natildeo
estamos utilizando um moacutedulo Web da ferramenta Protheus 8 Caso a configuraccedilatildeo SigaWeb natildeo seja informada o valor MAK eacute assumido como default
Agora para que esta seccedilatildeo de Jobs seja utilizada para o atendimento efetivo de requisiccedilotildees apw devemos estecificaacute-la na seccedilatildeo http atraveacutes da chave REsponseJob No caso inserimos a chave
ResponseJob=ERP_APWEBEX fincando a seccedilatildeo HTTP conforme abaixo
[http]
Enable=1
Path=cAp_Datahttp
Environment=EnvADS710
ResponseJob=ERP_APWEBEX
Como as requisiccedilotildees via apl e via apw satildeo independentes eacute possiacutevel configurar a seccedilatildeo http para que Environments diferentes respondam agrave requisiccedilotildees apl e apw ou que natildeo sejam atendidas requisiccedilotildees apl
apenas apw
Configurando a seccedilatildeo http para multi-host Todas as configuraccedilotildees acima vistas pertencem agrave seccedilatildeo default do HTTP De modo que tanto faz acessarmos o servidor pelo nome como pelo IP que o resultado serraacute o mesmo Poreacutem para a utilizaccedilatildeo de demais
recursos como diretoacuterios virtuais e mais de um site no mesmo servidor precisamos configurar um host de acesso
Por exemplo vamos criar uma configuraccedilatildeo de HOST para que o servidor caso seja acessado pelo NOME da maquia via HTTP seja visualizado um outro site e apenas sejam atendidos agrave links apl Para isso
devemos criar uma nova seccedilatildeo no INI cujo nome deve ser exatamente o host que seraacute acessado ( como o exemplo vamos supor que o servidor de testes chama-se srvteste ) logo devemos criar uma seccedilatildeo com este
nome
Nesta seccedilatildeo do INI devemos no miacutenimo especificar um Path de acesso agraveos arquivos e as demais configuraccedilotildees vistas ateacute agora da seccedilatildeo http satildeo opcionais A configuraccedilatildeo PORT do HTTP em um host natildeo eacute
suportada Natildeo eacute possiacutevel subir um server protheus em mais de uma porta HTTP
[srvteste]
Path=cAp_DataTestes
Environment=EnvTOP710
Deste modo caso o servidor seja acessado via http atraveacutes de LOCALHOST ou do IP do Server seraacute permitido o acesso agraves funcionalidades configuradas na seccedilatildeo HTTP Caso seja acessado via nome do servidor (
httpsrvteste ) seratildeo acessados os arquivos de outra pasta e as requisiccedilotildees apl seratildeo atendidas pelo Ambiente EnvTOP710
Utilizando este tipo de configuraccedilatildeo podemos subir vaacuterios sites diferentes na mesma aplicaccedilatildeo servidor Protheus cada qual com o seu diretoacuterio raiz de publicaccedilotildees seus ambientes independentes atendendo ou nacirco agrave
requisiccedilotildees apl eou apw
Configurando diretoacuterios virtuais
Ao configurar um host especiacutefico podemos acrescentar ao mesmo uma barra seguido de um nome para acesso agrave um diretoacuterio virtual criando desse modo um endereccedilo de acesso composto por um host e um
diretoacuterio que pode se comportar como um outro site com os arquivos publicados em um path especiacutefico que poderaacute atender requisiccedilotildees de links apl eou apw sob um outro ambiente e configuraccedilatildeo distinta
Utilizando diretoacuterios virtuais eacute possiacutevel dentro do mesmo host instalar vaacuterias aplicaccedilotildees web independentes todas acessiacuteveis sob o mesmo endereccedilotilde base alterando apenas o diretoacuterio de acesso Por exemplo
utilizando como host principal o nome do equipamento servertst podemos instalar o moacutedulo Web Portal Protheus sob o host servertstportal o moacutedulo TCF sob o host servertstrhonline e no host servertst
podemos configurar um site estaacutetico em Html com uma apresentaccedilatildeo institucional e links para os demais moacutedulos
Observaccedilotildees Importantes
Ao configurarmos um Host ele herda as configuraccedilotildees de atendimento de requisiccedilotildees apl e apw especificados na seccedilatildeo HTTP De modo que o host do exemplo continuaraacute a atender requisiccedilotildees apw poreacutem no
ambiente EnvADS710
Visto desta forma recomendamos fortemente que a seccedilatildeo [http] possua apenas especificado um Path em disco que esteja vazio e seja criada uma ou mais configuraccedilotildees de host com as suas devidas propriedades
especificas
Todas as demais chaves relacionadas agrave configuraccedilatildeo HTTP e aos Jobs WEB e WEBEX satildeo opcionais para atender agrave necessiades especiacuteficas Estas chaves estatildeo explicadas em maiores detalhes no DEM na seccedilatildeo
XXX
Configurando diretoacuterios virtuais Da mesma forma que a criaccedilatildeo de hosts podemos criar um novo host utilizando a barra de divisatildeo para especiicar uma pasta virtual quue permite a flexibilidade de termos uma pasta dentro de um mesmo host que
se comporte como um outro host Ainda baseando-se no INI montado nestes exemplos para o servidor de testes vamos supor que exista uma pasta no disco ( por exemplo cAp_dataDocs ) que contenha arquivos
HTML de uma documentaccedilatildeo que deve estar disponccedilivel na web utilizando tambeacutem o host httpsrvteste Poreacutem o host srvteste jaacute aponta para o diretoacuterio cAp_dataTestes
Com o recurso de criaccedilatildeo de diretorio virtual no HTTP criamos apenas uma nova entrada do mesmo host colocando no nome do mesmo uma barra de divisatildeo seguido do nome de uma pasta a ser acessada via
HTTP ( que natildeo precisa necessariamente existir no disco) e dentro desta seccedilatildeo acrescentar a chave path apontando para o diretoacuterio desejado da mesma maneira utilizada para configurar um host
No exemplo abaixo criamos a pasta virtual info dentro do host srvteste apontando para o path do disco cAp_DataDocs De modo que ao ser acessado via url o endereccedilo httpsrvtesteinfo a partir dele seratildeo
acessados os arquivos da pasta cAp_DataDocs
[srvtesteinfo]
Path=cAp_DataDocs
Vejamos agora como ficou o nosso arquivo INI com todas as configuraccedilotildees acima exemplificadas
Configuiracao de Working Threads usando a infra-estrutura APWEBEX
[ERP_APWEBEX]
type=WEBEX
onstart=STARTWEBEX
onconnect=CONNECTWEBEX
Environment=EnvADS710
Instances=13
Configuraccedilatildeo da seccedilatildeo httpo default para atender agrave requisiccedilotildees de apl e apw
[http]
7
Enable=1
Path=cAp_Datahttp
Environment=EnvADS710
ResponseJob=ERP_APWEBEX
SigaWeb=MAK
Configuraccedilatildeo do host srvteste para atender requisiccedilotildees via apl atraveacutes do environment EnvTOP710
[srvteste]
Path=cAp_DataTestes
Environment=EnvTOP710
Configuraccedilatildeo da pasta virtual info no host srvteste para apontar para um path no disco com documentos
[srvtesteinfo]
Path=cAp_DataDocs
Infra-Estrutura APWEBEX
Revisatildeo 27042004
Abrangecircncia
Versatildeo 811
A Infra-Estrutura APWEBEX Visando o melhor aproveitamento da tecnologia de working threads implementada no servidor Protheus para o processamento de requisiccedilotildees de uma aplicaccedilatildeo web foram desenvolvidas funccedilotildees de apoio miscelacircnea
e infra-estrutura compiladas no repositoacuterio padratildeo de Infra-Estrutura do ERP Microsiga visando simplificar e auxiliar o desenvolvimento de uma soluccedilatildeo web A este conjunto de funccedilotildees demos o nome de Lib de
Infra-Estrutura APWEBEX que engloba atualmente os tratamentos comuns agraves funccedilotildees de inicializaccedilatildeo de ambiente e conexatildeo ( atendimento de requisiccedilotildees http via link apw ) com seus respectivos pontos de
entrada comandos e funccedilotildees de miscelacircnea comuns agraveos projetos de soluccedilotildees web integradas com o ERP
Como utilizar este recurso no desenvolvimento de soluccedilotildees
As funccedilotildees pertinentes agrave Infra-Estrutura APWEBEX jaacute estatildeo implementadas no repositoacuterio padratildeo da ferramenta Protheus 8 e os comandos especiacuteficos que envolvem este recurso encontram-se no arquivo header
apwebexch disponibilizado tambeacutem jonto com a ferramenta Protheus 8
A utilizaccedilatildeo destes recursos para integraccedilatildeo de aplicaccedilotildees envolve a leitura desta documentaccedilatildeo onde seraacute visto com maiores detalhes as possibilidades de uso da ferramenta como a integraccedilatildeo de uma aplicaccedilatildeo Web
com um ambiente e funcionalidades do ERP Microsiga
Como usufruir desta documentaccedilatildeo Todos os toacutepicos pertencentes agrave este grupo satildeo direcionados agraveo desenvolvimento de soluccedilotildees web utilizando as funccedilotildees de Infra-Estrutura APWEBEX aleacutem de ser explicado com detalhes o funcionamento da
tecnologia WEBEX do Protheus e dos recursos nativos da ferramenta englobando os comandos e funccedilotildees publicados exemplos de coacutedigos Advpl utilizando estes recursos configuraccedilatildeo da ferramenta e mensagens de
ocorrecircncias de erro das funccedilotildees e comandos com possiacuteveis causas e soluccedilotildees
Eacute fortemente recomendado que os documentos constantes neste grupo fossem apreciados antes de aprofundar-se nas informaccedilotildees dos proacuteximos toacutepicos
01 Recepccedilatildeo de paracircmetros por Alias Virtuais
Revisatildeo 30042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
A recepccedilatildeo de paracircmetros vindos do Web Browser quando utilizamos Working Threads do tipo WEBEX atraveacutes de links apw eacute realizada atraveacutes de Alias Virtuais especiacuteficos ao inveacutes de receber as informaccedilotildees
GET POST e HEADER em array quando executamos a chamada atraveacutes de link apl A nomenclatura de Alias Virtual foi adotada pois a sintaxe do coacutedigo-fonte eacute exatamente a mesma utilizada quando desejamos
acessar um campo de uma tabela aberta atraveacutes de um alias
Em um ambiente montado para atender agrave requisiccedilotildees via link apw utilizando Working Threads WEBEX podemos nos utilizar dos seguintes alias virtuais
HttpCookies
HttpGet
HttpPost
HttpHeadIn
HttpHeadOut
HttpSession
HttpCookies Atraveacutes do alias virtual HttpCookies eacute possiacutevel consultar os Cookies do Header Http enviados pelo Browser e criar ou alterar o conteuacutedo de um cookie a ser devolvido agraveo Browser Um cookie visto de forma geral eacute
um paracircmetro ao qual atribuiacutemos um nome que uma vez devolvido agraveo Browse solicitante eacute re-enviado ao Protheus a partir da proacutexima requisiccedilatildeo realizada pelo Browser
HttpGet
Para receber os paracircmetros enviados atraveacutes da URL (meacutetodo GET do HTTP) jaacute devidamente convertidos e tratados utilizamos o alias virtual HttpGet onde acessamos pelo nome a propriedade desejada e caso a
mesma tenha sido enviada pelo Browser a mesma eacute retornada como uma String
HttpPost Para receber os paracircmetros submetidos (enviados) pelo Browser atraveacutes do meacutetodo POST jaacute devidamente convertidos e tratados utilizamos o alias virtual HttpPost onde acessamos pelo nome a propriedade desejada
e caso a mesma tenha sido enviada pelo Browser a mesma eacute retornada como uma String
HttpHeadIn
Para a recepccedilatildeo e tratamento das informaccedilotildees recebidas atraveacutes do Header do pacote HTTP foi criado o alias virtual HttpHeadIn que aleacutem de consultar as informaccedilotildees constantes no Header HTTP proveinente da
requisiccedilatildeo do usuaacuterio permite tambeacutem acesso agrave propriedades da conexatildeo atual do usuaacuterio como o IP do usuaacuterio solicitante por exemplo
HttpHeadOut Atraveacutes deste alias virtual de retorno podemos alterar ou criar um paracircmetro no Header de retorno HTTP do Protheus a ser devolvido agraveo Browser solicitante de uma requisiccedilatildeo de processamento
HttpSession O alias virtual HttpSession foi criado para possibilitar a criaccedilatildeo de variaacuteveis session por usuaacuterio do site com controle de identificaccedilatildeo nativa da ferramenta atraveacutes de um cookie de identificaccedilatildeo chamado
SESSIONID No toacutepico Alias Virtual HttpSession eacute explicado em detalhes o funcionamento deste mecanismo
Este recurso nos permite criar atricuir conteuacutedo e consultar conteuacutedo de uma variaacutevel relacionada agraveo usuaacuterio que estaacute realizando uma requisiccedilatildeo http Podemos armazenar em uma variaacutevel de Session os seguintes
tipos de variaacuteveis A (array) C (character) D (data) L (loacutegica) e N (numeacuterica) Natildeo satildeo suportados O (Objetos) eou B (Code Blocks)
Limitaccedilotildees de uso dos alias virtuais para recebimento de paratildemetros
Dadas as caracteriacutesticas operacionais e de acesso agraveos alias virtuais devemos estar atentos agrave nomenclatura de campos de um formulaacuterio HTML para serem recuperados com sucesso pelos alias virtuais correspondentes
A nomenclatura de campos do formulaacuterio deve obedecer agrave regra de criaccedilatildeo de variaacuteveis em Advpl O campo do formulaacuterio deve sempre ser iniciado com um caracter alfabeacutetico pode conter letras ou algarismos no
nome e o caracter _ ( underline ) Natildeo satildeo permititos espaccedilotildes hiacutefen ou caracteres acentuados como nome de um campo Caso utilizado um nome de campo fora do padratildeo suportado o conteuacutedo do mesmo natildeo seraacute
recuperaacutevel em Advpl
8
02 Alias virtual HttpCookies
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpCookies eacute possiacutevel consultar os Cookies do Header Http enviados pelo Browser e criar ou alterar o conteuacutedo de um cookie a ser devolvido agraveo Browser Uma variaacutevel de Cookie retorna um
tipo Advpl String e apenas aceita uma atruibuiccedilatildeo de String Vale lembrar tambeacutem que um cookie eacute um recurso do Browser que estaacute realizando a requisiccedilatildeo e existe um limite de tamanho para o total de Cookies
utilizados Este limite costuma ser proacuteximo a 1024 Bytes
Trata-se portanto de uma propriedade de leitura e gravaccedilatildeo dispniacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Utilizaccedilatildeo de Cookies
A utilizaccedilatildeo de Cookies tecircm objetivo praacutetico restrito agrave aplicaccedilotildees onde haja a necessidade impliacutecita de termos uma informaccedilatildeo relacionada agraveo browser utilizado pelo usuaacuterio atual que devam ser interpretadas
independente do usuaacuterio estar logado ou natildeo ( isto eacute independam diretamente de sessions )
Um exemplo praacutetico disto eacute o desenvolvimento de um site onde o conteuacutedo dinacircmico eacute retornado ao usuaacuterio em mais de um idioma Na entrada do site apresentamos um formulaacuterio ao usuaacuterio onde o mesmo iraacute
escolher o idioma de sua preferecircncia Mesmo que a session de login deste usuaacuterio expire no servidor o cookie com o idioma selecionado ainda estaacute no Browser de modo que a proacutexima requisiccedilatildeo do usuaacuterio pode ser
codificada para direcionaacute-lo para a paacutegina de login do site com as mensagens no idioma que o mesmo jaacute estava navegando
Lendo o valor de um Cookie
Atraveacutes dos exemplos abaixo lemos o valor do Cookie de identificaccedilatildeo do uacutesuaacuterio e um cookie de usuaacuterio criado para identificar no Browse qual eacute o idioma utilizado pelo usuaacuterio atual
cUserId = HttpCookies-gtUSERID Retorna o Cookie identificador do usuaacuterio do Protheus
cIdioma = HttpCookies-gtSiteLang Retorna o conteuacutedo do cookie SiteLang criado
Lendo todos os Cookies recebidos
O alias virtual HttpCookie possui uma propriedade chamada aCookies criada apenas para consulta (read-only) que retorna um Array Advpl de Strings contendo os nomes dos Cookies enviados pelo Browser agraveo
Protheus Por exemplo
aInfo = HttpCookies-gtaCookies
For nI = 1 to len(aInfo)
Mostra no console do Server todos os cookies recebidos
conout(Cookie +str(nI3)+ = + aInfo[nI])
Next
Criando um Cookie
A criaccedilatildeo de um Cookie eacute realizada atraveacutes da atrubuiccedilatildeo de um valor diretamente agraveo cookie desejado Por exemplo
HttpCookies-gtMeuCookie = TESTE
A criaccedilatildeo de um Cookie merece uma atenccedilatildeo especial pois um Cookie eacute retornado agraveo browser atraveacutes do Header de Retorno HTTP De modo que para que a criaccedilatildeo de um cookie seja realizada com sucesso o
mesmo deve ser criado antes de haver qualquer processamento de APH AHU caso este que natildeo seria mais possiacutevel a criaccedilatildeo do Cookie pois o Header de Retorno HTTP jaacute teria sido enviado agraveo browser solicitante
03 Alias virtual HttpGet
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpGet podemos consultar se uma determinada propriedade nos foi enviada atraveacutes da URL ( meacutetodo GET )
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos realizar uma requisiccedilatildeo a um link apw
passando pela URL o paracircmetro IMAGEM com o conteacuteuacutedo TESTE
httplocalhostu_TesteGetapwimagem=testeampcor=azul
Para recuperarmos em Advpl o conteuacutedo dos paracircmetros imagem e cor utilizamos
cImagem = HttpGet-gtimagem
cCor = HttpGet-gtcor
Podemos inserir tambeacutem um tratamento default Caso algum paracircmetro natildeo seja enviado ( resulte NIL ) assumimos um valor para o mesmo
DEFAULT cImagem = LogoAp8
DEFAULT cCor = amarelo
Existe tambeacutem uma propriedade do alias virtual HttpGet chamada aGets onde podemos recuperar um array de strings contendo a lista com os nomes dos paracircmetros enviados pelo browser solicitante Por exemplo
aInfo = HttpGet-gtaGets
For nI = 1 to len(aInfo)
conout(GET +str(nI3)+ = +aInfo[nI])
Next
04 Alias virtual HttpPost
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpPost podemos consultar os campos submetidos agraveo servidor atraveacutes do meacutetodo POST
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro
O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos realizar uma requisiccedilatildeo a um link apw
atraveacutes de um formulaacuterio html com meacutetodo POST partindo do Html abaixo
lthtmlgtltbodygt
ltform method=POST action=httplocalhostu_TstPostapwgt
Teste ltinput type=text name=CODIGO size=10gt
lthrgt
ltinput type=submitgt
ltformgt
ltbodygtlthtmlgt
Para recuperarmos em Advpl o conteuacutedo do campo CODIGO utilizamos
cCodigo = HttpPOST-gtCodigo
Existe tambeacutem uma propriedade do alias virtual chamada aPost onde podemos recuperar um array de strings contendo a lista com os nomes dos paracircmetros enviados pelo browser solicitante Por exemplo
aInfo = HttpPost-gtaPost
For nI = 1 to len(aInfo)
conout(POST +str(nI3)+ = +aInfo[nI])
Next
05 Alias virtual HttpHeadIn
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpHeadIn podemos consultar os paracircmetros enviados pelo Browser solicitante enviados atraveacutes do Header HTTP ao realizar uma requisiccedilatildeo ao Protheus Server
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos consultar o header http User-Agent
enviado pelo Browser solicitante contendo uma String identiificando o modelo de Browser utilizado
cUserAgent = Httpheadin-gtUser_Agent
Devemos obter como retorno uma string parecida com a mostra abaixo
Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)
Observaccedilatildeo Importante Qualquer paracircmetro no Header HTTP que contenha um ou mais caracteres invaacutelidos para a nomenclatura de variaacuteveis Advpl ( como por exemplo o User-Agent que conteacutem um hiacutefen ) satildeo trocados pelo caractere _
underline para ser possiacutevel a leitura da propriedade
Propriedades especiais
HttpHeadIn-gtaHeaders
Retorna um Array de Strings contendo todas as linhas do Header HTTP da requisiccedilatildeo
HttpHeadIn-gtmain
Retorna o nome da funccedilatildeo chamda atraveacutes da URL sem a extensatildeo e sem o host Por exemplo ao chamar o link httplocalhostu_tstHEaderapw o conteuacutedo de HttpHeadin-gtmain seraacute u_tstHEader
9
HttpHeadIn-gtREMOTE_ADDR
Retorna uma string no formato nnnnnnnnnnnn o IP da estaccedilatildeo que realizou a requisiccedilatildeo
httpHeadIn-gtREMOTE_PORT
Retorna um valor Advpl numeacuterico informando a porta utilizada para realizar a requisiccedilatildeo
06 Alias virtual HttpHeadOut
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 LIB WEBEX
Atraveacutes deste alias virtual de retorno podemos alterar ou criar um paracircmetro no Header de retorno HTTP do Protheus a ser devolvido agraveo Browser solicitante de uma requisiccedilatildeo de processamento
Trata-se portanto de uma propriedade de retorno disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
A criaccedilatildeo de uma linha no Header HTTP merece uma atenccedilatildeo especial pois para que a operaccedilatildeo realizada com sucesso o header deve ser criado antes de haver qualquer processamento de APH AHU pois neste caso
o Header de Retorno HTTP jaacute teria sido enviado agraveo browser solicitante
07 Alias virtual HttpSession
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual httpSession podemos criar e consultar variaacuteveis do tipo session relacionadas agraveo usuaacuterio que realizou a requisiccedilatildeo atraveacutes do Browser
Para diferenciar os usuaacuterios que estatildeo navegando num site o Protheus busca por um cookie identificador de usuaacuterio retornado para o browser a cada requisiccedilatildeo de link APW chamado SESSIONID Caso o Protheus
receba este cookie ele identifica quais sessions pertencem a este usuaacuterio
Quando um usuaacuterio realiza a primeira requisiccedilatildeo http ao Protheus o Protheus natildeo recebe o cookie identificador e automaticamente inicializa um identificador de sessions para o mesmo retornando o identificador ao
Browser via Header HTTP Este identificador pode ser recuperado em uma funccedilatildeo advpl atraveacutes de httpSession-gtSESSIONID
Quando criamos uma variaacutevel de session ela pode ser acessada nas proacuteximas requisiccedilotildees provenientes deste mesmo usuaacuterio Caso uma variaacutevel de session consultada natildeo exista ela retorna o valor NIL (nulo)
Vejamos os exemplos abaixo
Criando variaacuteveis Session HttpSession-gtUserId = 123
HttpSession-gtUserName = U_GetUserName()
Nas linhas acima criamos uma session para o usuaacuterio atual chamada UserId com o conteuacutedo do tipo String e criamos outra session chamada UserName com o retorno da funccedilatildeo U_GetUserName()
Consultando variaacuteveis Session Ao consultar uma variaacutevel session sempre devemos prever que a mesma natildeo pode ter sido criada de modo que a consulta pode retornar NIL ou caso a session jaacute exista retornaraacute o valor do tipo que foi atribuiacutedo `a
mesma
If HttpSession-gtUserId = NIL
Session ainda natildeo foi criada Usuaacuterio natildeo estaacute logado
conout(Usuario natildeo estaacute logado)
Else
Session jaacute criada o usuaacuterio estaacute logado
conout(Usuario estaacute logado ID = + HttpSession-gtUserId )
Endif
Exemplo de Funcionamento de Session No exemplo abaixo criamos uma session para identificar quantas vezes o usuaacuterio chamou esta funccedilatildeo especiacutefica Damos o nome da session de MyCounter que iraacute conter um nuacutemero No primeiro acesso do usuaacuterio a
session natildeo existe ( = NIL ) e eacute criada com o valor numeacuterico 1 (um) A partir das proacuteximas requisiccedilotildees realizadas ao Protheus atraveacutes desta paacutegina ( atraveacutes do botatildeo Refresh do Browser por exemplo ) a session jaacute
existe sendo somado o valor 1 agraveo conteuacutedo jaacute existente e devolvido agraveo browser solicitante um Html informando quantas chamadas jaacute foram realizadas por este usuaacuterio
include rwmakech
include apwebexch
User Function TstSession()
Local cHtml = cEcho =
WEB EXTENDED INIT cHtml
If httpSession-gtmycounter = NIL
cEcho = Inicializando contador
Conout(cEcho)
cHtml += cEcho
httpSession-gtmycounter = 1
Else
httpSession-gtmycounter++
cEcho = contador em +str(httpSession-gtmycounter3)
conout(cEcho)
Endif
cHtml += cEcho + lthrgt
WEB EXTENDED END
Return cHtml
Apoacutes compilado o fonte acima e o Server Protheus configurado e iniciado com HTTP habilitado e as working Threads configuradas abra um Web Browser e solicite a url httplocalhostu_tstsessionapw Seraacute
mostrado no Browse a mensagem Inicializando Contador Agora peccedila um Refresh desta tela ao Browser Seraacute devolvida a mensagem Contador em 2 e a cada refresh deste Browser o contador seraacute
incrementado
Uso de Sessions e Paralelismo - Comportamento do Protheus Server
O Protheus Server trata agraves requisiccedilotildees simultacircneas de links APW em paralelo desde que estejam disponiacuteveis o numero de Working Threads necessaacuterio para tal Por exemplo em uma estrutura de Frames onde cada
um deles aponta o SRC (source) para um link apw o Browser envia as trecircs requisiccedilotildees de apw para o Protheus Server e caso extistam 3 working threads disponiacuteveis naquele momento as trecircs requisiccedilotildees satildeo
atendidas em paralelo
Por outro lado se em duas destas trecircs requisiccedilotildees faz-se necessaacuteria a atualizaccedilatildeo eou consulta a uma variaacutevel de Session ( httpsession ) este processamento em paralelo caso natildeo fosse tratado poderia gerar perdas
no conteuacutedo da session caso a mesma session fosse atualizada simultaneamente
Para resolver esta questatildeo de maneira a natildeo sobrecarregar o Servidor com solicitaccedilotildees de Processamento Sequencial ( Critical Sessions ) foi montado um esquema de Lock de Session de Usuaacuterio automaacutetico com
liberaccedilatildeo automaacutetica apoacutes o processamento do APW ou liberaccedilatildeo manual atraveacutes da chamada da funccedilatildeo HttpLeaveSession() antes do processamento ser terminado
Exemplificando a aplicaccedilatildeo praacutetica e funcionamento deste conceito partimos de um ambiente hipoteacutetico utilizando 3 frames onde um usuaacuterio realiza uma requisiccedilatildeo agrave funccedilatildeo que retornaraacute o source HTML da paacutegina
de frames e a mesma ao chegar no Browser faz o mesmo realizar as trecircs requisiccedilotildees simultaneamente todas elas referentes ao mesmo usuaacuterio Poreacutem o primeiro e o segundo frames realizam uma operaccedilatildeo qualquer
com uma ou mais variaacuteveis da Session do usuaacuterio e o terceiro frame realiza um outro processamento que natildeo depende da consulta de nenhuma variaacutevel da Session As trecircs requisiccedilotildees referente a este usuario seratildeo
processadas simultaneamente por working Threads diferentes ( vamos supor que naquele momento haviam trecircs Working Threads disponiacuteveis) poreacutem quando uma das duas working Threads que tentarem acesso agrave uma
variaacutevel de Session daquele usuaacuterio o Servidor verifica se alguma outra Thread estaacute com o flag de acesso agraves sessions deste usuario Se nenhuma outra thread em uso por este usuaacuterio estaacute com a bandeira entatildeo a
thread atual pega a bandeira para ela senatildeo o processamento da Thread eacute congelado no aguardo da liberaccedilatildeo da bandeira
A liberaccedilatildeo da bandeira ocorre automaticamente no retorno da Working Thread para o Browser antes da chamada do ponto de entrada para Reset do Ambiente atraveacutes da chamada na KlibEx da funccedilatildeo
HttpLeaveSession() Caso seja viaacutevel para o usuaacuterio liberar as sessions antes do retorno da funccedilatildeo ele pode utilizar-se da funccedilatildeo httpLeaveSession() no seu fonte sem necessariamente aguardar pelo encerramento
efetivo e reset de ambiente da Working Thread
Logo retornando ao exemplo acima os Frames 1 e 2 iratildeo concorrer pela banceira de atualizaccedilatildeo de conteuacutedo de sessions onde o primeiro frame que a ser executado pegaraacute a bandeira para ele e atualizaraacute a session e
o segundo frame iraacute esperar o primeiro liberar a bandeira para continuar a ser processado e o terceiro frame como natildeo utiliza nenhuma variaacutevel da session seraacute processado sem depender de nenhum dos outros dois
frames anteriores
Quando utilizamos ASP ( Microsoft Active Server Pages ) o mesmo realiza uma serializaccedilatildeo de requisiccedilotildees de paacuteginas ASP por usuaacuterio de modo que caso o mesmo usuaacuterio solicite trecircs frames asp as requisiccedilotildees
de processamento chegaratildeo ao Servidor ASP simultaneamente mas a bandeira de processamento eacute unica por paacutegina asp sendo liberada apenas apos o teacutermino do processamento da paacutegina de modo que mesmo que
nenhuma das paacuteginas faccedila uso de sessions todas as paacuteginas deste usuaacuterio seratildeo processadas em sequecircncia
08 Envio simultacircneo de HTML ao Browser
Revisatildeo 30042004
Abrangecircncia
10
Versatildeo 710 Versatildeo 811 LIB WEBEX
As aplicaccedilotildees web desenhadas para utilizar a Infra-Estrutura APWEBEX contam com o recurso de Envio simultacircneo de Html ao Browser durante o processamento de uma paacutegina Advpl-ASP ( APH eou AHU )
Este recurso eacute habilitado atraveacutes do Protheus IDE nas opccedilotildees de configuraccedilatildeo de compilaccedilatildeo do ambiente em questatildeo mais especificamente habilitado atraveacutes do CheckBox [ ] Exibir conteuacutedo do Advpl ASP
progressivamente no Browser
Ao habilitamos esta configuraccedilatildeo todos os arquivos APH e AHU satildeo parseados fazendo internamente o uso da funccedilatildeo HttpSend() de modo que mesmo antes do processamento estar concluiacutedo o Html gerado jaacute estaacute
sendo enviado agraveo Browser qoe o solicitou
A utilizaccedilatildeo deste recurso provecirc um ganho de performance subtancial na aplicaccedilatildeo final Todos os projetos desenvolvidos com esta tecnologia ( Infra-Estrutura APWEBEX ) devem ter esta configuraccedilatildeo de compilaccedilatildeo
habilitada no IDE Vale lembrar que caso este recurso natildeo esteja habilitado ao habilitaacute-lo os arquivos aph e ahu do projeto necessitam ser recompilados para que esta configuraccedilatildeo tenha o efeito desejado
Pode existir a necessidade de um processamento de um APH ou AHU natildeo enviar o script Html gerado diretamente ao Browser Para tal situaccedilatildeo podemos desabilitar temporariamente este recurso de envio de html
progressivo em tempo de execuccedilatildeo permitindo assim por exemplo uma funccedilatildeo chamar em sequecircncia dois arquivos APH um para gerar um conteuacutedo Html a ser enviado via e-mail armazenado em uma variaacutevel
Advpl e outro APH para a montagem de uma tela de status que seraacute enviada agraveo Browser solicitante
Para habilitar eou desabilitar o envio simultacircneo do Script HTML agraveo browser em tempo de execuccedilatildeo utilize a funccedilatildeo HttpSetPart()
09 Configuraccedilotildees especiacuteficas APWEBEX
Revisatildeo 26042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Ao utilizarmos as funccedilotildees de Infra-estrutura APWEBEX existem recursos da lib que exigem uma configuraccedilatildeo adicional para serem utilizados
Envio de e-mail automaacutetico atraveacutes da Rotina de Tratamento de Erro do Site
Em caso de erro fatal na aplicaccedilatildeo Web a proacutepria rotina de tratamento de erro pode ser configurada para enviar um e-mail agraveo Administrador do sistema Para tal eacute necessaacuterio inserir as chaves abaixo na seccedilatildeo
do ambiente em uso para o site
ErrorSMTP= (endereccedilo do servidor SMTP a ser usado para o envio do e-mail )
ErrorMail= ( um ou mais endereccedilos de e-mail a receber op e-mail de erro separados por virgula )
ErrorFrom= ( um e apenas um endereccedilo de e-mail a ser usado como remetente do aviso de erro )
ErrorLogin = ( nome de usuario de login no servidor de SMTP caso necessaacuterio )
ErrorPassword= ( senha do usuario de login no servidor de SMTP caso necessaacuterio )
WebAdmin - Login alternativo
A infra-estrutura APWEBEX exige um usuaacuterio e senha para entrar no moacutedulo de administraccedilatildeo WebAdmin Para validar o login eacute utilizado o arquivo de senhas do ERP O usuaacuterio deve ser o Administrador ou
pertencer ao grupo de administradores para ter acesso agraveo WebAdmin Caso natildeo seja viaacutevel usar este arquivo de senhas para validar o login podemos inserir uma chave adicional ( AdmLogin ) no Environment em uso
pela aplicaccedilatildeo Web e configurar nela a senha do usuaacuterio Administrador para login no WebAdmin Caso esta chave seja configurada o arquivo de senhas do ERP natildeo seraacute utilizado para validar o login no WebAdmin
AdmLogin= ( senha do Administrador para logar no WebAdmin )
Pasta alternativa para upload de Rpo via WebAdmin No WebAdmin eacute possiacutevel utilizar uma configuraccedilatildeo especiacutefica para a troca do repositoacuterio de objetos em uso no site sem que seja necessaacuterio parar o servidor para isso Por default a pasta de upload chama-se
SwapRPO e deve existir na estrutura de diretoacuterio do ambiente utilizado a partir do diretoacuterio raiz do ambiente ( RootPath )
RpoUpload= ( pasta de upload alternativa a partir do RootPath do ambiente )
10 Recomendaccedilotildees finais
Revisatildeo 17122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Para todo o desenvolvimento de soluccedilotildees temos em matildeos uma diversidade de recursos desenhados para melhor atender agraves necessidades e adequar-se agraves caracteristicas da aplicaccedilatildeo Dada a flexibilidade dos recursos
recomenda-se aos desenvolvedores adotarem um padratildeo de desenvolvimento e ter em foco a eficiecircncia da aplicaccedilatildeo final tanto no aspecto funcional como na codificaccedilatildeo
Lanccedilando matildeo da experiecircncia em desenvolvimento de aplicaccedilotildees web adquiridas nos uacuteltimos anos nos toacutepicos abaixo estatildeo relacionadas algumas medidas tomadas no desenvolvimento de aplicaccedilotildees que nos satildeo muito
uacuteteis no decorrer de um projeto
Nomenclatura de Funccedilotildees
Para o desenvolvimento de aplicaccedilotildees web foi criado o Statement WEB FUNCTION para a declaraccedilatildeo de funccedilotildees referentes agrave projetos web Este comando na praacutetica apenas prefixa a declaraccedilatildeo da funccedilatildeo com
W_ poreacutem a sua utilizaccedilatildeo identifica que a funccedilatildeo em questatildeo foi construiacuteda uacutenica e exclusivamente para ser chamada a partir de uma requisiccedilatildeo HTTP Em adendo agrave este devemos utilizar os comandos WEB
EXTENDED INIT END disponivels no Include apwebexch para proteger a funccedilatildeo de ser chamada em um ambiente que natildeo o APWEBEX
Separando a Interface do Processamento
Ao desenvolver utilizando Advpl ASP paacuteginas APH AHU recomenda-se separar o processamento da Interface do seguinte modo Criar uma Web Function para a chamdada de umna paacutegina com conteuacutedo
dinacircmico via link apw e um arquivo APH ou AHU de mesmo nome que seraacute chamado internamente de modo que o coacutedigo-fonte escrito na Web Function seja responsaacutevel para gerar as informaccedilotildees a serem
disponibilizadas para o usuaacuterio e o APH contenha apenas a maacutescara destas informaccedilotildees e o miacutenimo de instruccedilotildees Advpl possiacutevel para a montagem da paacutegina Este processo facilita a manutenccedilatildeo de amobos
os coacutedigos pois o Web Designer que iraacute realizar um ajuste no APH natildeo teraacute que desviar do fonte Advpl inserido na paacutegina e o Analista Programador que faraacute a manutenccedilatildeo no coacutedigo Advpl preocupar-se-aacute apenas
com o coacutedigo responsaacutevel para a geraccedilatildeo dos dados que seratildeo mascarados
Utilizaccedilatildeo das Funccedilotildees de Infra-Estrutura
Atraveacutes dos comandos e funccedilotildees disponibilizadas na Infra-Estrutura APWEBEX natildeo tecircmos a necessidade de recriar partes comuns de coacutedigo para todos os projetos que se utilizem desta tecnologia aleacutem de permitir
atraveacutes de pontos de entrada estrategicamente colocados na ferramenta um niacutevel altiacutessimo de customizaccedilatildeo para os projetos desenvolvidos com esta tecnologia de maneira praacutetica e objetiva
11 Monitoramento de Sites em WEBEX
Revisatildeo 17122003
Abrangecircncia
LIB WEBEX
O Objetivo de uma funccedilatildeo de Monitoramento de Sites eacute testar as funcionalidades baacutesicas de um site retornando uma mensagem HTML preacute-definida indicando que estaacute tudo certo e em caso de erro uma
mensagem que procure identificar o que estaacute de errado
Para sites desenvolvidos em Protheus utilizando a tecnologia WEBEX devemos criar uma funccedilatildeo especiacutefica para o site que iraacute determinar se o mesmo estaacute operacional Esta funccedilatildeo seraacute chamada atraveacutes de link
apw
Vejamos o exemplo abaixo escrito para um site cujas bases de dados estatildeo num SQL acessadas via TopConnect Neste exemplo a funccedilatildeo chamada seraacute httpservidorU_SiteMonitorapw e caso esteja tudo certo
ela retornaraacute a string (SITE OK) seguido da data e horaacuterio da execuccedilatildeo da rotina Qualquer retorno diferente disto poderaacute indicar uma anomalia no funcionamento do site
Quando hospedado um site utilizando esta tecnologia no DataCenter da Makira esta informaccedilatildeo gerada pela rotina deve ser passada agraveo depto de infra-estrutura que configuraraacute um software Monitor de Sites que iraacute
realizar a cada um minuto uma requisiccedilatildeo agrave url especificada e iraacute emitir um alerta ao Departamento para que seja verificado o site caso haja alguma falha na resposta include protheusch
include apwebexch
User Function SiteMonitor()
Local cQuery nQtdRec
Verifica se a working Thread estaacute conectada com o TOP
If TCIsConnected()
Return Working Thread perdeu a conexatildeo com o TOP
Endif
Verifica se as tabelas principais estatildeo abertas
If select(SA1)=0
Return Tabela SA1 natildeo estaacute aberta
Endif
If select(SC5)=0
Return Tabela SC5 natildeo estaacute aberta
Endif
Executa uma query de contagem de registros de uma tabela do sistema
cQuery = SELECT count() as QTDREC from SA1010
OPEN QUERY cQuery ALIAS TMPCOUNT
nQtdRec = TMPCOUNT-gtQTDREC
CLOSE QUERY TMPCOUNT
If nQtdRec=0
11
Return Falha na Contagem de registros Query SA1
Endif
Se estaacute tudo certo retorna um HTML informando que estaacute tudo OK
Return (SITE OK) +dtos(date())+ +time()
Comandos - CLOSE QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CLOSE QUERY cAlias
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAlias Caracter Alias sob o qual o cursor da Query foi aberto Caso o alias passado como paracircmetro natildeo se encontre aberto a funccedilatildeo natildeo gera nenhuma ocorrecircncia de
erro
Descriccedilatildeo
Atraveacutes do comando Close Query realizamos o fechamento de uma query aberta atraveacutes do comando OPEN QUERY
ATENCcedilAtildeO Uma query aberta pelo comando OPEN QUERY deve ser fechada pelo comando CLOSE QUERY Poderiacuteamos fechar o alias aberto atraveacutes de uma Query simplesmente com a funccedilatildeo
DbCloseArea() poreacutem isto deixaria em aberto elementos internos de controle criados pelo comando OPEN QUERY
Comandos - OPEN QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
OPEN QUERY ltcQuerygt ALIAS ltcAliasgt [ [NOCHANGE] ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcQuerygt Caracter cQuery corresponde agrave String contendo a Query a ser executada no banco de dados
ALIAS ltcAliasgt Caracter cAlias corresponde ao nome do alias sob o qual o cursor de retorno dos dados pesquisados seraacute aberto no ambiente Advpl Natildeo pode ser especificado
um nome de alias jaacute em uso senatildeo a aplicaccedilatildeo seraacute finalizada com a ocorrecircncia de erro Alias already in Use
[NOCHANGE] Caracter Caso especificada a claacuteusola NOCHANGE na abertura da query a string em cQuery natildeo seraacute submetida agrave funccedilatildeo ChangeQuery()
Descriccedilatildeo
Atraveacutes do comando OPEN QUERY realizamos a abertura de uma Query de busca no Banco de Dados atraveacutes do RDD TOPCONN retornando os dados consultados atraveacutes de um ALIAS Advpl
Caso a Query nao possa ser aberta por erro de sintaxe devido agrave thread atual natildeo estar conectada com o TopConnect ou outro erro seraacute gerado um log de erro informando o Alias o Stack ( Pilha de Chamadas ) de
execucatildeo e o conteuacutedo da Query para Debug
OBSERVACcedilOtildeES IMPORTANTES
Na montagem da string da Query devemos especificar os comandos SQL alias e nomes de campos em letras maiuacutesculas
Quando utilizamos o comando OPEN QUERY natildeo precisamos passar a expressatildeo da Query atraveacutes da funccedilatildeo ChangeQuery() Este proceduimento jaacute eacute realizado internamente pelo comando OPEN
QUERY Para que a query natildeo seja submetida agrave funccedilatildeo ChangeQuery() devemos utilizar o paracircmetro NOCHANGE
A utilizaccedilatildeo deste comando eacute impliacutecita agrave LIB APWEBEX e necessita da utilizaccedilatildeo do include Apwebexch
Comandos - WEB EXTENDED END
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED END ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando para fechar uma seccedilatildeo aberta pelo comando WEB EXTENDED INIT Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do
comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
Comandos - WEB EXTENDED INIT
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED INIT ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando juntamente com o comando WEB EXTENDED END quando montamos uma funcatildeo ( Web Function ) que foi construiacuteda para ser chamada a partir de um Web Browser quando nos
utilizamos das funccedilotildees de Infra-Estrutura APWEBEX
Atraveacutes dele eacute realizada uma preacute-validaccedilatildeo que certifica que a execuccedilatildeo da funccedilatildeo somente seraacute realizada caso a thread atual seja realmente uma Thread montada no ambiente WEBEX aleacutem de podermos inserir uma
preacute-validaccedilatildeo (START) de execuccedilatildeo especiacutefica para esta funccedilatildeo
Caso seja especificada uma funccedilatildeo na claacuteusula START a mesma deveraacute retornar uma String Retornando uma String em branco o processamento da funccedilatildeo original seraacute efetuado normalmente Caso a funccedilatildeo retorne
uma string natildeo-vazia esta string seraacute retornada para a variaacutevel cHtml e o processamento do programa seraacute desviado para a linha do coacutedigo-fonte imediatamente posterior agraveo comando WEB EXTENDED END
Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
12
Infra-Estrutura APWEBEX - EnvUserAPL - Exemplo de Uso com ERP
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo praacutetico abaixo utilizamos em um coacutedigo fonte Advpl os pontos de entrada disponibilizados na Infra-Estrutura APWEBEX para realizar a preparaccedilatildeo de um ambiente ERP Reset de Ambiente
finalizaccedilatildeo de Thread finalizaccedilatildeo de sessions por time-out e customizaccedilatildeo de mensagem de erro para o desenvolvimento de um projeto de Web Site integrado com o ERP Microsiga
Devemos adotar como padratildeo para projetos que utilizam APWEBEX a criaccedilatildeo do arquivo EnvUserapl especificamente para a definiccedilatildeo dos pontos de entrada utilizados pela Infra-Estrutura
APWEBEX e devemos apenas compilar os fontes dos pontos de entrada realmente necessaacuterios agraveo projeto INCLUDE PROTHEUSCH
INCLUDE APWEBEXCH
====================================================================================
Exemplo de Arquivo de Lib de Projeto APWEBEX utilizando os pontos de entrada
da lib para preparaccedilatildeo de ambiente reset de ambiente e tratamento de erro
utilizando APWEBEX em conjunto com o ERP Microsiga
====================================================================================
----------------------------------------------------------------------------
Ponto de Entrada StartWebEx( NIL ) =gt T ou F
Ponto de entrada executado na inicializaccedilatildeo de cada Working Thread ( ONSTART )
Eacute a responsaacutevel por preparar o ambiente para atender agraves requisiccedilotildees WEB de links apw
Natildeo recebe paracircmetro algum da lib e deve retornar T caso tenha inicialziado com sucesso
ou F em caso de falha de inicializaccedilatildeo
----------------------------------------------------------------------------
USER Function StartWebEx()
Prepara o Ambiente ERP
PREPARE ENVIRONMENT
EMPRESA 01
FILIAL 01
TABLES ZX1ZX2ZX3ZX4ZZ1ZZ2ZZ3ZZ4ZZ5
Return T
-------------------------------------------------------------------------------
Ponto de Entrada ConnectWebEx(cFnName) =gt cHtml ou
Ponto de entrada executado imediatamente antes do processamento de uma requisiccedilatildeo de um link APW
Recebe como paracircmetro o nome da funccedilatildeo a ser executada passada no link
Deve retornar uma String que seraacute retornada ao ao Browser solicitante Caso retorne uma string
em branco (vazia) a funccedilatildeo originalmente solicitada eacute executada pela lib
Caso contraacuterio a funccedilatildeo original natildeo eacute executada e a string retornada eacute enviada ao Browser
-------------------------------------------------------------------------------
USER Function ConnectWebEx(cFnName)
Local cHtmlConn =
conout(Vou executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada ResetWebEx(cFnName) =gt cHtml ou
Funccedilatildeo chamada imediatamente Apos a execuccedilatildeo de uma requisiccedilatildeo APW
Recebe como paracircmetro o nome da funccedilatildeo executada e permite tambeacutem que seja acrescentado
algo a mais no Html a ser retornado ao Browser
-------------------------------------------------------------------------------
USER Function ResetWebEx(cFnName)
Local cHtmlConn =
conout(Terminei de executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada FINISHWEBEX()
Funccedilatildeo chamada no fechamendo do ambiente de uma working Thread Apos a execuccedilatildeo deste
a Thread utilizada eacute eliminada da memoacuteria
-------------------------------------------------------------------------------
USER Function FINISHWEBEX()
conout(Finalizando a Working Thread)
Return
-------------------------------------------------------------------------------
Ponto de Entrada ENDSESSION(cSessionId) =gt NIL
Ponto de entrada chamado em uma working Thread quando a session de um usuaacuterio seraacute
eliminada da memoacuteria por time-out Recebe como parametro o Id de sessions de usuario
que estaacute sendo finalizado
-------------------------------------------------------------------------------
USER Function ENDSESSION(cSessionId)
Conout(Sesssion +cSessionId+ limpa da memoacuteria)
Return
----------------------------------------------------------------------------
Ponto de Entrada WebExError(ecErrorLogcHtml) =gt cCustomHtml ou
Esta funcao eacute chamada pela rotina de tratamento de erro WEBEX quando ocorre um erro fatal
e permite que seja retornado um Html de tratamento de erro diferenciado Ela recebe como
parametro o objeto do erro a mensagem ASCII que foi acrescentada ao arquivo errorlog
e o Html original montado pela rotina de tratamento de erro default
IMPORTANTE Por sem um ponto de entrada executado em um momento criacutetico (tratamento
de erro ) esta funccedilatildeo deve ser o mais suscinta e simples possiacutevel natildeo utilizando
sessions banco de dados etc
----------------------------------------------------------------------------
USER Function WebExError(oErrorcErrorLogcHtml)
Local cCustomHtml =
Monta mensagem de erro mais amigavel
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
13
Ocorreu um erro inesperado no
cCustomHtml += processamento desta paacutegina O Administrador do sistema seraacute notificado desta
cCustomHtml += ocorrecircncia Recomendamos fortemente que esta janela do navegador seja cCustomHtml += fechada e uma nova janela seja aberta para retornar agrave navegaccedilatildeo do site
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
Return cCustomHtml
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Nos exemplo abaixo utilizamos a funccedilatildeo escape() para formatar paracircmetros para inserir em uma URL cUrl = httplocalhostwebinfoapw
cPAram1 = Teste de Parametro 01-02
cPAram2 = reserva
cPAram3 = 1+2+3
cUrl += Par01= + escape(cPAram1) + ampPAr02= + escape(cPAram2) + ampPar03= + escape(cPAram3)
O conteudo de cUrl deveraacute ser httplocalhostwebinfoapwPar01=Teste20de20Parametro2001-02ampPAr02=23reserva23ampPar03=12B22B3
proacuteprio para a monyahem de um link
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETJOBPROFSTRING
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
O exemplo abaixo executado em uma thread iniciada a partir de um JOB WEBEX recupera algumas configuraccedilotildees atuais em uso para este JOB cJobType = GetJobProfString(type(empty) )
cInstances = GetJobProfString(Instances(empty) )
cInacTime = GetJobProfString(InactiveTimeout(default) )
cExpTime = GetJobProfString(ExpirationTime(default) )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETPARVALUE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo satildeo montados dois arrays multi-dimensionais com 2 dimensotildees e satildeo realizadas buscas nos mesmos explorando todas as possibilidades de uso da funccedilatildeo GetParValue() Local aTeste1 =
Local aTeste2 =
Aadd(aTeste1AliasTMP1)
Aadd(aTeste1Relacao2x3)
Aadd(aTeste2AliasTMP2)
Aadd(aTeste2Info---Informaccedilatildeo adicional---)
Busca apenas no array ateste1
cAlias = GetParValue(ALIASaTeste1)
cRelacao = GetParValue(RELACAOaTeste1)
cInfo = GetParValue(INFOaTeste1)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) (nao encontrado)
Busca apenas no array ateste2
cAlias = GetParValue(ALIASaTeste2)
cRelacao = GetParValue(RELACAOaTeste2)
cInfo = GetParValue(INFOaTeste2)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP2
conout(cRelacao) (nao encontrado)
conout(cInfo) ---Informaccedilatildeo Adicional---
Busca em ambos os Arrays
Primeiro no aTeste1 e depois no aTeste2
cAlias = GetParValue(ALIASaTeste1aTeste2)
cRelacao = GetParValue(RELACAOaTeste1aTeste2)
cInfo = GetParValue(INFOaTeste1aTeste2)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) ---Informaccedilatildeo Adicional---
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo abaixo geramos a string com o DUMP de um arquivo HTML salvo na pasta WEB a partir do RootPath do Environment O Dump do arquivo seraacute mostrado no Console do servidor e no Web
Browser que solicitou a funccedilatildeo U_DumpTestapw
include protheusch
include apwebexch
User Function DumpTest()
Local cHtml =
Local cTXTFile =
Local cDump =
WEB EXTENDED INIT cHtml
14
Le o arquivo
cTTXFile = memoread(WebDefaulthtm)
Gera a string com o Dump do arquivo
cDump = HExStrDump(cTTXFile)
Mostra o Dump no console
conout(cDump)
Gera HTML para a visualizaccedilatildeo do DUMP
cHtml = VarInfo(DUMPHtmlnotags(cDump)tf)
WEB EXTENDED END
Return cHtml
Exemplo do Texto mostrado no Console
HexSTRDump ( String 237 Start 1 Length 237 )
-------------------------------------------------------------------------------
3C 48 54 4D 4C 3E 3C 48 45 41 44 3E 0D 0A 3C 4D | ltHTMLgtltHEADgt__ltM
45 54 41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 | ETA HTTP-EQUIV=
43 6F 6E 74 65 6E 74 2D 54 79 70 65 22 20 63 6F | Content-Type co
6E 74 65 6E 74 3D 22 74 65 78 74 2F 68 74 6D 6C | ntent=texthtml
22 0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 | __ltMETA HTTP-EQ
55 49 56 3D 22 70 72 61 67 6D 61 22 20 63 6F 6E | UIV=pragma con
74 65 6E 74 3D 22 6E 6F 2D 63 61 63 68 65 22 3E | tent=no-cachegt
0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 55 | __ltMETA HTTP-EQU
49 56 3D 22 45 78 70 69 72 65 73 22 20 63 6F 6E | IV=Expires con
74 65 6E 74 3D 22 2D 31 22 3E 0D 0A 3C 4D 45 54 | tent=-1gt__ltMET
41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 52 65 | A HTTP-EQUIV=Re
66 72 65 73 68 22 20 63 6F 6E 74 65 6E 74 3D 22 | fresh content=
30 3B 20 75 72 6C 3D 2F 77 5F 77 45 78 30 30 30 | 0 url=w_wEx000
2E 61 70 77 22 3E 3C 2F 48 45 41 44 3E 0D 0A 3C | apwgtltHEADgt__lt
2F 48 45 41 44 3E 3C 2F 48 54 4D 4C 3E | HEADgtltHTMLgt
-------------------------------------------------------------------------------
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HTMLNOTAGS
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo a funccedilatildeo HtmlNoTags eacute utilizada para permitir a utilizaccedilatildeo de caracteres especiais no conteuacutedo de um input para um formulaacuterio Html Local cHtml =
Local cInput =
Conteudo do campo com tags HTML intepretaacuteveis
cInput =
Ao montar o Input aplicar a HtmlNoTags() ao conteudo do mesmo
cHtml +=
+HtmlNoTags(cIn
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
15
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos a funccedilatildeo RetSqlAce para montar uma query de busca por tiacutetulo de uma determinada informaccedilatildeo considerando todas as possibilidades de acentuaccedilatildeo independentemente de como o
banco foi alimentado eou a string de busca foi digitada
IMPORTANTE Na expressatildeo da Query o campo da tabela deve ser passado pela funccedilatildeo LOWER do BAnco pois a funccedilatildeo retsqlace monta a string para busca com letras minuacutesculas cFind = acentuaccedilatildeo
cQuery = SELECT FROM + RetSqlTab(ZZ1)
cQuery += WHERE LOWER(ZZ1_TITULO) LIKE +RetSqlAce(cFind)+
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VALTOSQL
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = + ValToSql(02)
cQuery += AND FA2_DTINC lt= + ValToSql(date())
O exemplo acima caso escrito de forma a realizar as conversotildees especiacuteficas para cada tipo de conteuacutedo seria o equivalemte ao coacutedigo abaixo
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = 02
cQuery += AND FA2_DTINC lt= + DTOS( date() )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VARINFO
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo eacute gerada uma string HTML com as informaccedilotildees do retorno da chamada de duas funccedilotildees baacutesicas da Linguagem Advpl User Function InfoTeste()
Local cHtml =
cHtml += VarInfo(lsquoDatersquodate())
cHtml += VarInfo(lsquoTimelsquotime())
Return cHtml
Deve ser gerado um echo no Console do Servidor parecido com este abaixo
Date -gt D ( 10) [08122003]
Time -gt C ( 8) [201748]
Infra-Estrutura APWEBEX - Exemplo das funccedilotildees de acentuaccedilatildeo ApWebEX
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo vemos a diferenccedila de comportamento entre as funccedilotildees baacutesicas da Linguagem Advpl Upper() e Lower() e a funccedilatildeo de Infra-estrutura Capital() em relaccedilatildeo agraves funccedilotildees da Infra-estrutura
APWEBEX UpperAce() LowerAce() e CApitalAce() quando utilizamos caracteres acentuados cRetorno =
cFrase = natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
cRetorno += Original + cFrase + CRLF
cRetorno += Upper() + upper(cFrase) + CRLF
cRetorno += Lower() + lower(cFrase) + CRLF
cRetorno += Capital() + capital(cFrase) + CRLF
cRetorno += UPPERACE() + UPPERACE(cFrase) + CRLF
cRetorno += LOWERACE() + LOWERACE(cFrase) + CRLF
cRetorno += CAPITALACE() + CAPITALACE(cFrase) + CRLF
Neste ponto a variaacutevel cRetorno deveraacute conter
Original natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
Upper() NatildeO Haacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSotildeES PARA O INEXPLICaacuteVEL
Lower() natildeo haacute explicaCcedilOtildees considerando excessotildees para o inexplicaacutevel
Capital() Natildeo Haacute ExplicaCcedilOtildees Considerando Excessotildees Para O Inexplicaacutevel
UPPERACE() NAtildeO HAacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSOtildeES PARA O INEXPLICAacuteVEL
LOWERACE() natildeo haacute explicaccedilotildees considerando excessotildees para o inexplicaacutevel
CAPITALACE() Natildeo Haacute Explicaccedilotildees Considerando Excessotildees Para O Inexplicaacutevel
Infra-Estrutura APWEBEX - Exemplos das funccedilotildees NTOC e CTON
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos as funccedilotildees cton e ntoc para realizar conversotildees de nuacutemeros em base decimal para outras bases numeacutericas e vice-versa
16
nNum1 = CTON(011010012) Converte binaacuterio para decimal
nNum2 = CTON(00DA25FE16) Converte Hexadecimal para decimal
nNum1++ Soma 1 ao numero em nNum1
nNum2++ Soma 1 ao numero em nNum2
cNum1 = NtoC(nNum128) Converte para binaacuterio novamente
cNum2 = NtoC(nNum2168) Converte para Hexa novamente
-------------------------------------------------------------------------
Ao final do programa cNum1 seraacute 01101010 e cNum2 seraacute 00DA25FF
-------------------------------------------------------------------------
APWEXADDERR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
APWEXADDERR ( [ cTitulo ] [ cInfo ] ) --gt T
Paracircmetros
Argumento Tipo Descriccedilatildeo
cTitulo Caracter cTitulo corresponde a um tiacutetulo identificador da informaccedilatildeo Deve ter no maacuteximo 20 caracteres Os caracteres acima da vigeacutesima posiccedilatildeo seratildeo
ignorados
cInfo Caracter cInfo corresponde agrave Informaccedilatildeo a ser acrescentada ao ERRORLOG em caso de erro
Retorno
Tipo Descriccedilatildeo
Loacutegico Esta funccedilatildeo sempre retorna T
Descriccedilatildeo
Atraveacutes da funccedilatildeo ApWExAddErr() podemos acrescentar uma string de informaccedilotildees adicionais em um buffer em memoacuteria descarregado na geraccedilatildeo do ERRORLOG no caso de uma ocorrecircncia de erro fatal na
working thread atual
Caso a funccedilatildeo seja chamada sem nenhum paracircmetro a uacuteltima ocorrecircncia acrescentada pela funccedilatildeo eacute eliminada da pilha interna de informaccedilotildees
ATENCcedilAtildeO Esta funccedilatildeo deve ser apenas utilizada em casos de necessidade de obtenccedilatildeo de informaccedilotildees especiacuteficas acerca de uma ocorrecircncia de erro natildeo reproduzida em ambiente de testes eou natildeo depuraacutevel pois
seu uso desnecessaacuterio prejudica a performance da aplicaccedilatildeo final
CAPITALACE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CAPITALACE ( lt cString gt ) --gt cStrCapital
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida
Retorno
Tipo Descriccedilatildeo
Caracter String resultante convertida para munuacutesculo com as primeiras letras das palavras significantes em maiuacutesculo
Descriccedilatildeo
Semelhante agrave funccedilatildeo de Infra-estrutura Capital() poreacutem converte tambeacutem caracteres acentuados
A funccedilatildeo CapitalAce() converte todos os caracteres de uma String para minuacutesculo e a primeira letra das palavras significantes para maiuacutesculo semelhante agrave funccedilatildeo Capital() poreacutem considera e converte tambeacutem
caracteres acentuados em OEM eou ANSI
CTON
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CTON ( lt cString gt lt nBase gt ) --gt nNumero
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave representaccedilatildeo de um nuacutemero em outra base numeacuterica compreendida entre 2 e 36
nBase Numeacuterico nBase corresponde agrave base numeacuterica utilizada pelo numero representado em cString
Retorno
Tipo Descriccedilatildeo
Numeacuterico Nuacutemero recebido como paracircmetro em notaccedilatildeo decimal ( Base 10 )
Descriccedilatildeo
Converte um nuacutemero representado em String de base 2 a 36 para um nuacutemero em base decimal (10)
Observaccedilatildeo Importante
Satildeo considerados caracteres vaacutelidos para compor um nuacutemero de base 36 os 10 algarismos numeacutericos de 0 a 9 e os 26 caracteres alfabeacuteticos maiuacutesculos compreendidos entre A e Z Quaisquer caractetes presentes na
String de paracircmetro fora desta faixa de dados eou fora da base ( por exemplo uma conversatildeo de string base 2 - binaacuterio - da string 01001020 ) retornaraacute -1 ( menos um )
ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
ESCAPE ( lt cString gt ) --gt cEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute uma sequecircncia de caracteres a ser processada
Retorno
Tipo Descriccedilatildeo
Caracter cEscaped corresponde agrave string original com os caracteres reservados utilizando a notaccedilatildeo HH
Descriccedilatildeo
A funccedilatildeo Escape() deve ser utilizada para realizar conversotildees de caracteres especiais e reservados quando da necessidade de passagem de paracircmetros via URL
A sintaxe de uma requisiccedilatildeo via URL para a passagem de paracircmetros eacute
(link)param=conteudoampparam2=conteudo2amp
Quando passamos paracircmetros via url devemos tomar o cuidado de natildeo utilizar caracteres reservados e especiais nos nomes e conteuacutedos de paracircmetros Para realizar estas conversotildees utilizamos a funccedilatildeo Escape()
17
EXECINPAGE
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXECINPAGE ( lt cAPHPage gt ) --gt cHTMLPage
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAPHPage Caracter Corresponde agraveo nome do APH que deve ser executado sem a extensatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cHtmlPage corresponde agrave string HTML gerada pela paacutegina APH AHU
Descriccedilatildeo
Atraveacutes da funccedilatildeo ExecInPage() executamos uma paacutegina APH passada como paracircmetro A funccedilatildeo deveraacute retornar a String HTML correspondente agrave paacutegina processada
Poreacutem a funccedilatildeo ExecInPage() realiza tratamentos adicionais padratildeo relacionaodo agraveo comportamento dos Projetos WEB referentes agrave customizaccedilotildees da segunte maneira
1 Primeiro eacute verificado se existe uma paacutegina AHU compilada com o nome cAPHPage Caso exista a mesma seraacute executada pela execinpage
2 Caso natildeo exista AHU com este nome eacute procurado pelo APH Caso o APH exista o mesmo seraacute executado pela ExecInPage
3 Caso natildeo existam no RPO atual o APH nem o AHU com o nome especificado no paracircmetro cAPHFile o processamento eacute abortado com a ocorrecircncia de erro [APWEXERR_0007] APH page
[ltcAPHPagegt] not found in RPO 4 Antes de executar o APH ou AHU identificado nos passos anteriores eacute verificado se existe um ponto de entrada ( User Function ) compilado com o mesmo nome do APH Caso exista o ponto de
entrada eacute executado Ele deveraacute retornar uma String HTML Se for retornada alguma string a funccedilatildeo retorna a tring retornada e natildeo processa o APH AHU Observaccedilatildeo A funccedilatildeo ExecInPage natildeo iraacute executar este
tratamento da User Function com o nome de cAPHPage caso a funccedilatildeo ExecInPage() esteja sendo executada atraveacutes de uma USER FUNCTION
Observaccedilatildeo Importante - Envio parcial de HTML agraveo Browser A funccedilatildeo ExecInpage() juntamente com o APH compilado ao serem processados iratildeo tentar enviar o conteuacutedo HTML para o Browser solicitante durante o processamento de modo que a funccedilatildeo normalmente iraacute
retornar uma String vazia
Caso seja necessaacuteria a execuccedilatildeo de uma paacutegina APH ou AHU e o natildeo-envio da mesma para o Browse por exemplo para a geraccedilatildeo de um coacutedigo HTML a ser enviado via e-mail revemos utilizar a funccedilatildeo
HttpSetPart() realizando uma chamada da mesma antes da ExecInPage() passando o paracircmetro F para desabilitar temporariamente o envio de HTML simultacircneo ao Browser e apoacutes a execuccedilatildeo da ExecInPage()
devemos re-habilitar o envio simultacircneo atraveacutes da chamada da funccedilatildeo HttpSetPart() com o paracircmetro T
EXISTPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTPAGE ( lt cAphFile gt ) --gt lFound
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAphFile Caracter Nome do arquivo APH sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Caracter Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistPage() para identificarmos no ambiente atual se um determinado arquivo APH encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistPage(teste)
conout(testeaph compilado neste RPO)
Else
conout(testeaph NAO compilado neste RPO)
Endif
EXISTUSRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTUSRPAGE ( lt cAhuFile gt ) --gt lExist
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAhuFile Caracter Nome do arquivo AHU sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Loacutegico Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistUSRPage() para identificarmos no ambiente atual se um determinado arquivo AHU encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistUSRPage(teste)
conout(testeahu compilado neste RPO)
Else
conout(testeahu NAO compilado neste RPO)
Endif
GETJOBPROFSTRING
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETJOBPROFSTRING ( lt cKey gt lt cDefault gt ) --gt cKeyValue
Paracircmetros
Argumento Tipo Descriccedilatildeo
cKey Caracter cKey corresponde agrave chave da seccedilatildeo de configuraccedilatildeo da Working Thread atual a ser retornada
cDefault Caracter Valor default (string) a ser retornado pela funccedilatildeo caso a chave especificada natildeo sehja encontrada no INI
Retorno
Tipo Descriccedilatildeo
Caracter Conteudo da Chave solicitada Caso a chave natildeo seja encontrada eacute retornado o conteudo de cDefault Caso esta funccedilatildeo natildeo seja executada a partir de uma Working Thread ela
18
retornaraacute uma string em branco ()
Descriccedilatildeo
Atraveacutes desta funccedilatildeo podemos recuperar as configuraccedilotildees do Job da Working Thread atual
GETWEXVERSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETWEXVERSION ( ) --gt cBuildId
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave String Identificadora da versatildeo no formato ltLIBgt VAAMMDDHHmm Vide Tabela A
Descriccedilatildeo
Esta funccedilatildeo natildeo requer argumentos e retorna o Identificador do build versatildeo de Release das funccedilotildees de Infra-Estrutura APWEBEX
Observaccedilatildeo A data informada pela versatildeo natildeo corresponde agrave ultima compilaccedilatildeo do RPO de um determinado Projeto WEB mas sim agrave data de release da LIB de Infra-Estrutura APWEBEX
Tabela A
Simbolo Descriccedilatildeo
AA Ano de geraccedilatildeo da Lib
MM Mecircs da geraccedilatildeo da Lib
DD Dia da geraccedilatildeo da Lib
HH Horaacuterio da geraccedilatildeo da Lib
mm Minutos do Horaacuterio de Geraccedilatildeo da Lib
(HTTP) Indica que a versatildeo foi compilada com a configuracatildeo de envio progressivo de HTML simultacircneo para o Browse Esta opccedilatildeo eacute imprescindiacutevel para projetos que se utilizam desta LIB
Por exemplo
APWEBEX Version 30312021900 (HTTP)
HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HEXSTRDUMP ( lt cString gt [ nStart ] [ nLength ] ) --gt cHExDump
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser lida para a geraccedilatildeo do Dump
nStart Numeacuterico Corresponde agrave posiccedilatildeo inicial de cString a ser considerada para a geraccedilatildeo do Dump a partir da posiccedilatildeo 1 Caso este paracircmetro natildeo seja informado o
Default eacute a posiccedilatildeo 1 da string
nLength Numeacuterico nLength corresponde agraveo tamanho a ser considerado para a geraccedilatildeo do DUMP a partir da posiccedilatildeo inicial recebida em nStart Caso este paracircmetro natildeo
seja informado eacute considerado o tamanho ateacute o final da String
Retorno
Tipo Descriccedilatildeo
Caracter O retorno da funccedilatildeo corresponde agrave uma string Advpl formatadas em 16 bytes em hexadecimal por linha mais o separador pipe (|) mais os 16 caracteres em Ansi Os caracteres de
controle ( codigo ascii menor que 32 ) satildeo convertidos para visualizaccedilatildeo para o caractere underline (_)
Descriccedilatildeo
Atraveacutes da funccedilatildeo HexStrDump() podemos gerar uma string em Advpl em formato de Dump Hexadecimal a partir da string informada como paracircmetro a partir de uma determinada posiccedilatildeo da string considerando um
nuacutemero de bytes informado
Caso os paracircmetros nPosIni e nTamString natildeo sejam informados o dump gerado corresponde a string recebida como paracircmetro em sua totalidade
Observaccedilatildeo
Natildeo devemos pasar para a funccedilatildeo HexStrDump uma string maior que 240 Kb pois a geraccedilatildeo da String de dump eacute realizada em memoacuteria sendo a string final gerada em meacutedia 42 vezes maior que a string passada
como paracircmetro Caso a string passada como paracircmetro seja maior que 240 Kb a execuccedilatildeo seraacute abortada com a ocorrecircncia de erro fatal string size overflow
HTMLNOTAGS
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HTMLNOTAGS ( lt cStrHtml gt ) --gt cStrNoTags
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrHtml Caracter cStrHtml corresponde a uma String que natildeo pode conter caracteres Html interpretaacuteveis
Retorno
Tipo Descriccedilatildeo
Caracter String original com os caracteres interpretaacuteveis Html lt gt amp convertidos para caracteres natildeo-interpretaacuteveis
Descriccedilatildeo
A Funccedilatildeo HTMLNOTAGS converte as Tags interpretaacuteveis de uma String HTML para TAGS natildeo interpretaacuteveis Este recurso eacute normalmente utilizado quando precisamos montar um input Html com um conteudo que
nao pode ser interpretado pelo browser como uma Tag Esta funccedilatildeo apenas converte os caracteres lt ( menor que ) gt ( maior que ) amp ( e comercial ) e ldquo ( aspas duplas )
Recomenda-se fortemente que na montagem do value de um input html o conteuacutedo do mesmo seja colocado entre aspas duplas pois caso o conteuacutedo do value inicial do campo contenha aspas simples (
natildeo convertidas pela funccedilatildeo HtmlNoTags) isto poderaacute ocasionar perda de dados e erro de sintaxe no formulaacuterio Html
HTTPISWEBEX
Revisatildeo 12122003
Sintaxe
HTTPISWEBEX ( ) --gt lIsApWEBEX
Retorno
Tipo Descriccedilatildeo
Loacutegico A funccedilatildeo retornaraacute T caso o ambiente de execuccedilatildeo atual seja uma Working Thread WEBEX inicializada pela funccedilatildeo de infra-estrutura STARTWEBEX
Descriccedilatildeo
Atraveacutes da funccedilatildeo HttpIsWebEx() eacute possiacutevel identificarmos se o programa atual estaacute sendo executado atraveacutes de uma Working Thread inicializada utilizando-se as funccedilotildees de Infra-Estrutura APWEBEX
ISEMAIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
19
Sintaxe
ISEMAIL ( lt cEMail gt ) --gt lEmailOk
Paracircmetros
Argumento Tipo Descriccedilatildeo
cEMail Caracter cEmail corresponde a string a ser analizada contendo um e apenas um endereccedilo de e-mail
Retorno
Tipo Descriccedilatildeo
Caracter Retorna T caso a sring recebida como paracircmetro atenda agraves definiccedilotildees de nomenclatura vaacutelidos para um endereccedilo de e-mail
Descriccedilatildeo
Utilizada para validar e-mails em Advpl a funccedilatildeo ISEMAIL recebe como paracircmetro uma string contendo um e-mail retornando T caso a string esteja em um formaacuteto vaacutelido respeitando a regra para nomenclatura de
endereccedilos de e-mail
Regra Um e-mail eacute considerado vaacutelido caso seja iniciado por um caracter apenas contenha caracteres asc de a a z e 0 a 9 e os caracteres (arroba) (ponto) - ( hiacutefen) ou _ (underline) e deve conter uma e
apenas uma arroba e no minimo um ponto apos a arroba intercalado por um caracter
LOWERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
LOWERACE ( lt cString gt ) --gt cStrLower
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a sequecircncia de caracteres a ser convertida para letras minuacutesculas
Retorno
Tipo Descriccedilatildeo
Caracter String original em letras minuacutesculas
Descriccedilatildeo
A Funccedilatildeo LOWERACE converte todos os caracteres de uma String para ldquominusculordquo semelhante agrave funccedilatildeo LOWER() poreacutem considera e converte tambeacutem caracteres acentuados em ANSI
NTOC
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
NTOC ( lt nNumero gt lt nBase gt lt nTamStr gt ) --gt cString
Paracircmetros
Argumento Tipo Descriccedilatildeo
nNumero Numeacuterico nNumero eacute o valor numeacuterico em base devimal a ser convertido
nBase Numeacuterico nBase corresponde agrave base binaacuteria a ser utilizada para converter nNumero
nTamStr Numeacuterico nTamStr corresponde ao tamanho da string representando o numero na base desejada
Retorno
Tipo Descriccedilatildeo
Caracter cString corresponde ao numero convertido para a base numeacuterica especificada como paracircmetro
Descriccedilatildeo
A Funccedilatildeo NTOC converte um nuacutemero em notaccedilatildeo decimal para um nuacutemero representado por String utilizando uma base numeacuterica entre 2 e 36 preenchendo-o com ldquo0rdquo (zeros) agrave esquerda do tamanho especificado
Observaccedilatildeo O Paracircmetro nBase deve ser especificado com um nuacutemero entre 2 e 36 Caso seja passado como paracircmetro um nuacutemero base fora desta faixa o processamento eacute abortado com a ocorrecircncia de erro
[APWEXERR_0022] INVALID NTOC BASE [X] onde ltXgt foi a base passada como argumento
REDIRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
REDIRPAGE ( lt cUrl gt [ cTarget ] [ nTime ] ) --gt cScript
Paracircmetros
Argumento Tipo Descriccedilatildeo
cUrl Caracter Link para onde o script deve apontar o redirecionamento
cTarget Caracter Destino do redirecionamento Caso natildeo especificado o default eacute _self
nTime Numeacuterico Tempo (em segundos) de delay antes do redirecionamento ser executado
Retorno
Tipo Descriccedilatildeo
Caracter Script Html JavaScript que ao ser executado no Browser (client) chama a paacuteginaobjeto chamado no Link
Descriccedilatildeo
A funccedilatildeo RedirPage eacute utilizada quando desejamos devolver ao Browser um script que ao ser executado redirecionaraacute o Browser agrave abertura de um link passado como paracircmetro
RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLACE ( lt cStrFind gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrFind Caracter cStrFind corresponde agrave sequecircncia de caracteres a ser procurada podendo conter caracteres maiuacutesculos e minuacutesculos com ou sem acentuaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cStrQuery corresponde agrave string de busca a ser utilizada na query utilizando caracteres em minuacutesculo
Descriccedilatildeo
A funccedilatildeo RetSqlAce eacute utilizada para auxiliar de montagem de querys de busca de caracteres acentuados em bases de dados A funccedilatildeo automaticamente trata a string original removendo os acentos convertendo todos
os caracteres para minuacutesculas e trocando todas as vogais e cedilhas da string original por uma sequecircncia de caracteres acentuados em munuacutescilas para busca posicional
20
RETSQLCOND
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLCOND ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlCond() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga e o Makira Hypersite utilizando aliases de 3
caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar a filial atual ( xFilial ) de acordo com o modo do arquivo ( X2_MODO ) e para sempre desconsiderar
registros deletados
Observaccedilotildees
Esta funccedilatildeo foi mantida apenas por compatibilidade pois a ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do
banco para efeitos de performance Para ganharmos performance nas Querys devemos ao inveacutes de utilizar a funccedilatildeo RetSqlCond() utilizar como primeira clauacutesula WHERE o retorno da funccedilatildeo RetSqlFil() (
comparaccedilatildeo dos campos _FILIAL os primeiros do(s) iacutendice(s) do ERP ) que retorna apenas as comparaccedilotildees de Filial e por uacuteltimo a funccedilatildeo RetSqlDel que retorna o script para verificaccedilatildeo dos campos deletados (
que eacute o uacuteltimo campo das chaves de iacutendice do ERP utilizando TopConnect )
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlCond() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de
modo que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute
retorna os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLDEL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLDEL ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlDel() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo D_E_L_E_T_ da(s) tabela(s) passada(s) como paracircmetro
Observaccedilotildees
A ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do banco para efeitos de performance Para ganharmos performance
nas Querys devemos utilizar a funccedilatildeo RetSqlDEl() na montagem das ultimas consistecircncias da claacuteusula WHERE de uma Query
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlDel() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo
que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna
os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLFIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLFIL ( lt cAliases gt [ cCompFil ] ) --gt cSQlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
cCompFil Caracter
Atraveacutes de cCompFil eacute possiacutevel especificar uma Filial FIXA a ser comparada com os campos FILIAL do(s) alias(es) passados no paracircmetro cAliases
Caso natildeo informado os campos _FILIAL da(s) tabela(s) passadas como paracircmetro em cAliases seratildeo comparados com o retorno da funccedilatildeo xFilial() de
cada alias respectivamente
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo filial atual ( xFilial ) de acordo com o modo de abertura do arquivo no ERP ( X2_MODO )
Observaccedilatildeo
Devemos atentar ao fato que a funccedilatildeo RetSqlFil() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo que estes
alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna os
nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLTAB
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLTAB ( lt cAliasList gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliasList Caracter String contendo um ou mais alias separados por virgula a terem seus nomes fiacutesicos determinados
Retorno
Tipo Descriccedilatildeo
Caracter String contendo nomes fisicos e alias identificadores dos aliases recebidos como paracircmetro
Descriccedilatildeo
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
2
Next i
gt
ltbodygt
lthtmlgt
Quando este arquivo for requisitado ao Protheus Server (atraveacutes de uma chamada em URL por exemplo) o coacutedigo entre os delimitadores seraacute executado poreacutem o script colocado ao redor do coacutedigo seraacute mantido
exatamente como se encontra Por exemplo
httplocalhostH_WEBDEMOAPL
A grande vantagem de se utilizar dos arquivos ADVPL ASP em relaccedilatildeo a criar funccedilotildees APL simples decorre do fato de que nas funccedilotildees APL simples o desenvolvedor deve se preocupar em retornar todo o HTML
necessaacuterio para a correta exibiccedilatildeo no Web Browser
E tambeacutem como o ADVPL ASP mistura o script HTML com o coacutedigo interpretaacutevel pode-se criar um arquivo APH utilizando o editor desejado (como o Microsoft FrontPage por exemplo) e inserir nele os coacutedigos
Advpl necessaacuterios entre as Tags Outro detalhe importante eacute que pode-se utilizar as estruturas de fluxo da linguagem ADVPL para repetir comandos do proacuteprio script HTML (por exemplo colocar um comando de
script HTML dentro de um comando While em ADVPL)
lt While EOF() gt
ltBgt Esta linha seraacute repetida no HTML ateacute ocorrer o fim de arquivo ltBgt
lt
dbSkip()
EndDo
gt
Note que tambeacutem pode existir diferentes blocos de coacutedigo interpretaacutevel separados pelos delimitadores dentro de um mesmo arquivo
Tatildeo importante quanto mesclar coacutedigo interpretaacutevel com script de formataccedilatildeo HTML eacute utilizar os comandos ADVPL para alterar o script de formataccedilatildeo Ou seja colocar o conteuacutedo de variaacuteveis campos etc
diretamente no HTML que seraacute enviado agrave aplicaccedilatildeo client (ao Browser por exemplo) Isso pode ser realizado atraveacutes dos delimitadores de avaliaccedilatildeo Os delimitadores de avaliaccedilatildeo satildeo lt= para abertura e gt para
encerramento Diferentemente dos delimitadores de coacutedigo interpretaacutevel estes devem sempre estar na mesma linha Com eles pode-se criar uma linha de script HTML cujo conteuacutedo conteacutem uma expressatildeo que seraacute
avaliada em tempo de execuccedilatildeo e seu resultado inserido como parte do Html retornado agraveo Browse
ltbgtEsta linha eacute HTML mas o horaacuterio exibido aqui lt= Time() gt foi obtido em tempo de execuccedilatildeo no Servidorltbgt
No exemplo acima a linha HTML seraacute retornada para o Browser com o resultado da funccedilatildeo time (ou seja a hora atual no servidor) inserido no texto
Utilizando todos esses conceitos pode-se criar toda uma aplicaccedilatildeo Web baseada no Protheus Ou seja o processamento e acesso aos dados fica por conta do Protheus Server e a interface fica por conta do Browser
(utilizando o HTML)
Importante
Ao codigicar um arquivo APH eou AHU devemos estar atentos agraves regras de utilizaccedilatildeo dos delimitadores de execuccedilatildeo e avaliaccedilatildeo Advpl
1 A Abertura e fechamendo dos delimitadores de execuccedilatildeo lt gt devem estar isoladas em suas respectivas linhas natildeo devendo ter qualquer conteudo adicional nem duas aberturas e fechamentos na mesma linha
Partindo dessa premissa veja abaixo alguns exemplos de como inserir o coacutedigo Advpl abaixo dentro de um APH
IF lOk
nErro++
Endif
CERTO
lt
IF lOk
nErro++
Endif
gt
CERTO lt IF lOk gt
lt nErro++ gt
lt Endif gt
CERTO lt IF lOk nErro++ Endif gt
ERRADO lt IF lOk gtlt nErro++ gt -- 2 aberturas e fechamentos na mesma linha
lt Endif gt
2 Quantograve agraveos delimitadores de avaliaccedilatildeo lt= gt podemos ter vaacuterias aberturas e fechamentos na mesma lionha poreacutem natildeo podemos ter uma abertura e seu respectivo fechamento em linhas diferentes
3 Uma linha qualquer em um arquivo APH nao deve conter mais do que 150 Caracteres pois o Parser insere caracteres de controle em cada linha do mesmo durante a preacute-compilaccedilatildeo e a linha final resultante natildeo
pode ultrapassar 254 caracteres pois neste caso isto impossibilita a compilaccedilatildeo do APH
02 Executando funccedilotildees Advpl via HTTP
Revisatildeo 28042004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
Princiacutepio de Funcionamento do HTTP
A utilizaccedilatildeo do protocolo HTTP natildeo envolve o uso de uma conexatildeo persistente entre o Web Browser e o Servidor HTTP Isto significa que ao ser solicitada uma paacutegina imagem ou ateacute o processamento de uma
funccedilatildeo o Web Browser abre uma conexatildeo com o Server HTTP realiza a solicitaccedilatildeo e fica com a conexatildeo aberta aguardando pelo retorno do Server Quando o server jaacute houver enviado os dados solicitados a conexatildeo
eacute fechada
Processamento de Funccedilotildees
Para o retorno de paacuteginas estaacuteticas imagens e demais arquivos via HTTP o servidor identifica o que estaacute sendo solicitado pelo Web Browser atraveacutes da extensatildeo do Link Por exemplo ao receber uma soilicitaccedilatildeo da
URL httposervidorhtmlsimagemgif o Server HTTP sabe que deve procurar um arquivo chamado imagemgif dentro da pasta htmls a partir da pasta local no servidor configurada para armazenar os arquivos para o
acesso HTTP
No servidor Protheus foram implementadas duas extensotildees de Link para permitir a execuccedilatildeo de funccedilotildees Advpl atraveacutes de uma requisiccedilatildeo HTTP A extensatildeo APL e a extrensatildeo APW Quando o servidor recebe uma
requisiccedilatildeo via HTTP por exemplo da url httposervidortimeapl e estaacute corretamente configurado para atender agrave esta requisiccedilatildeo o Protheus Server realiza o processamento e informa para o Web Browser solicitante
que a string que seraacute retornada deve ser interpretada pelo Web Browser como sendo um Script HTML
Caracteriacutesticas comuns do processamento de funccedilotildees Advpl via HTTP Independente da extensatildeo de link utilizada existem caracteriacutesticas e preacute-requisitos comuns ao funcionamento de ambas as requisiccedilotildees que seguem abaixo
A funccedilatildeo seja Advpl ou uma funccedilatildeo compilada no Repositoacuterio deve obrigatoriamente ter um retorno do tipo String pois o Web Browser solicitante seraacute informado pelo Server Protheus que a string
retornada deveraacute ser interpretada e mostrada pelo Browser como um HTML
Devido agrave origem da requisiccedilatildeo natildeo ter relaccedilatildeo alguma com a interface Remote do Protheus natildeo eacute possiacutevel utilizar determinadas funccedilotildees Advpl que foram escritas exclusivamente para esta interface
como por exemplo as funccedilotildees MsgStop Alert e demais funccedilotildees e objetos de Interface de Janelas
O que iraacute diferenciar uma funccedilatildeo executada via link apl e apw seraacute as etapas de execuccedilatildeo das mesmas Esta caracteriacutestica de funcionamento seraacute melhor esclarecida apoacutes a leitura dos toacutepicos sobre desenvolvimento de
funccedilotildees apl e desenvolvimento de funccedilotildees apw
03 Paacuteginas dinacircmicas - O Advpl ASP
Revisatildeo 26042004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
Uma paacutegina ASP (Active Server Pages) eacute uma paacutegina HTML contendo coacutedigo interpretaacutevel em uma linguagem compreensiacutevel ao servidor HTTP em uso Por exemplo o IIS da Microsoft utiliza o VBScript para criar
suas paacuteginas ASP do mesmo modo que o Protheus utiliza o ADVPL Uma paacutegina ASP eacute uma combinaccedilatildeo de script HTML e coacutedigo interpretaacutevel No ADVPL ASP esse coacutedigo eacute padratildeo xBase portanto a preocupaccedilatildeo
maior daqueles que jaacute conhecem e trabalham com o Protheus e desejam desenvolver paacuteginas ativas para aplicaccedilotildees Web utilizando essa facilidade eacute conhecer HTML
3
Caracteriacutesticas do ADVPL ASP - Arquivos APH Os arquivos ADVPL ASP tecircm a extensatildeo padratildeo APH Satildeo arquivos texto e devem ser adicionados a um projeto no Protheus IDE e compilados da mesma maneira que os programas tradicionais A diferenccedila eacute que o
Protheus Server identificaraacute que se trata de um ADVPL ASP e executaraacute uma espeacutecie de tradutor (parser) antes que a compilaccedilatildeo seja executada Este parser iraacute transformar todo o arquivo em uma funccedilatildeo uacutenica que
receberaacute os mesmos paracircmetros das funccedilotildees APL simples como explicado anteriormente no Item Desenvolvendo Funccedilotildees APL e retornaraacute uma string
O desenvolvedor natildeo precisa se preocupar em retornar HMTL algum pois o APH tambeacutem eacute um arquivo HTML A funccedilatildeo que foi gerada na compilaccedilatildeo iraacute se encarregar de retornar o HTML contigo no arquivo
depois que o coacutedigo foi processado Um Arquivo APH gera no repositoacuterio de Objetos do Protheus uma funccedilatildeo com o mesmo nome do arquivo poreacutem prefixada com H_ + nome_do_arquivo_aph
Por se tornar uma funccedilatildeo no momento da compilaccedilatildeo natildeo eacute possiacutevel utilizar a claacuteusula FUNCTION para criar outras funccedilotildees dentro de um arquivo APH Caso exista essa necessidade tais funccedilotildees devem ser criadas
em um arquivo PRW tradicional e chamadas de dentro do APH
A extensatildeo APH para o nome dos arquivos eacute obrigatoacuteria Qualquer outra extensatildeo usada no nome do arquivo natildeo seraacute reconhecida e o parser do IDE natildeo seraacute executado durante a compilaccedilatildeo Foi criada tambeacutem a
extensatildeo de arquivos AHU ( Aph de Usuaacuterio ) que possui o mesmo tratamento de Parser do aruqivo APH gerando uma funccedilatildeo prefixada com L_ A diferenccedila eacute que a funccedilatildeo gerada pelo AHU pode ser gerada sem a
necessiade de autorizaccedilatildeo de compilaccedilatildeo com permissatildeo para substituir fontes microsiga por tratar-se de um Aph de Usuaacuterio qeuivalente agrave uma User Function
Assim como outros ASPacutes a diferenciaccedilatildeo entre script HTML e coacutedigo eacute efetuada atraveacutes dos caracteres lt para indicaccedilatildeo de abertura de coacutedigo e gt para indicaccedilatildeo do encerramento de coacutedigo Por exemplo o
HTML abaixo conteacutem um pedaccedilo de coacutedigo ADVPL separado pelos delimitadores
lthtmlgtltheadgtlttitlegtADVPL ASP Demolttitlegtltheadgt
ltbodygt
ltpgtBem vindo ao mundo do ADVPL ASPltpgt
lt
Soma os 100 primeiros nuacutemeros
Local i nSoma = 0
For i = 1 To 100
NSoma += i
Next i
gt
ltbodygt
lthtmlgt
Quando este arquivo for requisitado ao Protheus Server (atraveacutes de uma chamada em URL por exemplo) o coacutedigo entre os delimitadores seraacute executado poreacutem o script colocado ao redor do coacutedigo seraacute mantido
exatamente como se encontra Por exemplo
httplocalhostH_WEBDEMOAPL
A grande vantagem de se utilizar dos arquivos ADVPL ASP em relaccedilatildeo a criar funccedilotildees APL simples decorre do fato de que nas funccedilotildees APL simples o desenvolvedor deve se preocupar em retornar todo o HTML
necessaacuterio para a correta exibiccedilatildeo no Web Browser
E tambeacutem como o ADVPL ASP mistura o script HTML com o coacutedigo interpretaacutevel pode-se criar um arquivo APH utilizando o editor desejado (como o Microsoft FrontPage por exemplo) e inserir nele os coacutedigos
Advpl necessaacuterios entre as Tags Outro detalhe importante eacute que pode-se utilizar as estruturas de fluxo da linguagem ADVPL para repetir comandos do proacuteprio script HTML (por exemplo colocar um comando de
script HTML dentro de um comando While em ADVPL)
lt While EOF() gt
ltBgt Esta linha seraacute repetida no HTML ateacute ocorrer o fim de arquivo ltBgt
lt
dbSkip()
EndDo
gt
Note que tambeacutem pode existir diferentes blocos de coacutedigo interpretaacutevel separados pelos delimitadores dentro de um mesmo arquivo
Tatildeo importante quanto mesclar coacutedigo interpretaacutevel com script de formataccedilatildeo HTML eacute utilizar os comandos ADVPL para alterar o script de formataccedilatildeo Ou seja colocar o conteuacutedo de variaacuteveis campos etc
diretamente no HTML que seraacute enviado agrave aplicaccedilatildeo client (ao Browser por exemplo) Isso pode ser realizado atraveacutes dos delimitadores de avaliaccedilatildeo Os delimitadores de avaliaccedilatildeo satildeo lt= para abertura e gt para
encerramento Diferentemente dos delimitadores de coacutedigo interpretaacutevel estes devem sempre estar na mesma linha Com eles pode-se criar uma linha de script HTML cujo conteuacutedo conteacutem uma expressatildeo que seraacute
avaliada em tempo de execuccedilatildeo e seu resultado inserido como parte do Html retornado agraveo Browse
ltbgtEsta linha eacute HTML mas o horaacuterio exibido aqui lt= Time() gt foi obtido em tempo de execuccedilatildeo no Servidorltbgt
No exemplo acima a linha HTML seraacute retornada para o Browser com o resultado da funccedilatildeo time (ou seja a hora atual no servidor) inserido no texto
Utilizando todos esses conceitos pode-se criar toda uma aplicaccedilatildeo Web baseada no Protheus Ou seja o processamento e acesso aos dados fica por conta do Protheus Server e a interface fica por conta do Browser
(utilizando o HTML)
Importante Ao codigicar um arquivo APH eou AHU devemos estar atentos agraves regras de utilizaccedilatildeo dos delimitadores de execuccedilatildeo e avaliaccedilatildeo Advpl
1 A Abertura e fechamendo dos delimitadores de execuccedilatildeo lt gt devem estar isoladas em suas respectivas linhas natildeo devendo ter qualquer conteudo adicional nem duas aberturas e fechamentos na mesma linha
Partindo dessa premissa veja abaixo alguns exemplos de como inserir o coacutedigo Advpl abaixo dentro de um APH
IF lOk
nErro++
Endif
CERTO
lt
IF lOk
nErro++
Endif
gt
CERTO
lt IF lOk gt
lt nErro++ gt
lt Endif gt
CERTO
lt IF lOk nErro++ Endif gt
ERRADO
lt IF lOk gtlt nErro++ gt -- 2 aberturas e fechamentos na mesma linha
lt Endif gt
2 Quantograve agraveos delimitadores de avaliaccedilatildeo lt= gt podemos ter vaacuterias aberturas e fechamentos na mesma lionha poreacutem natildeo podemos ter uma abertura e seu respectivo fechamento em linhas diferentes
3 Uma linha qualquer em um arquivo APH nao deve conter mais do que 150 Caracteres pois o Parser insere caracteres de controle em cada linha do mesmo durante a preacute-compilaccedilatildeo e a linha final resultante natildeo
pode ultrapassar 254 caracteres pois neste caso isto impossibilita a compilaccedilatildeo do APH
04 Desenvolvimento de Funccedilotildees APL
Revisatildeo 27042004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
A princiacutepio todas as funccedilotildees contidas no repositoacuterio podem ser executadas diretamente atraveacutes de uma requisiccedilatildeo HTTP via link com extensatildeo apl ao Protheus Server Poreacutem alguns detalhes devem ser
considerados
4
Uma funccedilatildeo executada no momento do recebimento de uma requisiccedilatildeo HTTP eacute executada como um JOB ou seja natildeo contem interface Por isso tais funccedilotildees natildeo podem conter comandos de interface
como criaccedilatildeo de janelas ou exibiccedilatildeo de helps e mensagens de alerta
A uacutenica interface possiacutevel eacute a utilizada no client HTTP Por isso tais funccedilotildees devem SEMPRE retornar uma string de caracteres Apoacutes o processamento da funccedilatildeo essa string de retorno seraacute enviada
diretamente ao client HTTP e este seraacute o responsaacutevel por sua interpretaccedilatildeo Por exemplo utilizando um Web Browser como client pode-se retornar a string de comandos HTML diretamente O HTML entatildeo seraacute
propriamente exibido no Web Browser
Qualquer retorno diferente de uma string de caracteres geraraacute um erro que seraacute enviado agrave aplicaccedilatildeo client HTTP (o erro gerado eacute ldquoInvalid Proc Returnrdquo)
O servidor Protheus passa alguns paracircmetros para as funccedilotildees chamadas Isso significa que ao criar funccedilotildees para serem utilizadas em resposta agraves requisiccedilotildees HTTP deve-se criar o cabeccedilalho da funccedilatildeo
com estes paracircmetros Natildeo eacute obrigatoacuterio utilizar os mesmos nomes de paracircmetros sugeridos abaixo quando criar diretamente estas funccedilotildees Poreacutem como satildeo esses os nomes utilizados no ADVPL ASP explicado mas a
frente eacute aconselhaacutevel utilizaacute-los por motivo de padronizaccedilatildeo
o __aCookies Este paracircmetro recebe um array bidimensional com os Cookies criados na aplicaccedilatildeo client HTTP (por exemplo no Internet Explorer 5) Pode-se utilizaacute-lo para checar
validaccedilotildees mantidas nas maacutequinas client por exemplo Para maiores detalhes consulte a documentaccedilatildeo do HTML ou do Web Browser utilizado
o __aPostParms Este paracircmetro recebe um array bidimensional com os campos contidos em um formulaacuterio HTML recebido atraveacutes de um comando POST Cada item deste array conteacutem
um array com o nome do campo e o valor informado Por exemplo para um formulaacuterio com dois campos para digitaccedilatildeo (um chamado nome e o outro chamado endereco) que enviam os dados para a funccedilatildeo
cadastroapl atraveacutes de um POST a funccedilatildeo receberaacute o array __aPostParms da seguinte forma
ldquonomerdquo ldquoNOME DIGITADO NA PAGINA HTMLrdquo
ldquoenderecordquo ldquoENDERECO DIGITADO NA PAGINA HTMLrdquo
A funccedilatildeo pode tratar os dados recebidos neste array para realizar um processamento especiacutefico com tais informaccedilotildees Para campos onde natildeo eacute possiacutevel a entrada de dados e sim a escolha de uma informaccedilatildeo preacute-
definida (como por exemplo um checkbox) o item somente existiraacute no array caso o campo tenha sido selecionado no formulaacuterio HTML (por exemplo se o checkbox for marcado)
o __nProcID Conteacutem o Handle da Thread de execuccedilatildeo daquela funccedilatildeo A utilizaccedilatildeo deste paracircmetro seraacute explicada juntamente com o toacutepico ADVPL ASP posteriormente
o __aProcParms Este paracircmetro recebe um array bidimensional com os paracircmetros enviados na linha de URL do Web Browser Por exemplo na execuccedilatildeo de uma funccedilatildeo via linha de URL
do Web Browser como
httpservidorvendeaplcod=000001ampnome=PRODUTO DE TESTEampquant=20
a funccedilatildeo chamada vende receberaacute o array __aProcParms da seguinte forma
ldquocodrdquo ldquo000001rdquo
ldquonomerdquo ldquoPRODUTO DE TESTErdquo
ldquoquantrdquo ldquo20rdquo
A funccedilatildeo pode tratar estes dados recebidos para realizar processamentos especiacuteficos Eacute muito uacutetil tambeacutem para criar links de execuccedilatildeo diretamente atraveacutes de um Web Browser
o __cHTTPPage Esse paracircmetro foi criado originbalmente para recebe o nome da paacutegina arquivo ou funccedilatildeo originalmente requisitada para o Protheus Server poreacutem natildeo foi utilizado e
permaneceu por compatibilidadeCaso consultado ele retorna uma string em branco
o __aHTTPHead Esse paracircmetro recebe um array com os Headers do cabeccedilalho da requisiccedilatildeo HTTP enviados pelo Web Browser
Exemplo de funccedilatildeo APL
A funccedilatildeo a seguir eacute um bom exemplo para ser executado atraveacutes de um Web Browser Ela retorna uma string contendo a paacutegina HTML onde estaacute escrita a mensagem ldquoHello Worldrdquo e a lista de paracircmetros passados na
linha de URL Para testaacute-la crie um arquivo novo no Protheus IDE cole o coacutedigo abaixo e salve o arquivo como WEBDEMOPRW Apoacutes compilar o programa basta chamar em um Web Browser uma URL como
httplocalhostu_webdemoaplcod=000001ampdesc=DESCRICAO DO PRODUTOampqtd=2
Coacutedigo da funccedilatildeo include rwmakech
User Function WebDemo(__aCookies__aPostParms__nProcID__aProcParms__cHTTPPage)
Local cHTML =
Local i
Coloca uma mensagem em HTML
cHTML += ltpgtlth1 align=centergtHello Worldlth1gtltpgt
Coloca um separador de linha em HTML
cHTML += lthrgt
If Len(__aProcParms) = 0
cHTML += ltpgtNenhum paracircmetro informado na linha de URL
Else
For i = 1 To Len(__aProcParms)
cHTML += ltpgtParacircmetro + __aProcParms[i1] + - Valor +
__aProcParms[i2] + ltpgt
Next i
Endif
Return(cHTML)
Importante
Para crias as funccedilotildees que seratildeo utilizadas em chamadas via um Web Browser ou seja em qualquer request HTTP deve-se seguir o procedimento normal de criaccedilatildeo de funccedilotildees no AP5 utilizando o AP5 IDE para a
ediccedilatildeo e para a compilaccedilatildeo
Note que no caso de funccedilotildees do usuaacuterio (User Function) o nome chamado na URL do Browser tambeacutem deveraacute conter o U_ no comeccedilo da funccedilatildeo por exemplo
httpservidoru_WebDemoapl
Configuraccedilatildeo Miacutenima Em toacutepico agrave parte eacute explicada toda a configuraccedilatildeo referente agrave seccedilatildeo http do Protheus Server A configuraccedilatildeo abaixo eacute a miacutenima necessaacuteria para executar o exemplo acima
[http]
Port=80
Path=(caminho absoluto de disco para arquivos publicados no servidor )
Environment=(nome do environment do Serber que seraacute utilizado para o processamento)
Para testar sua configuraccedilatildeo reinicie o server Protheus e chame via WebBrowser a url
httplocalhosttimeapl
Deveraacute ser mostrada no Browse o horaacuterio atual no formato hhmmss no Servidor pois este eacute o resultado da funccedilatildeo Advpl TIME()
O Protheus atendendo agrave requisiccedilotildees apl
Quando solicitado atraveacutes de um Web Browser um processamento de uma funccedilatildeo via link apl a funccedilatildeo solicitada deve ser responsaacutevel por abrir o ambiente necessaacuterio agraveo processamento conectar com o Banco de
Dados caso necessaacuterio realizar o processamento e retornar a String Html ao Web Browser
Este ambiente criado eacute fechado imediatamente apoacutes o teacutermino do processamento o que exige muito do Servidor da aplicaccedilatildeo em se tratando de uma aplicaccedilatildeo web com vaacuterios usuaacuterios efetuando acessos simultacircneos
Para atender com mais eficiecircncia agraves requisiccedilotildees de processamento de um projeto web foi implementada no Protheus a tecnologia de Working Threads explicada em mais detalhes no toacutepico Desenvolvimento de
Funccedilotildees apw
05 Desenvolvimento de Funccedilotildees APW
Revisatildeo 26042004
Abrangecircncia
Versatildeo 609 Versatildeo 710 Versatildeo 811
Diferenccedila de Funcionamento entre links APL e APW
Como visto em toacutepicos anteriores ao desenvolver uma funccedilatildeo para ser executada via link apl a funccedilatildeo deve ser responsaacutevel pela abertura do ambiente e inicializaccedilotildees necessaacuterias para um processamento qualquer e
apoacutes ser finalizado este processamento o ambiente montado e utilizado eacute fechado automaticamente de modo que cada requisiccedilatildeo de processamento de usuaacuterio atraveacutes de link apl iraacute iniciar uma nova Thread onde o
ambiente deveraacute ser preparado novamente A programaccedilatildeo neste tipo de ambiente exige muito do servidor Protheus
Visando dar perfornance agraves aplicaccedilotildees WEB desenvolvidas utilizando-se o Protheus foi criado link APW que utiliza um recurso do servidor Protheus conhecido como working threads Uma wortking thread eacute uma
configuraccedilatildeo especial de job que permite configurar umacutenuacutemero preacute-definido de Threads no Servidor as quais teratildeo o ambiente de execuccedilatildeo preparado e inicializado atraveacutes de uma funccedilatildeo Advpl onde cada working
5
thread eacute deixada na memoacuteria do servidor em modo de espera (stand-by) de modo que um usuaacuterio ao acessar um link apw o servidor Protheus iraacute direcionar a requisiccedilatildeo de processamento agrave uma working thread que
estiver em stand-by e apoacutes o processamento ser efetuado e o HTML ser retornado ao Browser a working thread retorna novamente ao estado de stand-by voltando a estar disponiacutevel para atender agrave uma nova
requisiccedilatildeo do mesmo ou de outro usuaacuterio navegando no site aplicaccedilatildeo Web
A utilizaccedilatildeo de Working Threads exige a definiccedilatildeo miacutenima de duas funccedilotildees Advpl que seratildeo executadas em dois momentos distintos A primeira funccedilatildeo eacute responsaacutevel pela inicializaccedilatildeo do ambiente comum de
execuccedilatildeo de requisiccedilotildees devendo estabelecer conexatildeo com a Base de Dados utilizada abrir as tabelas utilizadas no Site e preparar as variaacuteveis comuns de utilizaccedilatildeo da aplicaccedilatildeo A segunda funccedilatildeo seraacute responsaacutevel
por encapsular a requisiccedilatildeo do usuaacuterio realizada a partir do Web Browse Ela receberaacute como paracircmetro o nome do link digitado e macro-executar a funccedilatildeo correspondente realizando o tratamento de erro e retorno
Deste modo um ambiente uma vez inicializado natildeo eacute fechado e pode ser utilizado por vaacuterios usuaacuterios que estatildeo navegando no Site o que viabiliza um grande ganho em perfoemance e carga do Servidor
Tipos de Working Threads
Existem dois tipos de Working Threads configuraacuteveis no Protheus a Working Thread WEB e a Working Thread WEBEX ( abreviaccedilatildeo de WEB EXtended ) Ambas possuem basicamente o mesmo princiacutepio de
funcionamento poreacutem o que muda entre ambas eacute a recepccedilatildeo de paracircmetros e a utilizaccedilatildeo de Sessions nativas do Server Protheus Para visualizarmos melhor estas diferenccedilas vejamos com um detalhe um pouco maior
os modelos de funccedilatildeo de inicializaccedilatildeo de ambiente e conexatildeo para ambas as configuraccedilotildees de Working Threads WEB e WEBEX
Working Threads WEB
Para nos utilizarmos das Working Threasd WEB devemos criar as funccedilotildees responsaacuteveis pela inicializaccedilatildeo de ambiente e a funccedilatildeo de conexatildeo
A funccedilatildeo de inicializaccedilatildeo de ambiente natildeo recebe paracircmetro algum realizar a preparaccedilatildeo do ambiente comum de execuccedilatildeo de requisiccedilotildees e deve retornar um valor booleano (T) verdadeiro caso o ambiente tenha sido
inicializado com sucesso ou (F) falso no caso de alguma condiccedilatildeo ou erro que torne o ambiente montado por esta thread natildeo operacional caso este em que a Thread eacute removida da memoacuteria apoacutes a inicializaccedilatildeo
A funccedilatildeo de conexatildeo recebe os mesmos seis paracircmetros de uma funccedilatildeo chamada via link apl e um seacutetimo parametro String que conteacutem apenas o nome da funccedilatildeo chamada no link Por exemplo a chamada de um
link httplocalhostu_testeapw no seacutetimo paracircmetro da funccedilatildeo de conexatildeo a string u_teste A funccedilatildeo de conexatildeo deve ter tratamento de erro proacuteprio e diferenciado e sempre deveraacute retornar um conteuacutedo do tipo
String
Working Threads WEBEX Para nos utilizarmos das Working Threasd WEBEX devemos tambeacutem criar as funccedilotildees responsaacuteveis pela inicializaccedilatildeo de ambiente e a funccedilatildeo de conexatildeo
A funccedilatildeo de inicializaccedilatildeo comporta-se de maneira idecircntica a de inicializaccedilatildeo WEB natildeo recebendo paracircmetro algum e devendo retornar um valor booleano (T) verdadeiro caso o ambiente tenha sido inicializado com
sucesso ou (F) falso no caso de alguma condiccedilatildeo ou erro que torne o ambiente montado por esta thread natildeo operacional caso este em que a Thread eacute removida da memoacuteria apoacutes a inicializaccedilatildeo
A funccedilatildeo de conexatildeo natildeo recebe diretamente paracircmetro algum Isso mesmo Todos os paracircmetros recebidos em versotildees anteriores atraveacutes de Arrays satildeo recebidos agora por Alias Virtuais de alta velocidade
HttpGet
HttpPost
HttpCookies
HttpHeadIn
Cada um destes alias virtuais eacute responsaacutevel respectivamente pela recepccedilatildeo de paracircmetros via GET POST COOKIES e Header HTTP da requisiccedilatildeo
Tambeacutem foram implementados os Alias virtuais HttpHeadOut e HttpSession para respecrivamente permitir alterar ou adicionar informaccedilotildees do Header HTTP de retorno de processamento de uma requisiccedilatildeo e
utilizaccedilatildeo de variaacuteveis tipo SESSION por usuaacuterio Web Estes recursos satildeo detalhados nos toacutepicos WEBEX - Detalhamento de Operaccedilatildeo e posteriores
O Futuro das aplicaccedilotildees WEB no Protheus
Apoacutes o desenvolvimento de aplicaccedilotildees em ambiente WEBEX e dados os oacutetimos resultados obtidos recomenda-se fortemente que as aplicaccedilotildees web desenvolvidas utilizando-se o Protheus Server sejam escritas em
conformidade para a utilizaccedilatildeo dos recursos WEBEX
Para facilitar tal desenvolvimento em paralelo agrave tecnologia disponibilizada na aplicaccedilatildeo jaacute estaacute integrada com a Infra-Estrutura disponiacutevel no repositoacuterio padratildeo do Microsiga Protheus 8 as funccedilotildees da Infra-Estrutura
ApWebEx escritas e publicadas para melhor atender agraves necessidades comuns verificadas no decorrer do desenvolvimento de uma aplicaccedilatildeo Web
Os recursos disponiacuteveis nesta lib estatildeo documentados nos toacutepicos Infra-Estrutura APWEBEX e posteriores englobando comandos funccedilotildees exemplos e dicas de utilizaccedilatildeo destes recursos
6
06 Configurando o Server Protheus para HTTP
Revisatildeo 28042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
As configuraccedilotildees de http do Server Protheus permitem a configuraccedilatildeo de sites estaacuteticos e dinacircmicos com a criaccedilatildeo de um ou mais hosts de acesso criaccedilatildeo de pastas virtuais e dites dinacircmicos com resposta para links
apl e apw simultaneamente Neste documento abrangeremos um resumo exemplificado das configuraccedilotildees HTTP do Server Protheus As seccedilotildees abaixo devem ser inseridas no arquivo de configuraccedilotildees do servidor
Protheus ( mp8srvini )
Configuraccedilatildeo Miacutenima [http]
Enable=1
Path=cAp_Datahttp
Observaccedilatildeo Vale lembrar que apoacutes ter inserido a configuraccedilatildeo do [http] no INI do Protheus eacute importante baixar o Server e subir novamente
Com esta configuraccedilatildeo habilitamos o Server Protheus como um servidor de arquivos e paacuteginas estaacuteticas com o HTTP na porta padratildeo (80) e utilizando o diretorio em cAp_dataHttp como diretoacuterio raiz de
publicaccedilotildees WEB Como natildeo haacute configuraccedilatildeo de host especiacutefica um arquivo nesta pasta poseraacute ser acessado atraveacutes dos hosts httplocalhost ( desde que o browse seja aberto na estaccedilatildeo servidora )
httpnnnnnnnnnnnn ( IP da estaccedilatildeo servidora ) ou httpxxxxxxxxxx ( nome da estaccedilatildeo servidora ) Por exemplo Dentro da pasta configurada na chave PATH do HTTP crie um arquivo chamado defaulthtm
com o seguinte conteuacutedo ( pode ser criado inclusove com o notepad )
lthrgt
Ola Mundo HTTP
lthrgt
Agora abra um Web Browser no mesmo equipamento e digite na url httplocalhost Ao acessar esta url deveraacute ser mostrado na tela do Browse huas barras horizontais e o texto Ola Mundo HTTP entre elas
Atendendo agrave requisiccedilotildees apl
Agora vamos habilitar este host para atender agrave requisiccedilotildees de funccedilotildees atraveacutes de link apl Para tal precisamos apenas do nome de um Environment (ambiente) configurado no INI Podemos usar o proacuteprio ambinete
do ERP Basta acrescentarmos na seccedilatildeo http a chave Environment=ltnome_do_ambientegt para que este ambiente passe a atender agraveo processamento de funccedilotildees Advpl atraveacutes de links apl Por exemlo caso o
ambiente configurado para o ERP chame-se EnvADS710 basta acrescentar na seccedilatildeo http a chave Environment=EnvADS710 O INI ficaria conforme abaixo
[http]
Enable=1
Path=cAp_Datahttp
Environment=EnvADS710
Para testar a execuccedilatildeo de funccedilotildees abra um Web Browse na estaccedilatildeo servidora e acesse o link httplocalhosttimeapl IStoacuteiraacute executar a funccedilatildeo Advpl TIME() que retornaraacute ao Browse uma string contendo o
horaacuterio atual no servidor no formato HHMMSS
Atendendo agrave requisiccedilotildees apw
A configuraccedilatildeo para atendimento de requisiccedilotildees de processamento http atraveacutes de links apw envolve a criaccedilatildeo de uma nova seccedilatildeo no INI com um nome natildeo-especiacutefico para configurar o tipo de job que iraacute executar o
processamento ( WEB ou WEBEX ) juntamente com as funccedilotildees responsaacuteveis pela inicializaccedilatildeo e conexatildeo das Threads Advpl e na seccedilatildeo http configuramos uma chave chamada ResponseJob apontando para a seccedilatildeo
de configuraccedilatildeo do JOB
Por exemplo para configurarmos o atendimento de requisiccedilotildees apw em um ambiente ERP utilizando a infra-estrutura APWEBEX vamos criar uma seccedilatildeo chamada ERP_APWEBEX apontando para as funccedilotildees da
Infra-Estrutura APWEBEX correspondentes
[ERP_APWEBEX]
type=WEBEX
onstart=STARTWEBEX
onconnect=CONNECTWEBEX
Environment=EnvADS710
Instances=13
SigaWeb=MAK
Atraveacutes desta configuraccedilatildeo especificamos um Job do tipo WEBEX onde a funccedilatildeo de inicializaccedilatildeo utilizada seraacute a STARTWEBEX a funccedilatildeo de conexatildeo seraacute a CONNECTWEBEX ( ambas da Infra-estrutura
APWEBEX ) que utilizaratildeo o ambiente AnvADS710 para processamento e seratildeo colocadas no ar apenas uma Working Thread para atendimento de processamento ateacute o maacuteximo de 3 Threads As threads colocadas
no ar acima do nuacutemero miacutenimo ( no exemplo apenas 1 ) satildeo colocadas on-demand caso sejam realizadas requisiccedilotildees apw ao Servidor e natildeo hajam Working Threads dispoviacuteveis no momento e o nuacutemero de Working
Threads no ar ainda natildeo tenha atingido o maacuteximo definido Atraveacutes da configuraccedilatildeo SigaWeb=MAK informamos ao sistema que a mesma estaacute sendo utilizada para o desenvolvimento de um moacutedulo especiacutefico e natildeo
estamos utilizando um moacutedulo Web da ferramenta Protheus 8 Caso a configuraccedilatildeo SigaWeb natildeo seja informada o valor MAK eacute assumido como default
Agora para que esta seccedilatildeo de Jobs seja utilizada para o atendimento efetivo de requisiccedilotildees apw devemos estecificaacute-la na seccedilatildeo http atraveacutes da chave REsponseJob No caso inserimos a chave
ResponseJob=ERP_APWEBEX fincando a seccedilatildeo HTTP conforme abaixo
[http]
Enable=1
Path=cAp_Datahttp
Environment=EnvADS710
ResponseJob=ERP_APWEBEX
Como as requisiccedilotildees via apl e via apw satildeo independentes eacute possiacutevel configurar a seccedilatildeo http para que Environments diferentes respondam agrave requisiccedilotildees apl e apw ou que natildeo sejam atendidas requisiccedilotildees apl
apenas apw
Configurando a seccedilatildeo http para multi-host Todas as configuraccedilotildees acima vistas pertencem agrave seccedilatildeo default do HTTP De modo que tanto faz acessarmos o servidor pelo nome como pelo IP que o resultado serraacute o mesmo Poreacutem para a utilizaccedilatildeo de demais
recursos como diretoacuterios virtuais e mais de um site no mesmo servidor precisamos configurar um host de acesso
Por exemplo vamos criar uma configuraccedilatildeo de HOST para que o servidor caso seja acessado pelo NOME da maquia via HTTP seja visualizado um outro site e apenas sejam atendidos agrave links apl Para isso
devemos criar uma nova seccedilatildeo no INI cujo nome deve ser exatamente o host que seraacute acessado ( como o exemplo vamos supor que o servidor de testes chama-se srvteste ) logo devemos criar uma seccedilatildeo com este
nome
Nesta seccedilatildeo do INI devemos no miacutenimo especificar um Path de acesso agraveos arquivos e as demais configuraccedilotildees vistas ateacute agora da seccedilatildeo http satildeo opcionais A configuraccedilatildeo PORT do HTTP em um host natildeo eacute
suportada Natildeo eacute possiacutevel subir um server protheus em mais de uma porta HTTP
[srvteste]
Path=cAp_DataTestes
Environment=EnvTOP710
Deste modo caso o servidor seja acessado via http atraveacutes de LOCALHOST ou do IP do Server seraacute permitido o acesso agraves funcionalidades configuradas na seccedilatildeo HTTP Caso seja acessado via nome do servidor (
httpsrvteste ) seratildeo acessados os arquivos de outra pasta e as requisiccedilotildees apl seratildeo atendidas pelo Ambiente EnvTOP710
Utilizando este tipo de configuraccedilatildeo podemos subir vaacuterios sites diferentes na mesma aplicaccedilatildeo servidor Protheus cada qual com o seu diretoacuterio raiz de publicaccedilotildees seus ambientes independentes atendendo ou nacirco agrave
requisiccedilotildees apl eou apw
Configurando diretoacuterios virtuais
Ao configurar um host especiacutefico podemos acrescentar ao mesmo uma barra seguido de um nome para acesso agrave um diretoacuterio virtual criando desse modo um endereccedilo de acesso composto por um host e um
diretoacuterio que pode se comportar como um outro site com os arquivos publicados em um path especiacutefico que poderaacute atender requisiccedilotildees de links apl eou apw sob um outro ambiente e configuraccedilatildeo distinta
Utilizando diretoacuterios virtuais eacute possiacutevel dentro do mesmo host instalar vaacuterias aplicaccedilotildees web independentes todas acessiacuteveis sob o mesmo endereccedilotilde base alterando apenas o diretoacuterio de acesso Por exemplo
utilizando como host principal o nome do equipamento servertst podemos instalar o moacutedulo Web Portal Protheus sob o host servertstportal o moacutedulo TCF sob o host servertstrhonline e no host servertst
podemos configurar um site estaacutetico em Html com uma apresentaccedilatildeo institucional e links para os demais moacutedulos
Observaccedilotildees Importantes
Ao configurarmos um Host ele herda as configuraccedilotildees de atendimento de requisiccedilotildees apl e apw especificados na seccedilatildeo HTTP De modo que o host do exemplo continuaraacute a atender requisiccedilotildees apw poreacutem no
ambiente EnvADS710
Visto desta forma recomendamos fortemente que a seccedilatildeo [http] possua apenas especificado um Path em disco que esteja vazio e seja criada uma ou mais configuraccedilotildees de host com as suas devidas propriedades
especificas
Todas as demais chaves relacionadas agrave configuraccedilatildeo HTTP e aos Jobs WEB e WEBEX satildeo opcionais para atender agrave necessiades especiacuteficas Estas chaves estatildeo explicadas em maiores detalhes no DEM na seccedilatildeo
XXX
Configurando diretoacuterios virtuais Da mesma forma que a criaccedilatildeo de hosts podemos criar um novo host utilizando a barra de divisatildeo para especiicar uma pasta virtual quue permite a flexibilidade de termos uma pasta dentro de um mesmo host que
se comporte como um outro host Ainda baseando-se no INI montado nestes exemplos para o servidor de testes vamos supor que exista uma pasta no disco ( por exemplo cAp_dataDocs ) que contenha arquivos
HTML de uma documentaccedilatildeo que deve estar disponccedilivel na web utilizando tambeacutem o host httpsrvteste Poreacutem o host srvteste jaacute aponta para o diretoacuterio cAp_dataTestes
Com o recurso de criaccedilatildeo de diretorio virtual no HTTP criamos apenas uma nova entrada do mesmo host colocando no nome do mesmo uma barra de divisatildeo seguido do nome de uma pasta a ser acessada via
HTTP ( que natildeo precisa necessariamente existir no disco) e dentro desta seccedilatildeo acrescentar a chave path apontando para o diretoacuterio desejado da mesma maneira utilizada para configurar um host
No exemplo abaixo criamos a pasta virtual info dentro do host srvteste apontando para o path do disco cAp_DataDocs De modo que ao ser acessado via url o endereccedilo httpsrvtesteinfo a partir dele seratildeo
acessados os arquivos da pasta cAp_DataDocs
[srvtesteinfo]
Path=cAp_DataDocs
Vejamos agora como ficou o nosso arquivo INI com todas as configuraccedilotildees acima exemplificadas
Configuiracao de Working Threads usando a infra-estrutura APWEBEX
[ERP_APWEBEX]
type=WEBEX
onstart=STARTWEBEX
onconnect=CONNECTWEBEX
Environment=EnvADS710
Instances=13
Configuraccedilatildeo da seccedilatildeo httpo default para atender agrave requisiccedilotildees de apl e apw
[http]
7
Enable=1
Path=cAp_Datahttp
Environment=EnvADS710
ResponseJob=ERP_APWEBEX
SigaWeb=MAK
Configuraccedilatildeo do host srvteste para atender requisiccedilotildees via apl atraveacutes do environment EnvTOP710
[srvteste]
Path=cAp_DataTestes
Environment=EnvTOP710
Configuraccedilatildeo da pasta virtual info no host srvteste para apontar para um path no disco com documentos
[srvtesteinfo]
Path=cAp_DataDocs
Infra-Estrutura APWEBEX
Revisatildeo 27042004
Abrangecircncia
Versatildeo 811
A Infra-Estrutura APWEBEX Visando o melhor aproveitamento da tecnologia de working threads implementada no servidor Protheus para o processamento de requisiccedilotildees de uma aplicaccedilatildeo web foram desenvolvidas funccedilotildees de apoio miscelacircnea
e infra-estrutura compiladas no repositoacuterio padratildeo de Infra-Estrutura do ERP Microsiga visando simplificar e auxiliar o desenvolvimento de uma soluccedilatildeo web A este conjunto de funccedilotildees demos o nome de Lib de
Infra-Estrutura APWEBEX que engloba atualmente os tratamentos comuns agraves funccedilotildees de inicializaccedilatildeo de ambiente e conexatildeo ( atendimento de requisiccedilotildees http via link apw ) com seus respectivos pontos de
entrada comandos e funccedilotildees de miscelacircnea comuns agraveos projetos de soluccedilotildees web integradas com o ERP
Como utilizar este recurso no desenvolvimento de soluccedilotildees
As funccedilotildees pertinentes agrave Infra-Estrutura APWEBEX jaacute estatildeo implementadas no repositoacuterio padratildeo da ferramenta Protheus 8 e os comandos especiacuteficos que envolvem este recurso encontram-se no arquivo header
apwebexch disponibilizado tambeacutem jonto com a ferramenta Protheus 8
A utilizaccedilatildeo destes recursos para integraccedilatildeo de aplicaccedilotildees envolve a leitura desta documentaccedilatildeo onde seraacute visto com maiores detalhes as possibilidades de uso da ferramenta como a integraccedilatildeo de uma aplicaccedilatildeo Web
com um ambiente e funcionalidades do ERP Microsiga
Como usufruir desta documentaccedilatildeo Todos os toacutepicos pertencentes agrave este grupo satildeo direcionados agraveo desenvolvimento de soluccedilotildees web utilizando as funccedilotildees de Infra-Estrutura APWEBEX aleacutem de ser explicado com detalhes o funcionamento da
tecnologia WEBEX do Protheus e dos recursos nativos da ferramenta englobando os comandos e funccedilotildees publicados exemplos de coacutedigos Advpl utilizando estes recursos configuraccedilatildeo da ferramenta e mensagens de
ocorrecircncias de erro das funccedilotildees e comandos com possiacuteveis causas e soluccedilotildees
Eacute fortemente recomendado que os documentos constantes neste grupo fossem apreciados antes de aprofundar-se nas informaccedilotildees dos proacuteximos toacutepicos
01 Recepccedilatildeo de paracircmetros por Alias Virtuais
Revisatildeo 30042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
A recepccedilatildeo de paracircmetros vindos do Web Browser quando utilizamos Working Threads do tipo WEBEX atraveacutes de links apw eacute realizada atraveacutes de Alias Virtuais especiacuteficos ao inveacutes de receber as informaccedilotildees
GET POST e HEADER em array quando executamos a chamada atraveacutes de link apl A nomenclatura de Alias Virtual foi adotada pois a sintaxe do coacutedigo-fonte eacute exatamente a mesma utilizada quando desejamos
acessar um campo de uma tabela aberta atraveacutes de um alias
Em um ambiente montado para atender agrave requisiccedilotildees via link apw utilizando Working Threads WEBEX podemos nos utilizar dos seguintes alias virtuais
HttpCookies
HttpGet
HttpPost
HttpHeadIn
HttpHeadOut
HttpSession
HttpCookies Atraveacutes do alias virtual HttpCookies eacute possiacutevel consultar os Cookies do Header Http enviados pelo Browser e criar ou alterar o conteuacutedo de um cookie a ser devolvido agraveo Browser Um cookie visto de forma geral eacute
um paracircmetro ao qual atribuiacutemos um nome que uma vez devolvido agraveo Browse solicitante eacute re-enviado ao Protheus a partir da proacutexima requisiccedilatildeo realizada pelo Browser
HttpGet
Para receber os paracircmetros enviados atraveacutes da URL (meacutetodo GET do HTTP) jaacute devidamente convertidos e tratados utilizamos o alias virtual HttpGet onde acessamos pelo nome a propriedade desejada e caso a
mesma tenha sido enviada pelo Browser a mesma eacute retornada como uma String
HttpPost Para receber os paracircmetros submetidos (enviados) pelo Browser atraveacutes do meacutetodo POST jaacute devidamente convertidos e tratados utilizamos o alias virtual HttpPost onde acessamos pelo nome a propriedade desejada
e caso a mesma tenha sido enviada pelo Browser a mesma eacute retornada como uma String
HttpHeadIn
Para a recepccedilatildeo e tratamento das informaccedilotildees recebidas atraveacutes do Header do pacote HTTP foi criado o alias virtual HttpHeadIn que aleacutem de consultar as informaccedilotildees constantes no Header HTTP proveinente da
requisiccedilatildeo do usuaacuterio permite tambeacutem acesso agrave propriedades da conexatildeo atual do usuaacuterio como o IP do usuaacuterio solicitante por exemplo
HttpHeadOut Atraveacutes deste alias virtual de retorno podemos alterar ou criar um paracircmetro no Header de retorno HTTP do Protheus a ser devolvido agraveo Browser solicitante de uma requisiccedilatildeo de processamento
HttpSession O alias virtual HttpSession foi criado para possibilitar a criaccedilatildeo de variaacuteveis session por usuaacuterio do site com controle de identificaccedilatildeo nativa da ferramenta atraveacutes de um cookie de identificaccedilatildeo chamado
SESSIONID No toacutepico Alias Virtual HttpSession eacute explicado em detalhes o funcionamento deste mecanismo
Este recurso nos permite criar atricuir conteuacutedo e consultar conteuacutedo de uma variaacutevel relacionada agraveo usuaacuterio que estaacute realizando uma requisiccedilatildeo http Podemos armazenar em uma variaacutevel de Session os seguintes
tipos de variaacuteveis A (array) C (character) D (data) L (loacutegica) e N (numeacuterica) Natildeo satildeo suportados O (Objetos) eou B (Code Blocks)
Limitaccedilotildees de uso dos alias virtuais para recebimento de paratildemetros
Dadas as caracteriacutesticas operacionais e de acesso agraveos alias virtuais devemos estar atentos agrave nomenclatura de campos de um formulaacuterio HTML para serem recuperados com sucesso pelos alias virtuais correspondentes
A nomenclatura de campos do formulaacuterio deve obedecer agrave regra de criaccedilatildeo de variaacuteveis em Advpl O campo do formulaacuterio deve sempre ser iniciado com um caracter alfabeacutetico pode conter letras ou algarismos no
nome e o caracter _ ( underline ) Natildeo satildeo permititos espaccedilotildes hiacutefen ou caracteres acentuados como nome de um campo Caso utilizado um nome de campo fora do padratildeo suportado o conteuacutedo do mesmo natildeo seraacute
recuperaacutevel em Advpl
8
02 Alias virtual HttpCookies
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpCookies eacute possiacutevel consultar os Cookies do Header Http enviados pelo Browser e criar ou alterar o conteuacutedo de um cookie a ser devolvido agraveo Browser Uma variaacutevel de Cookie retorna um
tipo Advpl String e apenas aceita uma atruibuiccedilatildeo de String Vale lembrar tambeacutem que um cookie eacute um recurso do Browser que estaacute realizando a requisiccedilatildeo e existe um limite de tamanho para o total de Cookies
utilizados Este limite costuma ser proacuteximo a 1024 Bytes
Trata-se portanto de uma propriedade de leitura e gravaccedilatildeo dispniacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Utilizaccedilatildeo de Cookies
A utilizaccedilatildeo de Cookies tecircm objetivo praacutetico restrito agrave aplicaccedilotildees onde haja a necessidade impliacutecita de termos uma informaccedilatildeo relacionada agraveo browser utilizado pelo usuaacuterio atual que devam ser interpretadas
independente do usuaacuterio estar logado ou natildeo ( isto eacute independam diretamente de sessions )
Um exemplo praacutetico disto eacute o desenvolvimento de um site onde o conteuacutedo dinacircmico eacute retornado ao usuaacuterio em mais de um idioma Na entrada do site apresentamos um formulaacuterio ao usuaacuterio onde o mesmo iraacute
escolher o idioma de sua preferecircncia Mesmo que a session de login deste usuaacuterio expire no servidor o cookie com o idioma selecionado ainda estaacute no Browser de modo que a proacutexima requisiccedilatildeo do usuaacuterio pode ser
codificada para direcionaacute-lo para a paacutegina de login do site com as mensagens no idioma que o mesmo jaacute estava navegando
Lendo o valor de um Cookie
Atraveacutes dos exemplos abaixo lemos o valor do Cookie de identificaccedilatildeo do uacutesuaacuterio e um cookie de usuaacuterio criado para identificar no Browse qual eacute o idioma utilizado pelo usuaacuterio atual
cUserId = HttpCookies-gtUSERID Retorna o Cookie identificador do usuaacuterio do Protheus
cIdioma = HttpCookies-gtSiteLang Retorna o conteuacutedo do cookie SiteLang criado
Lendo todos os Cookies recebidos
O alias virtual HttpCookie possui uma propriedade chamada aCookies criada apenas para consulta (read-only) que retorna um Array Advpl de Strings contendo os nomes dos Cookies enviados pelo Browser agraveo
Protheus Por exemplo
aInfo = HttpCookies-gtaCookies
For nI = 1 to len(aInfo)
Mostra no console do Server todos os cookies recebidos
conout(Cookie +str(nI3)+ = + aInfo[nI])
Next
Criando um Cookie
A criaccedilatildeo de um Cookie eacute realizada atraveacutes da atrubuiccedilatildeo de um valor diretamente agraveo cookie desejado Por exemplo
HttpCookies-gtMeuCookie = TESTE
A criaccedilatildeo de um Cookie merece uma atenccedilatildeo especial pois um Cookie eacute retornado agraveo browser atraveacutes do Header de Retorno HTTP De modo que para que a criaccedilatildeo de um cookie seja realizada com sucesso o
mesmo deve ser criado antes de haver qualquer processamento de APH AHU caso este que natildeo seria mais possiacutevel a criaccedilatildeo do Cookie pois o Header de Retorno HTTP jaacute teria sido enviado agraveo browser solicitante
03 Alias virtual HttpGet
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpGet podemos consultar se uma determinada propriedade nos foi enviada atraveacutes da URL ( meacutetodo GET )
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos realizar uma requisiccedilatildeo a um link apw
passando pela URL o paracircmetro IMAGEM com o conteacuteuacutedo TESTE
httplocalhostu_TesteGetapwimagem=testeampcor=azul
Para recuperarmos em Advpl o conteuacutedo dos paracircmetros imagem e cor utilizamos
cImagem = HttpGet-gtimagem
cCor = HttpGet-gtcor
Podemos inserir tambeacutem um tratamento default Caso algum paracircmetro natildeo seja enviado ( resulte NIL ) assumimos um valor para o mesmo
DEFAULT cImagem = LogoAp8
DEFAULT cCor = amarelo
Existe tambeacutem uma propriedade do alias virtual HttpGet chamada aGets onde podemos recuperar um array de strings contendo a lista com os nomes dos paracircmetros enviados pelo browser solicitante Por exemplo
aInfo = HttpGet-gtaGets
For nI = 1 to len(aInfo)
conout(GET +str(nI3)+ = +aInfo[nI])
Next
04 Alias virtual HttpPost
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpPost podemos consultar os campos submetidos agraveo servidor atraveacutes do meacutetodo POST
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro
O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos realizar uma requisiccedilatildeo a um link apw
atraveacutes de um formulaacuterio html com meacutetodo POST partindo do Html abaixo
lthtmlgtltbodygt
ltform method=POST action=httplocalhostu_TstPostapwgt
Teste ltinput type=text name=CODIGO size=10gt
lthrgt
ltinput type=submitgt
ltformgt
ltbodygtlthtmlgt
Para recuperarmos em Advpl o conteuacutedo do campo CODIGO utilizamos
cCodigo = HttpPOST-gtCodigo
Existe tambeacutem uma propriedade do alias virtual chamada aPost onde podemos recuperar um array de strings contendo a lista com os nomes dos paracircmetros enviados pelo browser solicitante Por exemplo
aInfo = HttpPost-gtaPost
For nI = 1 to len(aInfo)
conout(POST +str(nI3)+ = +aInfo[nI])
Next
05 Alias virtual HttpHeadIn
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpHeadIn podemos consultar os paracircmetros enviados pelo Browser solicitante enviados atraveacutes do Header HTTP ao realizar uma requisiccedilatildeo ao Protheus Server
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos consultar o header http User-Agent
enviado pelo Browser solicitante contendo uma String identiificando o modelo de Browser utilizado
cUserAgent = Httpheadin-gtUser_Agent
Devemos obter como retorno uma string parecida com a mostra abaixo
Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)
Observaccedilatildeo Importante Qualquer paracircmetro no Header HTTP que contenha um ou mais caracteres invaacutelidos para a nomenclatura de variaacuteveis Advpl ( como por exemplo o User-Agent que conteacutem um hiacutefen ) satildeo trocados pelo caractere _
underline para ser possiacutevel a leitura da propriedade
Propriedades especiais
HttpHeadIn-gtaHeaders
Retorna um Array de Strings contendo todas as linhas do Header HTTP da requisiccedilatildeo
HttpHeadIn-gtmain
Retorna o nome da funccedilatildeo chamda atraveacutes da URL sem a extensatildeo e sem o host Por exemplo ao chamar o link httplocalhostu_tstHEaderapw o conteuacutedo de HttpHeadin-gtmain seraacute u_tstHEader
9
HttpHeadIn-gtREMOTE_ADDR
Retorna uma string no formato nnnnnnnnnnnn o IP da estaccedilatildeo que realizou a requisiccedilatildeo
httpHeadIn-gtREMOTE_PORT
Retorna um valor Advpl numeacuterico informando a porta utilizada para realizar a requisiccedilatildeo
06 Alias virtual HttpHeadOut
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 LIB WEBEX
Atraveacutes deste alias virtual de retorno podemos alterar ou criar um paracircmetro no Header de retorno HTTP do Protheus a ser devolvido agraveo Browser solicitante de uma requisiccedilatildeo de processamento
Trata-se portanto de uma propriedade de retorno disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
A criaccedilatildeo de uma linha no Header HTTP merece uma atenccedilatildeo especial pois para que a operaccedilatildeo realizada com sucesso o header deve ser criado antes de haver qualquer processamento de APH AHU pois neste caso
o Header de Retorno HTTP jaacute teria sido enviado agraveo browser solicitante
07 Alias virtual HttpSession
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual httpSession podemos criar e consultar variaacuteveis do tipo session relacionadas agraveo usuaacuterio que realizou a requisiccedilatildeo atraveacutes do Browser
Para diferenciar os usuaacuterios que estatildeo navegando num site o Protheus busca por um cookie identificador de usuaacuterio retornado para o browser a cada requisiccedilatildeo de link APW chamado SESSIONID Caso o Protheus
receba este cookie ele identifica quais sessions pertencem a este usuaacuterio
Quando um usuaacuterio realiza a primeira requisiccedilatildeo http ao Protheus o Protheus natildeo recebe o cookie identificador e automaticamente inicializa um identificador de sessions para o mesmo retornando o identificador ao
Browser via Header HTTP Este identificador pode ser recuperado em uma funccedilatildeo advpl atraveacutes de httpSession-gtSESSIONID
Quando criamos uma variaacutevel de session ela pode ser acessada nas proacuteximas requisiccedilotildees provenientes deste mesmo usuaacuterio Caso uma variaacutevel de session consultada natildeo exista ela retorna o valor NIL (nulo)
Vejamos os exemplos abaixo
Criando variaacuteveis Session HttpSession-gtUserId = 123
HttpSession-gtUserName = U_GetUserName()
Nas linhas acima criamos uma session para o usuaacuterio atual chamada UserId com o conteuacutedo do tipo String e criamos outra session chamada UserName com o retorno da funccedilatildeo U_GetUserName()
Consultando variaacuteveis Session Ao consultar uma variaacutevel session sempre devemos prever que a mesma natildeo pode ter sido criada de modo que a consulta pode retornar NIL ou caso a session jaacute exista retornaraacute o valor do tipo que foi atribuiacutedo `a
mesma
If HttpSession-gtUserId = NIL
Session ainda natildeo foi criada Usuaacuterio natildeo estaacute logado
conout(Usuario natildeo estaacute logado)
Else
Session jaacute criada o usuaacuterio estaacute logado
conout(Usuario estaacute logado ID = + HttpSession-gtUserId )
Endif
Exemplo de Funcionamento de Session No exemplo abaixo criamos uma session para identificar quantas vezes o usuaacuterio chamou esta funccedilatildeo especiacutefica Damos o nome da session de MyCounter que iraacute conter um nuacutemero No primeiro acesso do usuaacuterio a
session natildeo existe ( = NIL ) e eacute criada com o valor numeacuterico 1 (um) A partir das proacuteximas requisiccedilotildees realizadas ao Protheus atraveacutes desta paacutegina ( atraveacutes do botatildeo Refresh do Browser por exemplo ) a session jaacute
existe sendo somado o valor 1 agraveo conteuacutedo jaacute existente e devolvido agraveo browser solicitante um Html informando quantas chamadas jaacute foram realizadas por este usuaacuterio
include rwmakech
include apwebexch
User Function TstSession()
Local cHtml = cEcho =
WEB EXTENDED INIT cHtml
If httpSession-gtmycounter = NIL
cEcho = Inicializando contador
Conout(cEcho)
cHtml += cEcho
httpSession-gtmycounter = 1
Else
httpSession-gtmycounter++
cEcho = contador em +str(httpSession-gtmycounter3)
conout(cEcho)
Endif
cHtml += cEcho + lthrgt
WEB EXTENDED END
Return cHtml
Apoacutes compilado o fonte acima e o Server Protheus configurado e iniciado com HTTP habilitado e as working Threads configuradas abra um Web Browser e solicite a url httplocalhostu_tstsessionapw Seraacute
mostrado no Browse a mensagem Inicializando Contador Agora peccedila um Refresh desta tela ao Browser Seraacute devolvida a mensagem Contador em 2 e a cada refresh deste Browser o contador seraacute
incrementado
Uso de Sessions e Paralelismo - Comportamento do Protheus Server
O Protheus Server trata agraves requisiccedilotildees simultacircneas de links APW em paralelo desde que estejam disponiacuteveis o numero de Working Threads necessaacuterio para tal Por exemplo em uma estrutura de Frames onde cada
um deles aponta o SRC (source) para um link apw o Browser envia as trecircs requisiccedilotildees de apw para o Protheus Server e caso extistam 3 working threads disponiacuteveis naquele momento as trecircs requisiccedilotildees satildeo
atendidas em paralelo
Por outro lado se em duas destas trecircs requisiccedilotildees faz-se necessaacuteria a atualizaccedilatildeo eou consulta a uma variaacutevel de Session ( httpsession ) este processamento em paralelo caso natildeo fosse tratado poderia gerar perdas
no conteuacutedo da session caso a mesma session fosse atualizada simultaneamente
Para resolver esta questatildeo de maneira a natildeo sobrecarregar o Servidor com solicitaccedilotildees de Processamento Sequencial ( Critical Sessions ) foi montado um esquema de Lock de Session de Usuaacuterio automaacutetico com
liberaccedilatildeo automaacutetica apoacutes o processamento do APW ou liberaccedilatildeo manual atraveacutes da chamada da funccedilatildeo HttpLeaveSession() antes do processamento ser terminado
Exemplificando a aplicaccedilatildeo praacutetica e funcionamento deste conceito partimos de um ambiente hipoteacutetico utilizando 3 frames onde um usuaacuterio realiza uma requisiccedilatildeo agrave funccedilatildeo que retornaraacute o source HTML da paacutegina
de frames e a mesma ao chegar no Browser faz o mesmo realizar as trecircs requisiccedilotildees simultaneamente todas elas referentes ao mesmo usuaacuterio Poreacutem o primeiro e o segundo frames realizam uma operaccedilatildeo qualquer
com uma ou mais variaacuteveis da Session do usuaacuterio e o terceiro frame realiza um outro processamento que natildeo depende da consulta de nenhuma variaacutevel da Session As trecircs requisiccedilotildees referente a este usuario seratildeo
processadas simultaneamente por working Threads diferentes ( vamos supor que naquele momento haviam trecircs Working Threads disponiacuteveis) poreacutem quando uma das duas working Threads que tentarem acesso agrave uma
variaacutevel de Session daquele usuaacuterio o Servidor verifica se alguma outra Thread estaacute com o flag de acesso agraves sessions deste usuario Se nenhuma outra thread em uso por este usuaacuterio estaacute com a bandeira entatildeo a
thread atual pega a bandeira para ela senatildeo o processamento da Thread eacute congelado no aguardo da liberaccedilatildeo da bandeira
A liberaccedilatildeo da bandeira ocorre automaticamente no retorno da Working Thread para o Browser antes da chamada do ponto de entrada para Reset do Ambiente atraveacutes da chamada na KlibEx da funccedilatildeo
HttpLeaveSession() Caso seja viaacutevel para o usuaacuterio liberar as sessions antes do retorno da funccedilatildeo ele pode utilizar-se da funccedilatildeo httpLeaveSession() no seu fonte sem necessariamente aguardar pelo encerramento
efetivo e reset de ambiente da Working Thread
Logo retornando ao exemplo acima os Frames 1 e 2 iratildeo concorrer pela banceira de atualizaccedilatildeo de conteuacutedo de sessions onde o primeiro frame que a ser executado pegaraacute a bandeira para ele e atualizaraacute a session e
o segundo frame iraacute esperar o primeiro liberar a bandeira para continuar a ser processado e o terceiro frame como natildeo utiliza nenhuma variaacutevel da session seraacute processado sem depender de nenhum dos outros dois
frames anteriores
Quando utilizamos ASP ( Microsoft Active Server Pages ) o mesmo realiza uma serializaccedilatildeo de requisiccedilotildees de paacuteginas ASP por usuaacuterio de modo que caso o mesmo usuaacuterio solicite trecircs frames asp as requisiccedilotildees
de processamento chegaratildeo ao Servidor ASP simultaneamente mas a bandeira de processamento eacute unica por paacutegina asp sendo liberada apenas apos o teacutermino do processamento da paacutegina de modo que mesmo que
nenhuma das paacuteginas faccedila uso de sessions todas as paacuteginas deste usuaacuterio seratildeo processadas em sequecircncia
08 Envio simultacircneo de HTML ao Browser
Revisatildeo 30042004
Abrangecircncia
10
Versatildeo 710 Versatildeo 811 LIB WEBEX
As aplicaccedilotildees web desenhadas para utilizar a Infra-Estrutura APWEBEX contam com o recurso de Envio simultacircneo de Html ao Browser durante o processamento de uma paacutegina Advpl-ASP ( APH eou AHU )
Este recurso eacute habilitado atraveacutes do Protheus IDE nas opccedilotildees de configuraccedilatildeo de compilaccedilatildeo do ambiente em questatildeo mais especificamente habilitado atraveacutes do CheckBox [ ] Exibir conteuacutedo do Advpl ASP
progressivamente no Browser
Ao habilitamos esta configuraccedilatildeo todos os arquivos APH e AHU satildeo parseados fazendo internamente o uso da funccedilatildeo HttpSend() de modo que mesmo antes do processamento estar concluiacutedo o Html gerado jaacute estaacute
sendo enviado agraveo Browser qoe o solicitou
A utilizaccedilatildeo deste recurso provecirc um ganho de performance subtancial na aplicaccedilatildeo final Todos os projetos desenvolvidos com esta tecnologia ( Infra-Estrutura APWEBEX ) devem ter esta configuraccedilatildeo de compilaccedilatildeo
habilitada no IDE Vale lembrar que caso este recurso natildeo esteja habilitado ao habilitaacute-lo os arquivos aph e ahu do projeto necessitam ser recompilados para que esta configuraccedilatildeo tenha o efeito desejado
Pode existir a necessidade de um processamento de um APH ou AHU natildeo enviar o script Html gerado diretamente ao Browser Para tal situaccedilatildeo podemos desabilitar temporariamente este recurso de envio de html
progressivo em tempo de execuccedilatildeo permitindo assim por exemplo uma funccedilatildeo chamar em sequecircncia dois arquivos APH um para gerar um conteuacutedo Html a ser enviado via e-mail armazenado em uma variaacutevel
Advpl e outro APH para a montagem de uma tela de status que seraacute enviada agraveo Browser solicitante
Para habilitar eou desabilitar o envio simultacircneo do Script HTML agraveo browser em tempo de execuccedilatildeo utilize a funccedilatildeo HttpSetPart()
09 Configuraccedilotildees especiacuteficas APWEBEX
Revisatildeo 26042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Ao utilizarmos as funccedilotildees de Infra-estrutura APWEBEX existem recursos da lib que exigem uma configuraccedilatildeo adicional para serem utilizados
Envio de e-mail automaacutetico atraveacutes da Rotina de Tratamento de Erro do Site
Em caso de erro fatal na aplicaccedilatildeo Web a proacutepria rotina de tratamento de erro pode ser configurada para enviar um e-mail agraveo Administrador do sistema Para tal eacute necessaacuterio inserir as chaves abaixo na seccedilatildeo
do ambiente em uso para o site
ErrorSMTP= (endereccedilo do servidor SMTP a ser usado para o envio do e-mail )
ErrorMail= ( um ou mais endereccedilos de e-mail a receber op e-mail de erro separados por virgula )
ErrorFrom= ( um e apenas um endereccedilo de e-mail a ser usado como remetente do aviso de erro )
ErrorLogin = ( nome de usuario de login no servidor de SMTP caso necessaacuterio )
ErrorPassword= ( senha do usuario de login no servidor de SMTP caso necessaacuterio )
WebAdmin - Login alternativo
A infra-estrutura APWEBEX exige um usuaacuterio e senha para entrar no moacutedulo de administraccedilatildeo WebAdmin Para validar o login eacute utilizado o arquivo de senhas do ERP O usuaacuterio deve ser o Administrador ou
pertencer ao grupo de administradores para ter acesso agraveo WebAdmin Caso natildeo seja viaacutevel usar este arquivo de senhas para validar o login podemos inserir uma chave adicional ( AdmLogin ) no Environment em uso
pela aplicaccedilatildeo Web e configurar nela a senha do usuaacuterio Administrador para login no WebAdmin Caso esta chave seja configurada o arquivo de senhas do ERP natildeo seraacute utilizado para validar o login no WebAdmin
AdmLogin= ( senha do Administrador para logar no WebAdmin )
Pasta alternativa para upload de Rpo via WebAdmin No WebAdmin eacute possiacutevel utilizar uma configuraccedilatildeo especiacutefica para a troca do repositoacuterio de objetos em uso no site sem que seja necessaacuterio parar o servidor para isso Por default a pasta de upload chama-se
SwapRPO e deve existir na estrutura de diretoacuterio do ambiente utilizado a partir do diretoacuterio raiz do ambiente ( RootPath )
RpoUpload= ( pasta de upload alternativa a partir do RootPath do ambiente )
10 Recomendaccedilotildees finais
Revisatildeo 17122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Para todo o desenvolvimento de soluccedilotildees temos em matildeos uma diversidade de recursos desenhados para melhor atender agraves necessidades e adequar-se agraves caracteristicas da aplicaccedilatildeo Dada a flexibilidade dos recursos
recomenda-se aos desenvolvedores adotarem um padratildeo de desenvolvimento e ter em foco a eficiecircncia da aplicaccedilatildeo final tanto no aspecto funcional como na codificaccedilatildeo
Lanccedilando matildeo da experiecircncia em desenvolvimento de aplicaccedilotildees web adquiridas nos uacuteltimos anos nos toacutepicos abaixo estatildeo relacionadas algumas medidas tomadas no desenvolvimento de aplicaccedilotildees que nos satildeo muito
uacuteteis no decorrer de um projeto
Nomenclatura de Funccedilotildees
Para o desenvolvimento de aplicaccedilotildees web foi criado o Statement WEB FUNCTION para a declaraccedilatildeo de funccedilotildees referentes agrave projetos web Este comando na praacutetica apenas prefixa a declaraccedilatildeo da funccedilatildeo com
W_ poreacutem a sua utilizaccedilatildeo identifica que a funccedilatildeo em questatildeo foi construiacuteda uacutenica e exclusivamente para ser chamada a partir de uma requisiccedilatildeo HTTP Em adendo agrave este devemos utilizar os comandos WEB
EXTENDED INIT END disponivels no Include apwebexch para proteger a funccedilatildeo de ser chamada em um ambiente que natildeo o APWEBEX
Separando a Interface do Processamento
Ao desenvolver utilizando Advpl ASP paacuteginas APH AHU recomenda-se separar o processamento da Interface do seguinte modo Criar uma Web Function para a chamdada de umna paacutegina com conteuacutedo
dinacircmico via link apw e um arquivo APH ou AHU de mesmo nome que seraacute chamado internamente de modo que o coacutedigo-fonte escrito na Web Function seja responsaacutevel para gerar as informaccedilotildees a serem
disponibilizadas para o usuaacuterio e o APH contenha apenas a maacutescara destas informaccedilotildees e o miacutenimo de instruccedilotildees Advpl possiacutevel para a montagem da paacutegina Este processo facilita a manutenccedilatildeo de amobos
os coacutedigos pois o Web Designer que iraacute realizar um ajuste no APH natildeo teraacute que desviar do fonte Advpl inserido na paacutegina e o Analista Programador que faraacute a manutenccedilatildeo no coacutedigo Advpl preocupar-se-aacute apenas
com o coacutedigo responsaacutevel para a geraccedilatildeo dos dados que seratildeo mascarados
Utilizaccedilatildeo das Funccedilotildees de Infra-Estrutura
Atraveacutes dos comandos e funccedilotildees disponibilizadas na Infra-Estrutura APWEBEX natildeo tecircmos a necessidade de recriar partes comuns de coacutedigo para todos os projetos que se utilizem desta tecnologia aleacutem de permitir
atraveacutes de pontos de entrada estrategicamente colocados na ferramenta um niacutevel altiacutessimo de customizaccedilatildeo para os projetos desenvolvidos com esta tecnologia de maneira praacutetica e objetiva
11 Monitoramento de Sites em WEBEX
Revisatildeo 17122003
Abrangecircncia
LIB WEBEX
O Objetivo de uma funccedilatildeo de Monitoramento de Sites eacute testar as funcionalidades baacutesicas de um site retornando uma mensagem HTML preacute-definida indicando que estaacute tudo certo e em caso de erro uma
mensagem que procure identificar o que estaacute de errado
Para sites desenvolvidos em Protheus utilizando a tecnologia WEBEX devemos criar uma funccedilatildeo especiacutefica para o site que iraacute determinar se o mesmo estaacute operacional Esta funccedilatildeo seraacute chamada atraveacutes de link
apw
Vejamos o exemplo abaixo escrito para um site cujas bases de dados estatildeo num SQL acessadas via TopConnect Neste exemplo a funccedilatildeo chamada seraacute httpservidorU_SiteMonitorapw e caso esteja tudo certo
ela retornaraacute a string (SITE OK) seguido da data e horaacuterio da execuccedilatildeo da rotina Qualquer retorno diferente disto poderaacute indicar uma anomalia no funcionamento do site
Quando hospedado um site utilizando esta tecnologia no DataCenter da Makira esta informaccedilatildeo gerada pela rotina deve ser passada agraveo depto de infra-estrutura que configuraraacute um software Monitor de Sites que iraacute
realizar a cada um minuto uma requisiccedilatildeo agrave url especificada e iraacute emitir um alerta ao Departamento para que seja verificado o site caso haja alguma falha na resposta include protheusch
include apwebexch
User Function SiteMonitor()
Local cQuery nQtdRec
Verifica se a working Thread estaacute conectada com o TOP
If TCIsConnected()
Return Working Thread perdeu a conexatildeo com o TOP
Endif
Verifica se as tabelas principais estatildeo abertas
If select(SA1)=0
Return Tabela SA1 natildeo estaacute aberta
Endif
If select(SC5)=0
Return Tabela SC5 natildeo estaacute aberta
Endif
Executa uma query de contagem de registros de uma tabela do sistema
cQuery = SELECT count() as QTDREC from SA1010
OPEN QUERY cQuery ALIAS TMPCOUNT
nQtdRec = TMPCOUNT-gtQTDREC
CLOSE QUERY TMPCOUNT
If nQtdRec=0
11
Return Falha na Contagem de registros Query SA1
Endif
Se estaacute tudo certo retorna um HTML informando que estaacute tudo OK
Return (SITE OK) +dtos(date())+ +time()
Comandos - CLOSE QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CLOSE QUERY cAlias
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAlias Caracter Alias sob o qual o cursor da Query foi aberto Caso o alias passado como paracircmetro natildeo se encontre aberto a funccedilatildeo natildeo gera nenhuma ocorrecircncia de
erro
Descriccedilatildeo
Atraveacutes do comando Close Query realizamos o fechamento de uma query aberta atraveacutes do comando OPEN QUERY
ATENCcedilAtildeO Uma query aberta pelo comando OPEN QUERY deve ser fechada pelo comando CLOSE QUERY Poderiacuteamos fechar o alias aberto atraveacutes de uma Query simplesmente com a funccedilatildeo
DbCloseArea() poreacutem isto deixaria em aberto elementos internos de controle criados pelo comando OPEN QUERY
Comandos - OPEN QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
OPEN QUERY ltcQuerygt ALIAS ltcAliasgt [ [NOCHANGE] ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcQuerygt Caracter cQuery corresponde agrave String contendo a Query a ser executada no banco de dados
ALIAS ltcAliasgt Caracter cAlias corresponde ao nome do alias sob o qual o cursor de retorno dos dados pesquisados seraacute aberto no ambiente Advpl Natildeo pode ser especificado
um nome de alias jaacute em uso senatildeo a aplicaccedilatildeo seraacute finalizada com a ocorrecircncia de erro Alias already in Use
[NOCHANGE] Caracter Caso especificada a claacuteusola NOCHANGE na abertura da query a string em cQuery natildeo seraacute submetida agrave funccedilatildeo ChangeQuery()
Descriccedilatildeo
Atraveacutes do comando OPEN QUERY realizamos a abertura de uma Query de busca no Banco de Dados atraveacutes do RDD TOPCONN retornando os dados consultados atraveacutes de um ALIAS Advpl
Caso a Query nao possa ser aberta por erro de sintaxe devido agrave thread atual natildeo estar conectada com o TopConnect ou outro erro seraacute gerado um log de erro informando o Alias o Stack ( Pilha de Chamadas ) de
execucatildeo e o conteuacutedo da Query para Debug
OBSERVACcedilOtildeES IMPORTANTES
Na montagem da string da Query devemos especificar os comandos SQL alias e nomes de campos em letras maiuacutesculas
Quando utilizamos o comando OPEN QUERY natildeo precisamos passar a expressatildeo da Query atraveacutes da funccedilatildeo ChangeQuery() Este proceduimento jaacute eacute realizado internamente pelo comando OPEN
QUERY Para que a query natildeo seja submetida agrave funccedilatildeo ChangeQuery() devemos utilizar o paracircmetro NOCHANGE
A utilizaccedilatildeo deste comando eacute impliacutecita agrave LIB APWEBEX e necessita da utilizaccedilatildeo do include Apwebexch
Comandos - WEB EXTENDED END
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED END ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando para fechar uma seccedilatildeo aberta pelo comando WEB EXTENDED INIT Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do
comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
Comandos - WEB EXTENDED INIT
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED INIT ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando juntamente com o comando WEB EXTENDED END quando montamos uma funcatildeo ( Web Function ) que foi construiacuteda para ser chamada a partir de um Web Browser quando nos
utilizamos das funccedilotildees de Infra-Estrutura APWEBEX
Atraveacutes dele eacute realizada uma preacute-validaccedilatildeo que certifica que a execuccedilatildeo da funccedilatildeo somente seraacute realizada caso a thread atual seja realmente uma Thread montada no ambiente WEBEX aleacutem de podermos inserir uma
preacute-validaccedilatildeo (START) de execuccedilatildeo especiacutefica para esta funccedilatildeo
Caso seja especificada uma funccedilatildeo na claacuteusula START a mesma deveraacute retornar uma String Retornando uma String em branco o processamento da funccedilatildeo original seraacute efetuado normalmente Caso a funccedilatildeo retorne
uma string natildeo-vazia esta string seraacute retornada para a variaacutevel cHtml e o processamento do programa seraacute desviado para a linha do coacutedigo-fonte imediatamente posterior agraveo comando WEB EXTENDED END
Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
12
Infra-Estrutura APWEBEX - EnvUserAPL - Exemplo de Uso com ERP
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo praacutetico abaixo utilizamos em um coacutedigo fonte Advpl os pontos de entrada disponibilizados na Infra-Estrutura APWEBEX para realizar a preparaccedilatildeo de um ambiente ERP Reset de Ambiente
finalizaccedilatildeo de Thread finalizaccedilatildeo de sessions por time-out e customizaccedilatildeo de mensagem de erro para o desenvolvimento de um projeto de Web Site integrado com o ERP Microsiga
Devemos adotar como padratildeo para projetos que utilizam APWEBEX a criaccedilatildeo do arquivo EnvUserapl especificamente para a definiccedilatildeo dos pontos de entrada utilizados pela Infra-Estrutura
APWEBEX e devemos apenas compilar os fontes dos pontos de entrada realmente necessaacuterios agraveo projeto INCLUDE PROTHEUSCH
INCLUDE APWEBEXCH
====================================================================================
Exemplo de Arquivo de Lib de Projeto APWEBEX utilizando os pontos de entrada
da lib para preparaccedilatildeo de ambiente reset de ambiente e tratamento de erro
utilizando APWEBEX em conjunto com o ERP Microsiga
====================================================================================
----------------------------------------------------------------------------
Ponto de Entrada StartWebEx( NIL ) =gt T ou F
Ponto de entrada executado na inicializaccedilatildeo de cada Working Thread ( ONSTART )
Eacute a responsaacutevel por preparar o ambiente para atender agraves requisiccedilotildees WEB de links apw
Natildeo recebe paracircmetro algum da lib e deve retornar T caso tenha inicialziado com sucesso
ou F em caso de falha de inicializaccedilatildeo
----------------------------------------------------------------------------
USER Function StartWebEx()
Prepara o Ambiente ERP
PREPARE ENVIRONMENT
EMPRESA 01
FILIAL 01
TABLES ZX1ZX2ZX3ZX4ZZ1ZZ2ZZ3ZZ4ZZ5
Return T
-------------------------------------------------------------------------------
Ponto de Entrada ConnectWebEx(cFnName) =gt cHtml ou
Ponto de entrada executado imediatamente antes do processamento de uma requisiccedilatildeo de um link APW
Recebe como paracircmetro o nome da funccedilatildeo a ser executada passada no link
Deve retornar uma String que seraacute retornada ao ao Browser solicitante Caso retorne uma string
em branco (vazia) a funccedilatildeo originalmente solicitada eacute executada pela lib
Caso contraacuterio a funccedilatildeo original natildeo eacute executada e a string retornada eacute enviada ao Browser
-------------------------------------------------------------------------------
USER Function ConnectWebEx(cFnName)
Local cHtmlConn =
conout(Vou executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada ResetWebEx(cFnName) =gt cHtml ou
Funccedilatildeo chamada imediatamente Apos a execuccedilatildeo de uma requisiccedilatildeo APW
Recebe como paracircmetro o nome da funccedilatildeo executada e permite tambeacutem que seja acrescentado
algo a mais no Html a ser retornado ao Browser
-------------------------------------------------------------------------------
USER Function ResetWebEx(cFnName)
Local cHtmlConn =
conout(Terminei de executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada FINISHWEBEX()
Funccedilatildeo chamada no fechamendo do ambiente de uma working Thread Apos a execuccedilatildeo deste
a Thread utilizada eacute eliminada da memoacuteria
-------------------------------------------------------------------------------
USER Function FINISHWEBEX()
conout(Finalizando a Working Thread)
Return
-------------------------------------------------------------------------------
Ponto de Entrada ENDSESSION(cSessionId) =gt NIL
Ponto de entrada chamado em uma working Thread quando a session de um usuaacuterio seraacute
eliminada da memoacuteria por time-out Recebe como parametro o Id de sessions de usuario
que estaacute sendo finalizado
-------------------------------------------------------------------------------
USER Function ENDSESSION(cSessionId)
Conout(Sesssion +cSessionId+ limpa da memoacuteria)
Return
----------------------------------------------------------------------------
Ponto de Entrada WebExError(ecErrorLogcHtml) =gt cCustomHtml ou
Esta funcao eacute chamada pela rotina de tratamento de erro WEBEX quando ocorre um erro fatal
e permite que seja retornado um Html de tratamento de erro diferenciado Ela recebe como
parametro o objeto do erro a mensagem ASCII que foi acrescentada ao arquivo errorlog
e o Html original montado pela rotina de tratamento de erro default
IMPORTANTE Por sem um ponto de entrada executado em um momento criacutetico (tratamento
de erro ) esta funccedilatildeo deve ser o mais suscinta e simples possiacutevel natildeo utilizando
sessions banco de dados etc
----------------------------------------------------------------------------
USER Function WebExError(oErrorcErrorLogcHtml)
Local cCustomHtml =
Monta mensagem de erro mais amigavel
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
13
Ocorreu um erro inesperado no
cCustomHtml += processamento desta paacutegina O Administrador do sistema seraacute notificado desta
cCustomHtml += ocorrecircncia Recomendamos fortemente que esta janela do navegador seja cCustomHtml += fechada e uma nova janela seja aberta para retornar agrave navegaccedilatildeo do site
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
Return cCustomHtml
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Nos exemplo abaixo utilizamos a funccedilatildeo escape() para formatar paracircmetros para inserir em uma URL cUrl = httplocalhostwebinfoapw
cPAram1 = Teste de Parametro 01-02
cPAram2 = reserva
cPAram3 = 1+2+3
cUrl += Par01= + escape(cPAram1) + ampPAr02= + escape(cPAram2) + ampPar03= + escape(cPAram3)
O conteudo de cUrl deveraacute ser httplocalhostwebinfoapwPar01=Teste20de20Parametro2001-02ampPAr02=23reserva23ampPar03=12B22B3
proacuteprio para a monyahem de um link
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETJOBPROFSTRING
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
O exemplo abaixo executado em uma thread iniciada a partir de um JOB WEBEX recupera algumas configuraccedilotildees atuais em uso para este JOB cJobType = GetJobProfString(type(empty) )
cInstances = GetJobProfString(Instances(empty) )
cInacTime = GetJobProfString(InactiveTimeout(default) )
cExpTime = GetJobProfString(ExpirationTime(default) )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETPARVALUE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo satildeo montados dois arrays multi-dimensionais com 2 dimensotildees e satildeo realizadas buscas nos mesmos explorando todas as possibilidades de uso da funccedilatildeo GetParValue() Local aTeste1 =
Local aTeste2 =
Aadd(aTeste1AliasTMP1)
Aadd(aTeste1Relacao2x3)
Aadd(aTeste2AliasTMP2)
Aadd(aTeste2Info---Informaccedilatildeo adicional---)
Busca apenas no array ateste1
cAlias = GetParValue(ALIASaTeste1)
cRelacao = GetParValue(RELACAOaTeste1)
cInfo = GetParValue(INFOaTeste1)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) (nao encontrado)
Busca apenas no array ateste2
cAlias = GetParValue(ALIASaTeste2)
cRelacao = GetParValue(RELACAOaTeste2)
cInfo = GetParValue(INFOaTeste2)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP2
conout(cRelacao) (nao encontrado)
conout(cInfo) ---Informaccedilatildeo Adicional---
Busca em ambos os Arrays
Primeiro no aTeste1 e depois no aTeste2
cAlias = GetParValue(ALIASaTeste1aTeste2)
cRelacao = GetParValue(RELACAOaTeste1aTeste2)
cInfo = GetParValue(INFOaTeste1aTeste2)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) ---Informaccedilatildeo Adicional---
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo abaixo geramos a string com o DUMP de um arquivo HTML salvo na pasta WEB a partir do RootPath do Environment O Dump do arquivo seraacute mostrado no Console do servidor e no Web
Browser que solicitou a funccedilatildeo U_DumpTestapw
include protheusch
include apwebexch
User Function DumpTest()
Local cHtml =
Local cTXTFile =
Local cDump =
WEB EXTENDED INIT cHtml
14
Le o arquivo
cTTXFile = memoread(WebDefaulthtm)
Gera a string com o Dump do arquivo
cDump = HExStrDump(cTTXFile)
Mostra o Dump no console
conout(cDump)
Gera HTML para a visualizaccedilatildeo do DUMP
cHtml = VarInfo(DUMPHtmlnotags(cDump)tf)
WEB EXTENDED END
Return cHtml
Exemplo do Texto mostrado no Console
HexSTRDump ( String 237 Start 1 Length 237 )
-------------------------------------------------------------------------------
3C 48 54 4D 4C 3E 3C 48 45 41 44 3E 0D 0A 3C 4D | ltHTMLgtltHEADgt__ltM
45 54 41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 | ETA HTTP-EQUIV=
43 6F 6E 74 65 6E 74 2D 54 79 70 65 22 20 63 6F | Content-Type co
6E 74 65 6E 74 3D 22 74 65 78 74 2F 68 74 6D 6C | ntent=texthtml
22 0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 | __ltMETA HTTP-EQ
55 49 56 3D 22 70 72 61 67 6D 61 22 20 63 6F 6E | UIV=pragma con
74 65 6E 74 3D 22 6E 6F 2D 63 61 63 68 65 22 3E | tent=no-cachegt
0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 55 | __ltMETA HTTP-EQU
49 56 3D 22 45 78 70 69 72 65 73 22 20 63 6F 6E | IV=Expires con
74 65 6E 74 3D 22 2D 31 22 3E 0D 0A 3C 4D 45 54 | tent=-1gt__ltMET
41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 52 65 | A HTTP-EQUIV=Re
66 72 65 73 68 22 20 63 6F 6E 74 65 6E 74 3D 22 | fresh content=
30 3B 20 75 72 6C 3D 2F 77 5F 77 45 78 30 30 30 | 0 url=w_wEx000
2E 61 70 77 22 3E 3C 2F 48 45 41 44 3E 0D 0A 3C | apwgtltHEADgt__lt
2F 48 45 41 44 3E 3C 2F 48 54 4D 4C 3E | HEADgtltHTMLgt
-------------------------------------------------------------------------------
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HTMLNOTAGS
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo a funccedilatildeo HtmlNoTags eacute utilizada para permitir a utilizaccedilatildeo de caracteres especiais no conteuacutedo de um input para um formulaacuterio Html Local cHtml =
Local cInput =
Conteudo do campo com tags HTML intepretaacuteveis
cInput =
Ao montar o Input aplicar a HtmlNoTags() ao conteudo do mesmo
cHtml +=
+HtmlNoTags(cIn
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
15
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos a funccedilatildeo RetSqlAce para montar uma query de busca por tiacutetulo de uma determinada informaccedilatildeo considerando todas as possibilidades de acentuaccedilatildeo independentemente de como o
banco foi alimentado eou a string de busca foi digitada
IMPORTANTE Na expressatildeo da Query o campo da tabela deve ser passado pela funccedilatildeo LOWER do BAnco pois a funccedilatildeo retsqlace monta a string para busca com letras minuacutesculas cFind = acentuaccedilatildeo
cQuery = SELECT FROM + RetSqlTab(ZZ1)
cQuery += WHERE LOWER(ZZ1_TITULO) LIKE +RetSqlAce(cFind)+
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VALTOSQL
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = + ValToSql(02)
cQuery += AND FA2_DTINC lt= + ValToSql(date())
O exemplo acima caso escrito de forma a realizar as conversotildees especiacuteficas para cada tipo de conteuacutedo seria o equivalemte ao coacutedigo abaixo
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = 02
cQuery += AND FA2_DTINC lt= + DTOS( date() )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VARINFO
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo eacute gerada uma string HTML com as informaccedilotildees do retorno da chamada de duas funccedilotildees baacutesicas da Linguagem Advpl User Function InfoTeste()
Local cHtml =
cHtml += VarInfo(lsquoDatersquodate())
cHtml += VarInfo(lsquoTimelsquotime())
Return cHtml
Deve ser gerado um echo no Console do Servidor parecido com este abaixo
Date -gt D ( 10) [08122003]
Time -gt C ( 8) [201748]
Infra-Estrutura APWEBEX - Exemplo das funccedilotildees de acentuaccedilatildeo ApWebEX
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo vemos a diferenccedila de comportamento entre as funccedilotildees baacutesicas da Linguagem Advpl Upper() e Lower() e a funccedilatildeo de Infra-estrutura Capital() em relaccedilatildeo agraves funccedilotildees da Infra-estrutura
APWEBEX UpperAce() LowerAce() e CApitalAce() quando utilizamos caracteres acentuados cRetorno =
cFrase = natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
cRetorno += Original + cFrase + CRLF
cRetorno += Upper() + upper(cFrase) + CRLF
cRetorno += Lower() + lower(cFrase) + CRLF
cRetorno += Capital() + capital(cFrase) + CRLF
cRetorno += UPPERACE() + UPPERACE(cFrase) + CRLF
cRetorno += LOWERACE() + LOWERACE(cFrase) + CRLF
cRetorno += CAPITALACE() + CAPITALACE(cFrase) + CRLF
Neste ponto a variaacutevel cRetorno deveraacute conter
Original natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
Upper() NatildeO Haacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSotildeES PARA O INEXPLICaacuteVEL
Lower() natildeo haacute explicaCcedilOtildees considerando excessotildees para o inexplicaacutevel
Capital() Natildeo Haacute ExplicaCcedilOtildees Considerando Excessotildees Para O Inexplicaacutevel
UPPERACE() NAtildeO HAacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSOtildeES PARA O INEXPLICAacuteVEL
LOWERACE() natildeo haacute explicaccedilotildees considerando excessotildees para o inexplicaacutevel
CAPITALACE() Natildeo Haacute Explicaccedilotildees Considerando Excessotildees Para O Inexplicaacutevel
Infra-Estrutura APWEBEX - Exemplos das funccedilotildees NTOC e CTON
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos as funccedilotildees cton e ntoc para realizar conversotildees de nuacutemeros em base decimal para outras bases numeacutericas e vice-versa
16
nNum1 = CTON(011010012) Converte binaacuterio para decimal
nNum2 = CTON(00DA25FE16) Converte Hexadecimal para decimal
nNum1++ Soma 1 ao numero em nNum1
nNum2++ Soma 1 ao numero em nNum2
cNum1 = NtoC(nNum128) Converte para binaacuterio novamente
cNum2 = NtoC(nNum2168) Converte para Hexa novamente
-------------------------------------------------------------------------
Ao final do programa cNum1 seraacute 01101010 e cNum2 seraacute 00DA25FF
-------------------------------------------------------------------------
APWEXADDERR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
APWEXADDERR ( [ cTitulo ] [ cInfo ] ) --gt T
Paracircmetros
Argumento Tipo Descriccedilatildeo
cTitulo Caracter cTitulo corresponde a um tiacutetulo identificador da informaccedilatildeo Deve ter no maacuteximo 20 caracteres Os caracteres acima da vigeacutesima posiccedilatildeo seratildeo
ignorados
cInfo Caracter cInfo corresponde agrave Informaccedilatildeo a ser acrescentada ao ERRORLOG em caso de erro
Retorno
Tipo Descriccedilatildeo
Loacutegico Esta funccedilatildeo sempre retorna T
Descriccedilatildeo
Atraveacutes da funccedilatildeo ApWExAddErr() podemos acrescentar uma string de informaccedilotildees adicionais em um buffer em memoacuteria descarregado na geraccedilatildeo do ERRORLOG no caso de uma ocorrecircncia de erro fatal na
working thread atual
Caso a funccedilatildeo seja chamada sem nenhum paracircmetro a uacuteltima ocorrecircncia acrescentada pela funccedilatildeo eacute eliminada da pilha interna de informaccedilotildees
ATENCcedilAtildeO Esta funccedilatildeo deve ser apenas utilizada em casos de necessidade de obtenccedilatildeo de informaccedilotildees especiacuteficas acerca de uma ocorrecircncia de erro natildeo reproduzida em ambiente de testes eou natildeo depuraacutevel pois
seu uso desnecessaacuterio prejudica a performance da aplicaccedilatildeo final
CAPITALACE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CAPITALACE ( lt cString gt ) --gt cStrCapital
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida
Retorno
Tipo Descriccedilatildeo
Caracter String resultante convertida para munuacutesculo com as primeiras letras das palavras significantes em maiuacutesculo
Descriccedilatildeo
Semelhante agrave funccedilatildeo de Infra-estrutura Capital() poreacutem converte tambeacutem caracteres acentuados
A funccedilatildeo CapitalAce() converte todos os caracteres de uma String para minuacutesculo e a primeira letra das palavras significantes para maiuacutesculo semelhante agrave funccedilatildeo Capital() poreacutem considera e converte tambeacutem
caracteres acentuados em OEM eou ANSI
CTON
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CTON ( lt cString gt lt nBase gt ) --gt nNumero
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave representaccedilatildeo de um nuacutemero em outra base numeacuterica compreendida entre 2 e 36
nBase Numeacuterico nBase corresponde agrave base numeacuterica utilizada pelo numero representado em cString
Retorno
Tipo Descriccedilatildeo
Numeacuterico Nuacutemero recebido como paracircmetro em notaccedilatildeo decimal ( Base 10 )
Descriccedilatildeo
Converte um nuacutemero representado em String de base 2 a 36 para um nuacutemero em base decimal (10)
Observaccedilatildeo Importante
Satildeo considerados caracteres vaacutelidos para compor um nuacutemero de base 36 os 10 algarismos numeacutericos de 0 a 9 e os 26 caracteres alfabeacuteticos maiuacutesculos compreendidos entre A e Z Quaisquer caractetes presentes na
String de paracircmetro fora desta faixa de dados eou fora da base ( por exemplo uma conversatildeo de string base 2 - binaacuterio - da string 01001020 ) retornaraacute -1 ( menos um )
ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
ESCAPE ( lt cString gt ) --gt cEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute uma sequecircncia de caracteres a ser processada
Retorno
Tipo Descriccedilatildeo
Caracter cEscaped corresponde agrave string original com os caracteres reservados utilizando a notaccedilatildeo HH
Descriccedilatildeo
A funccedilatildeo Escape() deve ser utilizada para realizar conversotildees de caracteres especiais e reservados quando da necessidade de passagem de paracircmetros via URL
A sintaxe de uma requisiccedilatildeo via URL para a passagem de paracircmetros eacute
(link)param=conteudoampparam2=conteudo2amp
Quando passamos paracircmetros via url devemos tomar o cuidado de natildeo utilizar caracteres reservados e especiais nos nomes e conteuacutedos de paracircmetros Para realizar estas conversotildees utilizamos a funccedilatildeo Escape()
17
EXECINPAGE
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXECINPAGE ( lt cAPHPage gt ) --gt cHTMLPage
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAPHPage Caracter Corresponde agraveo nome do APH que deve ser executado sem a extensatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cHtmlPage corresponde agrave string HTML gerada pela paacutegina APH AHU
Descriccedilatildeo
Atraveacutes da funccedilatildeo ExecInPage() executamos uma paacutegina APH passada como paracircmetro A funccedilatildeo deveraacute retornar a String HTML correspondente agrave paacutegina processada
Poreacutem a funccedilatildeo ExecInPage() realiza tratamentos adicionais padratildeo relacionaodo agraveo comportamento dos Projetos WEB referentes agrave customizaccedilotildees da segunte maneira
1 Primeiro eacute verificado se existe uma paacutegina AHU compilada com o nome cAPHPage Caso exista a mesma seraacute executada pela execinpage
2 Caso natildeo exista AHU com este nome eacute procurado pelo APH Caso o APH exista o mesmo seraacute executado pela ExecInPage
3 Caso natildeo existam no RPO atual o APH nem o AHU com o nome especificado no paracircmetro cAPHFile o processamento eacute abortado com a ocorrecircncia de erro [APWEXERR_0007] APH page
[ltcAPHPagegt] not found in RPO 4 Antes de executar o APH ou AHU identificado nos passos anteriores eacute verificado se existe um ponto de entrada ( User Function ) compilado com o mesmo nome do APH Caso exista o ponto de
entrada eacute executado Ele deveraacute retornar uma String HTML Se for retornada alguma string a funccedilatildeo retorna a tring retornada e natildeo processa o APH AHU Observaccedilatildeo A funccedilatildeo ExecInPage natildeo iraacute executar este
tratamento da User Function com o nome de cAPHPage caso a funccedilatildeo ExecInPage() esteja sendo executada atraveacutes de uma USER FUNCTION
Observaccedilatildeo Importante - Envio parcial de HTML agraveo Browser A funccedilatildeo ExecInpage() juntamente com o APH compilado ao serem processados iratildeo tentar enviar o conteuacutedo HTML para o Browser solicitante durante o processamento de modo que a funccedilatildeo normalmente iraacute
retornar uma String vazia
Caso seja necessaacuteria a execuccedilatildeo de uma paacutegina APH ou AHU e o natildeo-envio da mesma para o Browse por exemplo para a geraccedilatildeo de um coacutedigo HTML a ser enviado via e-mail revemos utilizar a funccedilatildeo
HttpSetPart() realizando uma chamada da mesma antes da ExecInPage() passando o paracircmetro F para desabilitar temporariamente o envio de HTML simultacircneo ao Browser e apoacutes a execuccedilatildeo da ExecInPage()
devemos re-habilitar o envio simultacircneo atraveacutes da chamada da funccedilatildeo HttpSetPart() com o paracircmetro T
EXISTPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTPAGE ( lt cAphFile gt ) --gt lFound
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAphFile Caracter Nome do arquivo APH sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Caracter Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistPage() para identificarmos no ambiente atual se um determinado arquivo APH encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistPage(teste)
conout(testeaph compilado neste RPO)
Else
conout(testeaph NAO compilado neste RPO)
Endif
EXISTUSRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTUSRPAGE ( lt cAhuFile gt ) --gt lExist
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAhuFile Caracter Nome do arquivo AHU sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Loacutegico Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistUSRPage() para identificarmos no ambiente atual se um determinado arquivo AHU encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistUSRPage(teste)
conout(testeahu compilado neste RPO)
Else
conout(testeahu NAO compilado neste RPO)
Endif
GETJOBPROFSTRING
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETJOBPROFSTRING ( lt cKey gt lt cDefault gt ) --gt cKeyValue
Paracircmetros
Argumento Tipo Descriccedilatildeo
cKey Caracter cKey corresponde agrave chave da seccedilatildeo de configuraccedilatildeo da Working Thread atual a ser retornada
cDefault Caracter Valor default (string) a ser retornado pela funccedilatildeo caso a chave especificada natildeo sehja encontrada no INI
Retorno
Tipo Descriccedilatildeo
Caracter Conteudo da Chave solicitada Caso a chave natildeo seja encontrada eacute retornado o conteudo de cDefault Caso esta funccedilatildeo natildeo seja executada a partir de uma Working Thread ela
18
retornaraacute uma string em branco ()
Descriccedilatildeo
Atraveacutes desta funccedilatildeo podemos recuperar as configuraccedilotildees do Job da Working Thread atual
GETWEXVERSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETWEXVERSION ( ) --gt cBuildId
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave String Identificadora da versatildeo no formato ltLIBgt VAAMMDDHHmm Vide Tabela A
Descriccedilatildeo
Esta funccedilatildeo natildeo requer argumentos e retorna o Identificador do build versatildeo de Release das funccedilotildees de Infra-Estrutura APWEBEX
Observaccedilatildeo A data informada pela versatildeo natildeo corresponde agrave ultima compilaccedilatildeo do RPO de um determinado Projeto WEB mas sim agrave data de release da LIB de Infra-Estrutura APWEBEX
Tabela A
Simbolo Descriccedilatildeo
AA Ano de geraccedilatildeo da Lib
MM Mecircs da geraccedilatildeo da Lib
DD Dia da geraccedilatildeo da Lib
HH Horaacuterio da geraccedilatildeo da Lib
mm Minutos do Horaacuterio de Geraccedilatildeo da Lib
(HTTP) Indica que a versatildeo foi compilada com a configuracatildeo de envio progressivo de HTML simultacircneo para o Browse Esta opccedilatildeo eacute imprescindiacutevel para projetos que se utilizam desta LIB
Por exemplo
APWEBEX Version 30312021900 (HTTP)
HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HEXSTRDUMP ( lt cString gt [ nStart ] [ nLength ] ) --gt cHExDump
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser lida para a geraccedilatildeo do Dump
nStart Numeacuterico Corresponde agrave posiccedilatildeo inicial de cString a ser considerada para a geraccedilatildeo do Dump a partir da posiccedilatildeo 1 Caso este paracircmetro natildeo seja informado o
Default eacute a posiccedilatildeo 1 da string
nLength Numeacuterico nLength corresponde agraveo tamanho a ser considerado para a geraccedilatildeo do DUMP a partir da posiccedilatildeo inicial recebida em nStart Caso este paracircmetro natildeo
seja informado eacute considerado o tamanho ateacute o final da String
Retorno
Tipo Descriccedilatildeo
Caracter O retorno da funccedilatildeo corresponde agrave uma string Advpl formatadas em 16 bytes em hexadecimal por linha mais o separador pipe (|) mais os 16 caracteres em Ansi Os caracteres de
controle ( codigo ascii menor que 32 ) satildeo convertidos para visualizaccedilatildeo para o caractere underline (_)
Descriccedilatildeo
Atraveacutes da funccedilatildeo HexStrDump() podemos gerar uma string em Advpl em formato de Dump Hexadecimal a partir da string informada como paracircmetro a partir de uma determinada posiccedilatildeo da string considerando um
nuacutemero de bytes informado
Caso os paracircmetros nPosIni e nTamString natildeo sejam informados o dump gerado corresponde a string recebida como paracircmetro em sua totalidade
Observaccedilatildeo
Natildeo devemos pasar para a funccedilatildeo HexStrDump uma string maior que 240 Kb pois a geraccedilatildeo da String de dump eacute realizada em memoacuteria sendo a string final gerada em meacutedia 42 vezes maior que a string passada
como paracircmetro Caso a string passada como paracircmetro seja maior que 240 Kb a execuccedilatildeo seraacute abortada com a ocorrecircncia de erro fatal string size overflow
HTMLNOTAGS
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HTMLNOTAGS ( lt cStrHtml gt ) --gt cStrNoTags
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrHtml Caracter cStrHtml corresponde a uma String que natildeo pode conter caracteres Html interpretaacuteveis
Retorno
Tipo Descriccedilatildeo
Caracter String original com os caracteres interpretaacuteveis Html lt gt amp convertidos para caracteres natildeo-interpretaacuteveis
Descriccedilatildeo
A Funccedilatildeo HTMLNOTAGS converte as Tags interpretaacuteveis de uma String HTML para TAGS natildeo interpretaacuteveis Este recurso eacute normalmente utilizado quando precisamos montar um input Html com um conteudo que
nao pode ser interpretado pelo browser como uma Tag Esta funccedilatildeo apenas converte os caracteres lt ( menor que ) gt ( maior que ) amp ( e comercial ) e ldquo ( aspas duplas )
Recomenda-se fortemente que na montagem do value de um input html o conteuacutedo do mesmo seja colocado entre aspas duplas pois caso o conteuacutedo do value inicial do campo contenha aspas simples (
natildeo convertidas pela funccedilatildeo HtmlNoTags) isto poderaacute ocasionar perda de dados e erro de sintaxe no formulaacuterio Html
HTTPISWEBEX
Revisatildeo 12122003
Sintaxe
HTTPISWEBEX ( ) --gt lIsApWEBEX
Retorno
Tipo Descriccedilatildeo
Loacutegico A funccedilatildeo retornaraacute T caso o ambiente de execuccedilatildeo atual seja uma Working Thread WEBEX inicializada pela funccedilatildeo de infra-estrutura STARTWEBEX
Descriccedilatildeo
Atraveacutes da funccedilatildeo HttpIsWebEx() eacute possiacutevel identificarmos se o programa atual estaacute sendo executado atraveacutes de uma Working Thread inicializada utilizando-se as funccedilotildees de Infra-Estrutura APWEBEX
ISEMAIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
19
Sintaxe
ISEMAIL ( lt cEMail gt ) --gt lEmailOk
Paracircmetros
Argumento Tipo Descriccedilatildeo
cEMail Caracter cEmail corresponde a string a ser analizada contendo um e apenas um endereccedilo de e-mail
Retorno
Tipo Descriccedilatildeo
Caracter Retorna T caso a sring recebida como paracircmetro atenda agraves definiccedilotildees de nomenclatura vaacutelidos para um endereccedilo de e-mail
Descriccedilatildeo
Utilizada para validar e-mails em Advpl a funccedilatildeo ISEMAIL recebe como paracircmetro uma string contendo um e-mail retornando T caso a string esteja em um formaacuteto vaacutelido respeitando a regra para nomenclatura de
endereccedilos de e-mail
Regra Um e-mail eacute considerado vaacutelido caso seja iniciado por um caracter apenas contenha caracteres asc de a a z e 0 a 9 e os caracteres (arroba) (ponto) - ( hiacutefen) ou _ (underline) e deve conter uma e
apenas uma arroba e no minimo um ponto apos a arroba intercalado por um caracter
LOWERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
LOWERACE ( lt cString gt ) --gt cStrLower
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a sequecircncia de caracteres a ser convertida para letras minuacutesculas
Retorno
Tipo Descriccedilatildeo
Caracter String original em letras minuacutesculas
Descriccedilatildeo
A Funccedilatildeo LOWERACE converte todos os caracteres de uma String para ldquominusculordquo semelhante agrave funccedilatildeo LOWER() poreacutem considera e converte tambeacutem caracteres acentuados em ANSI
NTOC
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
NTOC ( lt nNumero gt lt nBase gt lt nTamStr gt ) --gt cString
Paracircmetros
Argumento Tipo Descriccedilatildeo
nNumero Numeacuterico nNumero eacute o valor numeacuterico em base devimal a ser convertido
nBase Numeacuterico nBase corresponde agrave base binaacuteria a ser utilizada para converter nNumero
nTamStr Numeacuterico nTamStr corresponde ao tamanho da string representando o numero na base desejada
Retorno
Tipo Descriccedilatildeo
Caracter cString corresponde ao numero convertido para a base numeacuterica especificada como paracircmetro
Descriccedilatildeo
A Funccedilatildeo NTOC converte um nuacutemero em notaccedilatildeo decimal para um nuacutemero representado por String utilizando uma base numeacuterica entre 2 e 36 preenchendo-o com ldquo0rdquo (zeros) agrave esquerda do tamanho especificado
Observaccedilatildeo O Paracircmetro nBase deve ser especificado com um nuacutemero entre 2 e 36 Caso seja passado como paracircmetro um nuacutemero base fora desta faixa o processamento eacute abortado com a ocorrecircncia de erro
[APWEXERR_0022] INVALID NTOC BASE [X] onde ltXgt foi a base passada como argumento
REDIRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
REDIRPAGE ( lt cUrl gt [ cTarget ] [ nTime ] ) --gt cScript
Paracircmetros
Argumento Tipo Descriccedilatildeo
cUrl Caracter Link para onde o script deve apontar o redirecionamento
cTarget Caracter Destino do redirecionamento Caso natildeo especificado o default eacute _self
nTime Numeacuterico Tempo (em segundos) de delay antes do redirecionamento ser executado
Retorno
Tipo Descriccedilatildeo
Caracter Script Html JavaScript que ao ser executado no Browser (client) chama a paacuteginaobjeto chamado no Link
Descriccedilatildeo
A funccedilatildeo RedirPage eacute utilizada quando desejamos devolver ao Browser um script que ao ser executado redirecionaraacute o Browser agrave abertura de um link passado como paracircmetro
RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLACE ( lt cStrFind gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrFind Caracter cStrFind corresponde agrave sequecircncia de caracteres a ser procurada podendo conter caracteres maiuacutesculos e minuacutesculos com ou sem acentuaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cStrQuery corresponde agrave string de busca a ser utilizada na query utilizando caracteres em minuacutesculo
Descriccedilatildeo
A funccedilatildeo RetSqlAce eacute utilizada para auxiliar de montagem de querys de busca de caracteres acentuados em bases de dados A funccedilatildeo automaticamente trata a string original removendo os acentos convertendo todos
os caracteres para minuacutesculas e trocando todas as vogais e cedilhas da string original por uma sequecircncia de caracteres acentuados em munuacutescilas para busca posicional
20
RETSQLCOND
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLCOND ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlCond() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga e o Makira Hypersite utilizando aliases de 3
caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar a filial atual ( xFilial ) de acordo com o modo do arquivo ( X2_MODO ) e para sempre desconsiderar
registros deletados
Observaccedilotildees
Esta funccedilatildeo foi mantida apenas por compatibilidade pois a ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do
banco para efeitos de performance Para ganharmos performance nas Querys devemos ao inveacutes de utilizar a funccedilatildeo RetSqlCond() utilizar como primeira clauacutesula WHERE o retorno da funccedilatildeo RetSqlFil() (
comparaccedilatildeo dos campos _FILIAL os primeiros do(s) iacutendice(s) do ERP ) que retorna apenas as comparaccedilotildees de Filial e por uacuteltimo a funccedilatildeo RetSqlDel que retorna o script para verificaccedilatildeo dos campos deletados (
que eacute o uacuteltimo campo das chaves de iacutendice do ERP utilizando TopConnect )
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlCond() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de
modo que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute
retorna os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLDEL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLDEL ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlDel() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo D_E_L_E_T_ da(s) tabela(s) passada(s) como paracircmetro
Observaccedilotildees
A ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do banco para efeitos de performance Para ganharmos performance
nas Querys devemos utilizar a funccedilatildeo RetSqlDEl() na montagem das ultimas consistecircncias da claacuteusula WHERE de uma Query
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlDel() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo
que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna
os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLFIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLFIL ( lt cAliases gt [ cCompFil ] ) --gt cSQlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
cCompFil Caracter
Atraveacutes de cCompFil eacute possiacutevel especificar uma Filial FIXA a ser comparada com os campos FILIAL do(s) alias(es) passados no paracircmetro cAliases
Caso natildeo informado os campos _FILIAL da(s) tabela(s) passadas como paracircmetro em cAliases seratildeo comparados com o retorno da funccedilatildeo xFilial() de
cada alias respectivamente
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo filial atual ( xFilial ) de acordo com o modo de abertura do arquivo no ERP ( X2_MODO )
Observaccedilatildeo
Devemos atentar ao fato que a funccedilatildeo RetSqlFil() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo que estes
alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna os
nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLTAB
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLTAB ( lt cAliasList gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliasList Caracter String contendo um ou mais alias separados por virgula a terem seus nomes fiacutesicos determinados
Retorno
Tipo Descriccedilatildeo
Caracter String contendo nomes fisicos e alias identificadores dos aliases recebidos como paracircmetro
Descriccedilatildeo
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
3
Caracteriacutesticas do ADVPL ASP - Arquivos APH Os arquivos ADVPL ASP tecircm a extensatildeo padratildeo APH Satildeo arquivos texto e devem ser adicionados a um projeto no Protheus IDE e compilados da mesma maneira que os programas tradicionais A diferenccedila eacute que o
Protheus Server identificaraacute que se trata de um ADVPL ASP e executaraacute uma espeacutecie de tradutor (parser) antes que a compilaccedilatildeo seja executada Este parser iraacute transformar todo o arquivo em uma funccedilatildeo uacutenica que
receberaacute os mesmos paracircmetros das funccedilotildees APL simples como explicado anteriormente no Item Desenvolvendo Funccedilotildees APL e retornaraacute uma string
O desenvolvedor natildeo precisa se preocupar em retornar HMTL algum pois o APH tambeacutem eacute um arquivo HTML A funccedilatildeo que foi gerada na compilaccedilatildeo iraacute se encarregar de retornar o HTML contigo no arquivo
depois que o coacutedigo foi processado Um Arquivo APH gera no repositoacuterio de Objetos do Protheus uma funccedilatildeo com o mesmo nome do arquivo poreacutem prefixada com H_ + nome_do_arquivo_aph
Por se tornar uma funccedilatildeo no momento da compilaccedilatildeo natildeo eacute possiacutevel utilizar a claacuteusula FUNCTION para criar outras funccedilotildees dentro de um arquivo APH Caso exista essa necessidade tais funccedilotildees devem ser criadas
em um arquivo PRW tradicional e chamadas de dentro do APH
A extensatildeo APH para o nome dos arquivos eacute obrigatoacuteria Qualquer outra extensatildeo usada no nome do arquivo natildeo seraacute reconhecida e o parser do IDE natildeo seraacute executado durante a compilaccedilatildeo Foi criada tambeacutem a
extensatildeo de arquivos AHU ( Aph de Usuaacuterio ) que possui o mesmo tratamento de Parser do aruqivo APH gerando uma funccedilatildeo prefixada com L_ A diferenccedila eacute que a funccedilatildeo gerada pelo AHU pode ser gerada sem a
necessiade de autorizaccedilatildeo de compilaccedilatildeo com permissatildeo para substituir fontes microsiga por tratar-se de um Aph de Usuaacuterio qeuivalente agrave uma User Function
Assim como outros ASPacutes a diferenciaccedilatildeo entre script HTML e coacutedigo eacute efetuada atraveacutes dos caracteres lt para indicaccedilatildeo de abertura de coacutedigo e gt para indicaccedilatildeo do encerramento de coacutedigo Por exemplo o
HTML abaixo conteacutem um pedaccedilo de coacutedigo ADVPL separado pelos delimitadores
lthtmlgtltheadgtlttitlegtADVPL ASP Demolttitlegtltheadgt
ltbodygt
ltpgtBem vindo ao mundo do ADVPL ASPltpgt
lt
Soma os 100 primeiros nuacutemeros
Local i nSoma = 0
For i = 1 To 100
NSoma += i
Next i
gt
ltbodygt
lthtmlgt
Quando este arquivo for requisitado ao Protheus Server (atraveacutes de uma chamada em URL por exemplo) o coacutedigo entre os delimitadores seraacute executado poreacutem o script colocado ao redor do coacutedigo seraacute mantido
exatamente como se encontra Por exemplo
httplocalhostH_WEBDEMOAPL
A grande vantagem de se utilizar dos arquivos ADVPL ASP em relaccedilatildeo a criar funccedilotildees APL simples decorre do fato de que nas funccedilotildees APL simples o desenvolvedor deve se preocupar em retornar todo o HTML
necessaacuterio para a correta exibiccedilatildeo no Web Browser
E tambeacutem como o ADVPL ASP mistura o script HTML com o coacutedigo interpretaacutevel pode-se criar um arquivo APH utilizando o editor desejado (como o Microsoft FrontPage por exemplo) e inserir nele os coacutedigos
Advpl necessaacuterios entre as Tags Outro detalhe importante eacute que pode-se utilizar as estruturas de fluxo da linguagem ADVPL para repetir comandos do proacuteprio script HTML (por exemplo colocar um comando de
script HTML dentro de um comando While em ADVPL)
lt While EOF() gt
ltBgt Esta linha seraacute repetida no HTML ateacute ocorrer o fim de arquivo ltBgt
lt
dbSkip()
EndDo
gt
Note que tambeacutem pode existir diferentes blocos de coacutedigo interpretaacutevel separados pelos delimitadores dentro de um mesmo arquivo
Tatildeo importante quanto mesclar coacutedigo interpretaacutevel com script de formataccedilatildeo HTML eacute utilizar os comandos ADVPL para alterar o script de formataccedilatildeo Ou seja colocar o conteuacutedo de variaacuteveis campos etc
diretamente no HTML que seraacute enviado agrave aplicaccedilatildeo client (ao Browser por exemplo) Isso pode ser realizado atraveacutes dos delimitadores de avaliaccedilatildeo Os delimitadores de avaliaccedilatildeo satildeo lt= para abertura e gt para
encerramento Diferentemente dos delimitadores de coacutedigo interpretaacutevel estes devem sempre estar na mesma linha Com eles pode-se criar uma linha de script HTML cujo conteuacutedo conteacutem uma expressatildeo que seraacute
avaliada em tempo de execuccedilatildeo e seu resultado inserido como parte do Html retornado agraveo Browse
ltbgtEsta linha eacute HTML mas o horaacuterio exibido aqui lt= Time() gt foi obtido em tempo de execuccedilatildeo no Servidorltbgt
No exemplo acima a linha HTML seraacute retornada para o Browser com o resultado da funccedilatildeo time (ou seja a hora atual no servidor) inserido no texto
Utilizando todos esses conceitos pode-se criar toda uma aplicaccedilatildeo Web baseada no Protheus Ou seja o processamento e acesso aos dados fica por conta do Protheus Server e a interface fica por conta do Browser
(utilizando o HTML)
Importante Ao codigicar um arquivo APH eou AHU devemos estar atentos agraves regras de utilizaccedilatildeo dos delimitadores de execuccedilatildeo e avaliaccedilatildeo Advpl
1 A Abertura e fechamendo dos delimitadores de execuccedilatildeo lt gt devem estar isoladas em suas respectivas linhas natildeo devendo ter qualquer conteudo adicional nem duas aberturas e fechamentos na mesma linha
Partindo dessa premissa veja abaixo alguns exemplos de como inserir o coacutedigo Advpl abaixo dentro de um APH
IF lOk
nErro++
Endif
CERTO
lt
IF lOk
nErro++
Endif
gt
CERTO
lt IF lOk gt
lt nErro++ gt
lt Endif gt
CERTO
lt IF lOk nErro++ Endif gt
ERRADO
lt IF lOk gtlt nErro++ gt -- 2 aberturas e fechamentos na mesma linha
lt Endif gt
2 Quantograve agraveos delimitadores de avaliaccedilatildeo lt= gt podemos ter vaacuterias aberturas e fechamentos na mesma lionha poreacutem natildeo podemos ter uma abertura e seu respectivo fechamento em linhas diferentes
3 Uma linha qualquer em um arquivo APH nao deve conter mais do que 150 Caracteres pois o Parser insere caracteres de controle em cada linha do mesmo durante a preacute-compilaccedilatildeo e a linha final resultante natildeo
pode ultrapassar 254 caracteres pois neste caso isto impossibilita a compilaccedilatildeo do APH
04 Desenvolvimento de Funccedilotildees APL
Revisatildeo 27042004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
A princiacutepio todas as funccedilotildees contidas no repositoacuterio podem ser executadas diretamente atraveacutes de uma requisiccedilatildeo HTTP via link com extensatildeo apl ao Protheus Server Poreacutem alguns detalhes devem ser
considerados
4
Uma funccedilatildeo executada no momento do recebimento de uma requisiccedilatildeo HTTP eacute executada como um JOB ou seja natildeo contem interface Por isso tais funccedilotildees natildeo podem conter comandos de interface
como criaccedilatildeo de janelas ou exibiccedilatildeo de helps e mensagens de alerta
A uacutenica interface possiacutevel eacute a utilizada no client HTTP Por isso tais funccedilotildees devem SEMPRE retornar uma string de caracteres Apoacutes o processamento da funccedilatildeo essa string de retorno seraacute enviada
diretamente ao client HTTP e este seraacute o responsaacutevel por sua interpretaccedilatildeo Por exemplo utilizando um Web Browser como client pode-se retornar a string de comandos HTML diretamente O HTML entatildeo seraacute
propriamente exibido no Web Browser
Qualquer retorno diferente de uma string de caracteres geraraacute um erro que seraacute enviado agrave aplicaccedilatildeo client HTTP (o erro gerado eacute ldquoInvalid Proc Returnrdquo)
O servidor Protheus passa alguns paracircmetros para as funccedilotildees chamadas Isso significa que ao criar funccedilotildees para serem utilizadas em resposta agraves requisiccedilotildees HTTP deve-se criar o cabeccedilalho da funccedilatildeo
com estes paracircmetros Natildeo eacute obrigatoacuterio utilizar os mesmos nomes de paracircmetros sugeridos abaixo quando criar diretamente estas funccedilotildees Poreacutem como satildeo esses os nomes utilizados no ADVPL ASP explicado mas a
frente eacute aconselhaacutevel utilizaacute-los por motivo de padronizaccedilatildeo
o __aCookies Este paracircmetro recebe um array bidimensional com os Cookies criados na aplicaccedilatildeo client HTTP (por exemplo no Internet Explorer 5) Pode-se utilizaacute-lo para checar
validaccedilotildees mantidas nas maacutequinas client por exemplo Para maiores detalhes consulte a documentaccedilatildeo do HTML ou do Web Browser utilizado
o __aPostParms Este paracircmetro recebe um array bidimensional com os campos contidos em um formulaacuterio HTML recebido atraveacutes de um comando POST Cada item deste array conteacutem
um array com o nome do campo e o valor informado Por exemplo para um formulaacuterio com dois campos para digitaccedilatildeo (um chamado nome e o outro chamado endereco) que enviam os dados para a funccedilatildeo
cadastroapl atraveacutes de um POST a funccedilatildeo receberaacute o array __aPostParms da seguinte forma
ldquonomerdquo ldquoNOME DIGITADO NA PAGINA HTMLrdquo
ldquoenderecordquo ldquoENDERECO DIGITADO NA PAGINA HTMLrdquo
A funccedilatildeo pode tratar os dados recebidos neste array para realizar um processamento especiacutefico com tais informaccedilotildees Para campos onde natildeo eacute possiacutevel a entrada de dados e sim a escolha de uma informaccedilatildeo preacute-
definida (como por exemplo um checkbox) o item somente existiraacute no array caso o campo tenha sido selecionado no formulaacuterio HTML (por exemplo se o checkbox for marcado)
o __nProcID Conteacutem o Handle da Thread de execuccedilatildeo daquela funccedilatildeo A utilizaccedilatildeo deste paracircmetro seraacute explicada juntamente com o toacutepico ADVPL ASP posteriormente
o __aProcParms Este paracircmetro recebe um array bidimensional com os paracircmetros enviados na linha de URL do Web Browser Por exemplo na execuccedilatildeo de uma funccedilatildeo via linha de URL
do Web Browser como
httpservidorvendeaplcod=000001ampnome=PRODUTO DE TESTEampquant=20
a funccedilatildeo chamada vende receberaacute o array __aProcParms da seguinte forma
ldquocodrdquo ldquo000001rdquo
ldquonomerdquo ldquoPRODUTO DE TESTErdquo
ldquoquantrdquo ldquo20rdquo
A funccedilatildeo pode tratar estes dados recebidos para realizar processamentos especiacuteficos Eacute muito uacutetil tambeacutem para criar links de execuccedilatildeo diretamente atraveacutes de um Web Browser
o __cHTTPPage Esse paracircmetro foi criado originbalmente para recebe o nome da paacutegina arquivo ou funccedilatildeo originalmente requisitada para o Protheus Server poreacutem natildeo foi utilizado e
permaneceu por compatibilidadeCaso consultado ele retorna uma string em branco
o __aHTTPHead Esse paracircmetro recebe um array com os Headers do cabeccedilalho da requisiccedilatildeo HTTP enviados pelo Web Browser
Exemplo de funccedilatildeo APL
A funccedilatildeo a seguir eacute um bom exemplo para ser executado atraveacutes de um Web Browser Ela retorna uma string contendo a paacutegina HTML onde estaacute escrita a mensagem ldquoHello Worldrdquo e a lista de paracircmetros passados na
linha de URL Para testaacute-la crie um arquivo novo no Protheus IDE cole o coacutedigo abaixo e salve o arquivo como WEBDEMOPRW Apoacutes compilar o programa basta chamar em um Web Browser uma URL como
httplocalhostu_webdemoaplcod=000001ampdesc=DESCRICAO DO PRODUTOampqtd=2
Coacutedigo da funccedilatildeo include rwmakech
User Function WebDemo(__aCookies__aPostParms__nProcID__aProcParms__cHTTPPage)
Local cHTML =
Local i
Coloca uma mensagem em HTML
cHTML += ltpgtlth1 align=centergtHello Worldlth1gtltpgt
Coloca um separador de linha em HTML
cHTML += lthrgt
If Len(__aProcParms) = 0
cHTML += ltpgtNenhum paracircmetro informado na linha de URL
Else
For i = 1 To Len(__aProcParms)
cHTML += ltpgtParacircmetro + __aProcParms[i1] + - Valor +
__aProcParms[i2] + ltpgt
Next i
Endif
Return(cHTML)
Importante
Para crias as funccedilotildees que seratildeo utilizadas em chamadas via um Web Browser ou seja em qualquer request HTTP deve-se seguir o procedimento normal de criaccedilatildeo de funccedilotildees no AP5 utilizando o AP5 IDE para a
ediccedilatildeo e para a compilaccedilatildeo
Note que no caso de funccedilotildees do usuaacuterio (User Function) o nome chamado na URL do Browser tambeacutem deveraacute conter o U_ no comeccedilo da funccedilatildeo por exemplo
httpservidoru_WebDemoapl
Configuraccedilatildeo Miacutenima Em toacutepico agrave parte eacute explicada toda a configuraccedilatildeo referente agrave seccedilatildeo http do Protheus Server A configuraccedilatildeo abaixo eacute a miacutenima necessaacuteria para executar o exemplo acima
[http]
Port=80
Path=(caminho absoluto de disco para arquivos publicados no servidor )
Environment=(nome do environment do Serber que seraacute utilizado para o processamento)
Para testar sua configuraccedilatildeo reinicie o server Protheus e chame via WebBrowser a url
httplocalhosttimeapl
Deveraacute ser mostrada no Browse o horaacuterio atual no formato hhmmss no Servidor pois este eacute o resultado da funccedilatildeo Advpl TIME()
O Protheus atendendo agrave requisiccedilotildees apl
Quando solicitado atraveacutes de um Web Browser um processamento de uma funccedilatildeo via link apl a funccedilatildeo solicitada deve ser responsaacutevel por abrir o ambiente necessaacuterio agraveo processamento conectar com o Banco de
Dados caso necessaacuterio realizar o processamento e retornar a String Html ao Web Browser
Este ambiente criado eacute fechado imediatamente apoacutes o teacutermino do processamento o que exige muito do Servidor da aplicaccedilatildeo em se tratando de uma aplicaccedilatildeo web com vaacuterios usuaacuterios efetuando acessos simultacircneos
Para atender com mais eficiecircncia agraves requisiccedilotildees de processamento de um projeto web foi implementada no Protheus a tecnologia de Working Threads explicada em mais detalhes no toacutepico Desenvolvimento de
Funccedilotildees apw
05 Desenvolvimento de Funccedilotildees APW
Revisatildeo 26042004
Abrangecircncia
Versatildeo 609 Versatildeo 710 Versatildeo 811
Diferenccedila de Funcionamento entre links APL e APW
Como visto em toacutepicos anteriores ao desenvolver uma funccedilatildeo para ser executada via link apl a funccedilatildeo deve ser responsaacutevel pela abertura do ambiente e inicializaccedilotildees necessaacuterias para um processamento qualquer e
apoacutes ser finalizado este processamento o ambiente montado e utilizado eacute fechado automaticamente de modo que cada requisiccedilatildeo de processamento de usuaacuterio atraveacutes de link apl iraacute iniciar uma nova Thread onde o
ambiente deveraacute ser preparado novamente A programaccedilatildeo neste tipo de ambiente exige muito do servidor Protheus
Visando dar perfornance agraves aplicaccedilotildees WEB desenvolvidas utilizando-se o Protheus foi criado link APW que utiliza um recurso do servidor Protheus conhecido como working threads Uma wortking thread eacute uma
configuraccedilatildeo especial de job que permite configurar umacutenuacutemero preacute-definido de Threads no Servidor as quais teratildeo o ambiente de execuccedilatildeo preparado e inicializado atraveacutes de uma funccedilatildeo Advpl onde cada working
5
thread eacute deixada na memoacuteria do servidor em modo de espera (stand-by) de modo que um usuaacuterio ao acessar um link apw o servidor Protheus iraacute direcionar a requisiccedilatildeo de processamento agrave uma working thread que
estiver em stand-by e apoacutes o processamento ser efetuado e o HTML ser retornado ao Browser a working thread retorna novamente ao estado de stand-by voltando a estar disponiacutevel para atender agrave uma nova
requisiccedilatildeo do mesmo ou de outro usuaacuterio navegando no site aplicaccedilatildeo Web
A utilizaccedilatildeo de Working Threads exige a definiccedilatildeo miacutenima de duas funccedilotildees Advpl que seratildeo executadas em dois momentos distintos A primeira funccedilatildeo eacute responsaacutevel pela inicializaccedilatildeo do ambiente comum de
execuccedilatildeo de requisiccedilotildees devendo estabelecer conexatildeo com a Base de Dados utilizada abrir as tabelas utilizadas no Site e preparar as variaacuteveis comuns de utilizaccedilatildeo da aplicaccedilatildeo A segunda funccedilatildeo seraacute responsaacutevel
por encapsular a requisiccedilatildeo do usuaacuterio realizada a partir do Web Browse Ela receberaacute como paracircmetro o nome do link digitado e macro-executar a funccedilatildeo correspondente realizando o tratamento de erro e retorno
Deste modo um ambiente uma vez inicializado natildeo eacute fechado e pode ser utilizado por vaacuterios usuaacuterios que estatildeo navegando no Site o que viabiliza um grande ganho em perfoemance e carga do Servidor
Tipos de Working Threads
Existem dois tipos de Working Threads configuraacuteveis no Protheus a Working Thread WEB e a Working Thread WEBEX ( abreviaccedilatildeo de WEB EXtended ) Ambas possuem basicamente o mesmo princiacutepio de
funcionamento poreacutem o que muda entre ambas eacute a recepccedilatildeo de paracircmetros e a utilizaccedilatildeo de Sessions nativas do Server Protheus Para visualizarmos melhor estas diferenccedilas vejamos com um detalhe um pouco maior
os modelos de funccedilatildeo de inicializaccedilatildeo de ambiente e conexatildeo para ambas as configuraccedilotildees de Working Threads WEB e WEBEX
Working Threads WEB
Para nos utilizarmos das Working Threasd WEB devemos criar as funccedilotildees responsaacuteveis pela inicializaccedilatildeo de ambiente e a funccedilatildeo de conexatildeo
A funccedilatildeo de inicializaccedilatildeo de ambiente natildeo recebe paracircmetro algum realizar a preparaccedilatildeo do ambiente comum de execuccedilatildeo de requisiccedilotildees e deve retornar um valor booleano (T) verdadeiro caso o ambiente tenha sido
inicializado com sucesso ou (F) falso no caso de alguma condiccedilatildeo ou erro que torne o ambiente montado por esta thread natildeo operacional caso este em que a Thread eacute removida da memoacuteria apoacutes a inicializaccedilatildeo
A funccedilatildeo de conexatildeo recebe os mesmos seis paracircmetros de uma funccedilatildeo chamada via link apl e um seacutetimo parametro String que conteacutem apenas o nome da funccedilatildeo chamada no link Por exemplo a chamada de um
link httplocalhostu_testeapw no seacutetimo paracircmetro da funccedilatildeo de conexatildeo a string u_teste A funccedilatildeo de conexatildeo deve ter tratamento de erro proacuteprio e diferenciado e sempre deveraacute retornar um conteuacutedo do tipo
String
Working Threads WEBEX Para nos utilizarmos das Working Threasd WEBEX devemos tambeacutem criar as funccedilotildees responsaacuteveis pela inicializaccedilatildeo de ambiente e a funccedilatildeo de conexatildeo
A funccedilatildeo de inicializaccedilatildeo comporta-se de maneira idecircntica a de inicializaccedilatildeo WEB natildeo recebendo paracircmetro algum e devendo retornar um valor booleano (T) verdadeiro caso o ambiente tenha sido inicializado com
sucesso ou (F) falso no caso de alguma condiccedilatildeo ou erro que torne o ambiente montado por esta thread natildeo operacional caso este em que a Thread eacute removida da memoacuteria apoacutes a inicializaccedilatildeo
A funccedilatildeo de conexatildeo natildeo recebe diretamente paracircmetro algum Isso mesmo Todos os paracircmetros recebidos em versotildees anteriores atraveacutes de Arrays satildeo recebidos agora por Alias Virtuais de alta velocidade
HttpGet
HttpPost
HttpCookies
HttpHeadIn
Cada um destes alias virtuais eacute responsaacutevel respectivamente pela recepccedilatildeo de paracircmetros via GET POST COOKIES e Header HTTP da requisiccedilatildeo
Tambeacutem foram implementados os Alias virtuais HttpHeadOut e HttpSession para respecrivamente permitir alterar ou adicionar informaccedilotildees do Header HTTP de retorno de processamento de uma requisiccedilatildeo e
utilizaccedilatildeo de variaacuteveis tipo SESSION por usuaacuterio Web Estes recursos satildeo detalhados nos toacutepicos WEBEX - Detalhamento de Operaccedilatildeo e posteriores
O Futuro das aplicaccedilotildees WEB no Protheus
Apoacutes o desenvolvimento de aplicaccedilotildees em ambiente WEBEX e dados os oacutetimos resultados obtidos recomenda-se fortemente que as aplicaccedilotildees web desenvolvidas utilizando-se o Protheus Server sejam escritas em
conformidade para a utilizaccedilatildeo dos recursos WEBEX
Para facilitar tal desenvolvimento em paralelo agrave tecnologia disponibilizada na aplicaccedilatildeo jaacute estaacute integrada com a Infra-Estrutura disponiacutevel no repositoacuterio padratildeo do Microsiga Protheus 8 as funccedilotildees da Infra-Estrutura
ApWebEx escritas e publicadas para melhor atender agraves necessidades comuns verificadas no decorrer do desenvolvimento de uma aplicaccedilatildeo Web
Os recursos disponiacuteveis nesta lib estatildeo documentados nos toacutepicos Infra-Estrutura APWEBEX e posteriores englobando comandos funccedilotildees exemplos e dicas de utilizaccedilatildeo destes recursos
6
06 Configurando o Server Protheus para HTTP
Revisatildeo 28042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
As configuraccedilotildees de http do Server Protheus permitem a configuraccedilatildeo de sites estaacuteticos e dinacircmicos com a criaccedilatildeo de um ou mais hosts de acesso criaccedilatildeo de pastas virtuais e dites dinacircmicos com resposta para links
apl e apw simultaneamente Neste documento abrangeremos um resumo exemplificado das configuraccedilotildees HTTP do Server Protheus As seccedilotildees abaixo devem ser inseridas no arquivo de configuraccedilotildees do servidor
Protheus ( mp8srvini )
Configuraccedilatildeo Miacutenima [http]
Enable=1
Path=cAp_Datahttp
Observaccedilatildeo Vale lembrar que apoacutes ter inserido a configuraccedilatildeo do [http] no INI do Protheus eacute importante baixar o Server e subir novamente
Com esta configuraccedilatildeo habilitamos o Server Protheus como um servidor de arquivos e paacuteginas estaacuteticas com o HTTP na porta padratildeo (80) e utilizando o diretorio em cAp_dataHttp como diretoacuterio raiz de
publicaccedilotildees WEB Como natildeo haacute configuraccedilatildeo de host especiacutefica um arquivo nesta pasta poseraacute ser acessado atraveacutes dos hosts httplocalhost ( desde que o browse seja aberto na estaccedilatildeo servidora )
httpnnnnnnnnnnnn ( IP da estaccedilatildeo servidora ) ou httpxxxxxxxxxx ( nome da estaccedilatildeo servidora ) Por exemplo Dentro da pasta configurada na chave PATH do HTTP crie um arquivo chamado defaulthtm
com o seguinte conteuacutedo ( pode ser criado inclusove com o notepad )
lthrgt
Ola Mundo HTTP
lthrgt
Agora abra um Web Browser no mesmo equipamento e digite na url httplocalhost Ao acessar esta url deveraacute ser mostrado na tela do Browse huas barras horizontais e o texto Ola Mundo HTTP entre elas
Atendendo agrave requisiccedilotildees apl
Agora vamos habilitar este host para atender agrave requisiccedilotildees de funccedilotildees atraveacutes de link apl Para tal precisamos apenas do nome de um Environment (ambiente) configurado no INI Podemos usar o proacuteprio ambinete
do ERP Basta acrescentarmos na seccedilatildeo http a chave Environment=ltnome_do_ambientegt para que este ambiente passe a atender agraveo processamento de funccedilotildees Advpl atraveacutes de links apl Por exemlo caso o
ambiente configurado para o ERP chame-se EnvADS710 basta acrescentar na seccedilatildeo http a chave Environment=EnvADS710 O INI ficaria conforme abaixo
[http]
Enable=1
Path=cAp_Datahttp
Environment=EnvADS710
Para testar a execuccedilatildeo de funccedilotildees abra um Web Browse na estaccedilatildeo servidora e acesse o link httplocalhosttimeapl IStoacuteiraacute executar a funccedilatildeo Advpl TIME() que retornaraacute ao Browse uma string contendo o
horaacuterio atual no servidor no formato HHMMSS
Atendendo agrave requisiccedilotildees apw
A configuraccedilatildeo para atendimento de requisiccedilotildees de processamento http atraveacutes de links apw envolve a criaccedilatildeo de uma nova seccedilatildeo no INI com um nome natildeo-especiacutefico para configurar o tipo de job que iraacute executar o
processamento ( WEB ou WEBEX ) juntamente com as funccedilotildees responsaacuteveis pela inicializaccedilatildeo e conexatildeo das Threads Advpl e na seccedilatildeo http configuramos uma chave chamada ResponseJob apontando para a seccedilatildeo
de configuraccedilatildeo do JOB
Por exemplo para configurarmos o atendimento de requisiccedilotildees apw em um ambiente ERP utilizando a infra-estrutura APWEBEX vamos criar uma seccedilatildeo chamada ERP_APWEBEX apontando para as funccedilotildees da
Infra-Estrutura APWEBEX correspondentes
[ERP_APWEBEX]
type=WEBEX
onstart=STARTWEBEX
onconnect=CONNECTWEBEX
Environment=EnvADS710
Instances=13
SigaWeb=MAK
Atraveacutes desta configuraccedilatildeo especificamos um Job do tipo WEBEX onde a funccedilatildeo de inicializaccedilatildeo utilizada seraacute a STARTWEBEX a funccedilatildeo de conexatildeo seraacute a CONNECTWEBEX ( ambas da Infra-estrutura
APWEBEX ) que utilizaratildeo o ambiente AnvADS710 para processamento e seratildeo colocadas no ar apenas uma Working Thread para atendimento de processamento ateacute o maacuteximo de 3 Threads As threads colocadas
no ar acima do nuacutemero miacutenimo ( no exemplo apenas 1 ) satildeo colocadas on-demand caso sejam realizadas requisiccedilotildees apw ao Servidor e natildeo hajam Working Threads dispoviacuteveis no momento e o nuacutemero de Working
Threads no ar ainda natildeo tenha atingido o maacuteximo definido Atraveacutes da configuraccedilatildeo SigaWeb=MAK informamos ao sistema que a mesma estaacute sendo utilizada para o desenvolvimento de um moacutedulo especiacutefico e natildeo
estamos utilizando um moacutedulo Web da ferramenta Protheus 8 Caso a configuraccedilatildeo SigaWeb natildeo seja informada o valor MAK eacute assumido como default
Agora para que esta seccedilatildeo de Jobs seja utilizada para o atendimento efetivo de requisiccedilotildees apw devemos estecificaacute-la na seccedilatildeo http atraveacutes da chave REsponseJob No caso inserimos a chave
ResponseJob=ERP_APWEBEX fincando a seccedilatildeo HTTP conforme abaixo
[http]
Enable=1
Path=cAp_Datahttp
Environment=EnvADS710
ResponseJob=ERP_APWEBEX
Como as requisiccedilotildees via apl e via apw satildeo independentes eacute possiacutevel configurar a seccedilatildeo http para que Environments diferentes respondam agrave requisiccedilotildees apl e apw ou que natildeo sejam atendidas requisiccedilotildees apl
apenas apw
Configurando a seccedilatildeo http para multi-host Todas as configuraccedilotildees acima vistas pertencem agrave seccedilatildeo default do HTTP De modo que tanto faz acessarmos o servidor pelo nome como pelo IP que o resultado serraacute o mesmo Poreacutem para a utilizaccedilatildeo de demais
recursos como diretoacuterios virtuais e mais de um site no mesmo servidor precisamos configurar um host de acesso
Por exemplo vamos criar uma configuraccedilatildeo de HOST para que o servidor caso seja acessado pelo NOME da maquia via HTTP seja visualizado um outro site e apenas sejam atendidos agrave links apl Para isso
devemos criar uma nova seccedilatildeo no INI cujo nome deve ser exatamente o host que seraacute acessado ( como o exemplo vamos supor que o servidor de testes chama-se srvteste ) logo devemos criar uma seccedilatildeo com este
nome
Nesta seccedilatildeo do INI devemos no miacutenimo especificar um Path de acesso agraveos arquivos e as demais configuraccedilotildees vistas ateacute agora da seccedilatildeo http satildeo opcionais A configuraccedilatildeo PORT do HTTP em um host natildeo eacute
suportada Natildeo eacute possiacutevel subir um server protheus em mais de uma porta HTTP
[srvteste]
Path=cAp_DataTestes
Environment=EnvTOP710
Deste modo caso o servidor seja acessado via http atraveacutes de LOCALHOST ou do IP do Server seraacute permitido o acesso agraves funcionalidades configuradas na seccedilatildeo HTTP Caso seja acessado via nome do servidor (
httpsrvteste ) seratildeo acessados os arquivos de outra pasta e as requisiccedilotildees apl seratildeo atendidas pelo Ambiente EnvTOP710
Utilizando este tipo de configuraccedilatildeo podemos subir vaacuterios sites diferentes na mesma aplicaccedilatildeo servidor Protheus cada qual com o seu diretoacuterio raiz de publicaccedilotildees seus ambientes independentes atendendo ou nacirco agrave
requisiccedilotildees apl eou apw
Configurando diretoacuterios virtuais
Ao configurar um host especiacutefico podemos acrescentar ao mesmo uma barra seguido de um nome para acesso agrave um diretoacuterio virtual criando desse modo um endereccedilo de acesso composto por um host e um
diretoacuterio que pode se comportar como um outro site com os arquivos publicados em um path especiacutefico que poderaacute atender requisiccedilotildees de links apl eou apw sob um outro ambiente e configuraccedilatildeo distinta
Utilizando diretoacuterios virtuais eacute possiacutevel dentro do mesmo host instalar vaacuterias aplicaccedilotildees web independentes todas acessiacuteveis sob o mesmo endereccedilotilde base alterando apenas o diretoacuterio de acesso Por exemplo
utilizando como host principal o nome do equipamento servertst podemos instalar o moacutedulo Web Portal Protheus sob o host servertstportal o moacutedulo TCF sob o host servertstrhonline e no host servertst
podemos configurar um site estaacutetico em Html com uma apresentaccedilatildeo institucional e links para os demais moacutedulos
Observaccedilotildees Importantes
Ao configurarmos um Host ele herda as configuraccedilotildees de atendimento de requisiccedilotildees apl e apw especificados na seccedilatildeo HTTP De modo que o host do exemplo continuaraacute a atender requisiccedilotildees apw poreacutem no
ambiente EnvADS710
Visto desta forma recomendamos fortemente que a seccedilatildeo [http] possua apenas especificado um Path em disco que esteja vazio e seja criada uma ou mais configuraccedilotildees de host com as suas devidas propriedades
especificas
Todas as demais chaves relacionadas agrave configuraccedilatildeo HTTP e aos Jobs WEB e WEBEX satildeo opcionais para atender agrave necessiades especiacuteficas Estas chaves estatildeo explicadas em maiores detalhes no DEM na seccedilatildeo
XXX
Configurando diretoacuterios virtuais Da mesma forma que a criaccedilatildeo de hosts podemos criar um novo host utilizando a barra de divisatildeo para especiicar uma pasta virtual quue permite a flexibilidade de termos uma pasta dentro de um mesmo host que
se comporte como um outro host Ainda baseando-se no INI montado nestes exemplos para o servidor de testes vamos supor que exista uma pasta no disco ( por exemplo cAp_dataDocs ) que contenha arquivos
HTML de uma documentaccedilatildeo que deve estar disponccedilivel na web utilizando tambeacutem o host httpsrvteste Poreacutem o host srvteste jaacute aponta para o diretoacuterio cAp_dataTestes
Com o recurso de criaccedilatildeo de diretorio virtual no HTTP criamos apenas uma nova entrada do mesmo host colocando no nome do mesmo uma barra de divisatildeo seguido do nome de uma pasta a ser acessada via
HTTP ( que natildeo precisa necessariamente existir no disco) e dentro desta seccedilatildeo acrescentar a chave path apontando para o diretoacuterio desejado da mesma maneira utilizada para configurar um host
No exemplo abaixo criamos a pasta virtual info dentro do host srvteste apontando para o path do disco cAp_DataDocs De modo que ao ser acessado via url o endereccedilo httpsrvtesteinfo a partir dele seratildeo
acessados os arquivos da pasta cAp_DataDocs
[srvtesteinfo]
Path=cAp_DataDocs
Vejamos agora como ficou o nosso arquivo INI com todas as configuraccedilotildees acima exemplificadas
Configuiracao de Working Threads usando a infra-estrutura APWEBEX
[ERP_APWEBEX]
type=WEBEX
onstart=STARTWEBEX
onconnect=CONNECTWEBEX
Environment=EnvADS710
Instances=13
Configuraccedilatildeo da seccedilatildeo httpo default para atender agrave requisiccedilotildees de apl e apw
[http]
7
Enable=1
Path=cAp_Datahttp
Environment=EnvADS710
ResponseJob=ERP_APWEBEX
SigaWeb=MAK
Configuraccedilatildeo do host srvteste para atender requisiccedilotildees via apl atraveacutes do environment EnvTOP710
[srvteste]
Path=cAp_DataTestes
Environment=EnvTOP710
Configuraccedilatildeo da pasta virtual info no host srvteste para apontar para um path no disco com documentos
[srvtesteinfo]
Path=cAp_DataDocs
Infra-Estrutura APWEBEX
Revisatildeo 27042004
Abrangecircncia
Versatildeo 811
A Infra-Estrutura APWEBEX Visando o melhor aproveitamento da tecnologia de working threads implementada no servidor Protheus para o processamento de requisiccedilotildees de uma aplicaccedilatildeo web foram desenvolvidas funccedilotildees de apoio miscelacircnea
e infra-estrutura compiladas no repositoacuterio padratildeo de Infra-Estrutura do ERP Microsiga visando simplificar e auxiliar o desenvolvimento de uma soluccedilatildeo web A este conjunto de funccedilotildees demos o nome de Lib de
Infra-Estrutura APWEBEX que engloba atualmente os tratamentos comuns agraves funccedilotildees de inicializaccedilatildeo de ambiente e conexatildeo ( atendimento de requisiccedilotildees http via link apw ) com seus respectivos pontos de
entrada comandos e funccedilotildees de miscelacircnea comuns agraveos projetos de soluccedilotildees web integradas com o ERP
Como utilizar este recurso no desenvolvimento de soluccedilotildees
As funccedilotildees pertinentes agrave Infra-Estrutura APWEBEX jaacute estatildeo implementadas no repositoacuterio padratildeo da ferramenta Protheus 8 e os comandos especiacuteficos que envolvem este recurso encontram-se no arquivo header
apwebexch disponibilizado tambeacutem jonto com a ferramenta Protheus 8
A utilizaccedilatildeo destes recursos para integraccedilatildeo de aplicaccedilotildees envolve a leitura desta documentaccedilatildeo onde seraacute visto com maiores detalhes as possibilidades de uso da ferramenta como a integraccedilatildeo de uma aplicaccedilatildeo Web
com um ambiente e funcionalidades do ERP Microsiga
Como usufruir desta documentaccedilatildeo Todos os toacutepicos pertencentes agrave este grupo satildeo direcionados agraveo desenvolvimento de soluccedilotildees web utilizando as funccedilotildees de Infra-Estrutura APWEBEX aleacutem de ser explicado com detalhes o funcionamento da
tecnologia WEBEX do Protheus e dos recursos nativos da ferramenta englobando os comandos e funccedilotildees publicados exemplos de coacutedigos Advpl utilizando estes recursos configuraccedilatildeo da ferramenta e mensagens de
ocorrecircncias de erro das funccedilotildees e comandos com possiacuteveis causas e soluccedilotildees
Eacute fortemente recomendado que os documentos constantes neste grupo fossem apreciados antes de aprofundar-se nas informaccedilotildees dos proacuteximos toacutepicos
01 Recepccedilatildeo de paracircmetros por Alias Virtuais
Revisatildeo 30042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
A recepccedilatildeo de paracircmetros vindos do Web Browser quando utilizamos Working Threads do tipo WEBEX atraveacutes de links apw eacute realizada atraveacutes de Alias Virtuais especiacuteficos ao inveacutes de receber as informaccedilotildees
GET POST e HEADER em array quando executamos a chamada atraveacutes de link apl A nomenclatura de Alias Virtual foi adotada pois a sintaxe do coacutedigo-fonte eacute exatamente a mesma utilizada quando desejamos
acessar um campo de uma tabela aberta atraveacutes de um alias
Em um ambiente montado para atender agrave requisiccedilotildees via link apw utilizando Working Threads WEBEX podemos nos utilizar dos seguintes alias virtuais
HttpCookies
HttpGet
HttpPost
HttpHeadIn
HttpHeadOut
HttpSession
HttpCookies Atraveacutes do alias virtual HttpCookies eacute possiacutevel consultar os Cookies do Header Http enviados pelo Browser e criar ou alterar o conteuacutedo de um cookie a ser devolvido agraveo Browser Um cookie visto de forma geral eacute
um paracircmetro ao qual atribuiacutemos um nome que uma vez devolvido agraveo Browse solicitante eacute re-enviado ao Protheus a partir da proacutexima requisiccedilatildeo realizada pelo Browser
HttpGet
Para receber os paracircmetros enviados atraveacutes da URL (meacutetodo GET do HTTP) jaacute devidamente convertidos e tratados utilizamos o alias virtual HttpGet onde acessamos pelo nome a propriedade desejada e caso a
mesma tenha sido enviada pelo Browser a mesma eacute retornada como uma String
HttpPost Para receber os paracircmetros submetidos (enviados) pelo Browser atraveacutes do meacutetodo POST jaacute devidamente convertidos e tratados utilizamos o alias virtual HttpPost onde acessamos pelo nome a propriedade desejada
e caso a mesma tenha sido enviada pelo Browser a mesma eacute retornada como uma String
HttpHeadIn
Para a recepccedilatildeo e tratamento das informaccedilotildees recebidas atraveacutes do Header do pacote HTTP foi criado o alias virtual HttpHeadIn que aleacutem de consultar as informaccedilotildees constantes no Header HTTP proveinente da
requisiccedilatildeo do usuaacuterio permite tambeacutem acesso agrave propriedades da conexatildeo atual do usuaacuterio como o IP do usuaacuterio solicitante por exemplo
HttpHeadOut Atraveacutes deste alias virtual de retorno podemos alterar ou criar um paracircmetro no Header de retorno HTTP do Protheus a ser devolvido agraveo Browser solicitante de uma requisiccedilatildeo de processamento
HttpSession O alias virtual HttpSession foi criado para possibilitar a criaccedilatildeo de variaacuteveis session por usuaacuterio do site com controle de identificaccedilatildeo nativa da ferramenta atraveacutes de um cookie de identificaccedilatildeo chamado
SESSIONID No toacutepico Alias Virtual HttpSession eacute explicado em detalhes o funcionamento deste mecanismo
Este recurso nos permite criar atricuir conteuacutedo e consultar conteuacutedo de uma variaacutevel relacionada agraveo usuaacuterio que estaacute realizando uma requisiccedilatildeo http Podemos armazenar em uma variaacutevel de Session os seguintes
tipos de variaacuteveis A (array) C (character) D (data) L (loacutegica) e N (numeacuterica) Natildeo satildeo suportados O (Objetos) eou B (Code Blocks)
Limitaccedilotildees de uso dos alias virtuais para recebimento de paratildemetros
Dadas as caracteriacutesticas operacionais e de acesso agraveos alias virtuais devemos estar atentos agrave nomenclatura de campos de um formulaacuterio HTML para serem recuperados com sucesso pelos alias virtuais correspondentes
A nomenclatura de campos do formulaacuterio deve obedecer agrave regra de criaccedilatildeo de variaacuteveis em Advpl O campo do formulaacuterio deve sempre ser iniciado com um caracter alfabeacutetico pode conter letras ou algarismos no
nome e o caracter _ ( underline ) Natildeo satildeo permititos espaccedilotildes hiacutefen ou caracteres acentuados como nome de um campo Caso utilizado um nome de campo fora do padratildeo suportado o conteuacutedo do mesmo natildeo seraacute
recuperaacutevel em Advpl
8
02 Alias virtual HttpCookies
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpCookies eacute possiacutevel consultar os Cookies do Header Http enviados pelo Browser e criar ou alterar o conteuacutedo de um cookie a ser devolvido agraveo Browser Uma variaacutevel de Cookie retorna um
tipo Advpl String e apenas aceita uma atruibuiccedilatildeo de String Vale lembrar tambeacutem que um cookie eacute um recurso do Browser que estaacute realizando a requisiccedilatildeo e existe um limite de tamanho para o total de Cookies
utilizados Este limite costuma ser proacuteximo a 1024 Bytes
Trata-se portanto de uma propriedade de leitura e gravaccedilatildeo dispniacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Utilizaccedilatildeo de Cookies
A utilizaccedilatildeo de Cookies tecircm objetivo praacutetico restrito agrave aplicaccedilotildees onde haja a necessidade impliacutecita de termos uma informaccedilatildeo relacionada agraveo browser utilizado pelo usuaacuterio atual que devam ser interpretadas
independente do usuaacuterio estar logado ou natildeo ( isto eacute independam diretamente de sessions )
Um exemplo praacutetico disto eacute o desenvolvimento de um site onde o conteuacutedo dinacircmico eacute retornado ao usuaacuterio em mais de um idioma Na entrada do site apresentamos um formulaacuterio ao usuaacuterio onde o mesmo iraacute
escolher o idioma de sua preferecircncia Mesmo que a session de login deste usuaacuterio expire no servidor o cookie com o idioma selecionado ainda estaacute no Browser de modo que a proacutexima requisiccedilatildeo do usuaacuterio pode ser
codificada para direcionaacute-lo para a paacutegina de login do site com as mensagens no idioma que o mesmo jaacute estava navegando
Lendo o valor de um Cookie
Atraveacutes dos exemplos abaixo lemos o valor do Cookie de identificaccedilatildeo do uacutesuaacuterio e um cookie de usuaacuterio criado para identificar no Browse qual eacute o idioma utilizado pelo usuaacuterio atual
cUserId = HttpCookies-gtUSERID Retorna o Cookie identificador do usuaacuterio do Protheus
cIdioma = HttpCookies-gtSiteLang Retorna o conteuacutedo do cookie SiteLang criado
Lendo todos os Cookies recebidos
O alias virtual HttpCookie possui uma propriedade chamada aCookies criada apenas para consulta (read-only) que retorna um Array Advpl de Strings contendo os nomes dos Cookies enviados pelo Browser agraveo
Protheus Por exemplo
aInfo = HttpCookies-gtaCookies
For nI = 1 to len(aInfo)
Mostra no console do Server todos os cookies recebidos
conout(Cookie +str(nI3)+ = + aInfo[nI])
Next
Criando um Cookie
A criaccedilatildeo de um Cookie eacute realizada atraveacutes da atrubuiccedilatildeo de um valor diretamente agraveo cookie desejado Por exemplo
HttpCookies-gtMeuCookie = TESTE
A criaccedilatildeo de um Cookie merece uma atenccedilatildeo especial pois um Cookie eacute retornado agraveo browser atraveacutes do Header de Retorno HTTP De modo que para que a criaccedilatildeo de um cookie seja realizada com sucesso o
mesmo deve ser criado antes de haver qualquer processamento de APH AHU caso este que natildeo seria mais possiacutevel a criaccedilatildeo do Cookie pois o Header de Retorno HTTP jaacute teria sido enviado agraveo browser solicitante
03 Alias virtual HttpGet
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpGet podemos consultar se uma determinada propriedade nos foi enviada atraveacutes da URL ( meacutetodo GET )
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos realizar uma requisiccedilatildeo a um link apw
passando pela URL o paracircmetro IMAGEM com o conteacuteuacutedo TESTE
httplocalhostu_TesteGetapwimagem=testeampcor=azul
Para recuperarmos em Advpl o conteuacutedo dos paracircmetros imagem e cor utilizamos
cImagem = HttpGet-gtimagem
cCor = HttpGet-gtcor
Podemos inserir tambeacutem um tratamento default Caso algum paracircmetro natildeo seja enviado ( resulte NIL ) assumimos um valor para o mesmo
DEFAULT cImagem = LogoAp8
DEFAULT cCor = amarelo
Existe tambeacutem uma propriedade do alias virtual HttpGet chamada aGets onde podemos recuperar um array de strings contendo a lista com os nomes dos paracircmetros enviados pelo browser solicitante Por exemplo
aInfo = HttpGet-gtaGets
For nI = 1 to len(aInfo)
conout(GET +str(nI3)+ = +aInfo[nI])
Next
04 Alias virtual HttpPost
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpPost podemos consultar os campos submetidos agraveo servidor atraveacutes do meacutetodo POST
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro
O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos realizar uma requisiccedilatildeo a um link apw
atraveacutes de um formulaacuterio html com meacutetodo POST partindo do Html abaixo
lthtmlgtltbodygt
ltform method=POST action=httplocalhostu_TstPostapwgt
Teste ltinput type=text name=CODIGO size=10gt
lthrgt
ltinput type=submitgt
ltformgt
ltbodygtlthtmlgt
Para recuperarmos em Advpl o conteuacutedo do campo CODIGO utilizamos
cCodigo = HttpPOST-gtCodigo
Existe tambeacutem uma propriedade do alias virtual chamada aPost onde podemos recuperar um array de strings contendo a lista com os nomes dos paracircmetros enviados pelo browser solicitante Por exemplo
aInfo = HttpPost-gtaPost
For nI = 1 to len(aInfo)
conout(POST +str(nI3)+ = +aInfo[nI])
Next
05 Alias virtual HttpHeadIn
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpHeadIn podemos consultar os paracircmetros enviados pelo Browser solicitante enviados atraveacutes do Header HTTP ao realizar uma requisiccedilatildeo ao Protheus Server
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos consultar o header http User-Agent
enviado pelo Browser solicitante contendo uma String identiificando o modelo de Browser utilizado
cUserAgent = Httpheadin-gtUser_Agent
Devemos obter como retorno uma string parecida com a mostra abaixo
Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)
Observaccedilatildeo Importante Qualquer paracircmetro no Header HTTP que contenha um ou mais caracteres invaacutelidos para a nomenclatura de variaacuteveis Advpl ( como por exemplo o User-Agent que conteacutem um hiacutefen ) satildeo trocados pelo caractere _
underline para ser possiacutevel a leitura da propriedade
Propriedades especiais
HttpHeadIn-gtaHeaders
Retorna um Array de Strings contendo todas as linhas do Header HTTP da requisiccedilatildeo
HttpHeadIn-gtmain
Retorna o nome da funccedilatildeo chamda atraveacutes da URL sem a extensatildeo e sem o host Por exemplo ao chamar o link httplocalhostu_tstHEaderapw o conteuacutedo de HttpHeadin-gtmain seraacute u_tstHEader
9
HttpHeadIn-gtREMOTE_ADDR
Retorna uma string no formato nnnnnnnnnnnn o IP da estaccedilatildeo que realizou a requisiccedilatildeo
httpHeadIn-gtREMOTE_PORT
Retorna um valor Advpl numeacuterico informando a porta utilizada para realizar a requisiccedilatildeo
06 Alias virtual HttpHeadOut
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 LIB WEBEX
Atraveacutes deste alias virtual de retorno podemos alterar ou criar um paracircmetro no Header de retorno HTTP do Protheus a ser devolvido agraveo Browser solicitante de uma requisiccedilatildeo de processamento
Trata-se portanto de uma propriedade de retorno disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
A criaccedilatildeo de uma linha no Header HTTP merece uma atenccedilatildeo especial pois para que a operaccedilatildeo realizada com sucesso o header deve ser criado antes de haver qualquer processamento de APH AHU pois neste caso
o Header de Retorno HTTP jaacute teria sido enviado agraveo browser solicitante
07 Alias virtual HttpSession
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual httpSession podemos criar e consultar variaacuteveis do tipo session relacionadas agraveo usuaacuterio que realizou a requisiccedilatildeo atraveacutes do Browser
Para diferenciar os usuaacuterios que estatildeo navegando num site o Protheus busca por um cookie identificador de usuaacuterio retornado para o browser a cada requisiccedilatildeo de link APW chamado SESSIONID Caso o Protheus
receba este cookie ele identifica quais sessions pertencem a este usuaacuterio
Quando um usuaacuterio realiza a primeira requisiccedilatildeo http ao Protheus o Protheus natildeo recebe o cookie identificador e automaticamente inicializa um identificador de sessions para o mesmo retornando o identificador ao
Browser via Header HTTP Este identificador pode ser recuperado em uma funccedilatildeo advpl atraveacutes de httpSession-gtSESSIONID
Quando criamos uma variaacutevel de session ela pode ser acessada nas proacuteximas requisiccedilotildees provenientes deste mesmo usuaacuterio Caso uma variaacutevel de session consultada natildeo exista ela retorna o valor NIL (nulo)
Vejamos os exemplos abaixo
Criando variaacuteveis Session HttpSession-gtUserId = 123
HttpSession-gtUserName = U_GetUserName()
Nas linhas acima criamos uma session para o usuaacuterio atual chamada UserId com o conteuacutedo do tipo String e criamos outra session chamada UserName com o retorno da funccedilatildeo U_GetUserName()
Consultando variaacuteveis Session Ao consultar uma variaacutevel session sempre devemos prever que a mesma natildeo pode ter sido criada de modo que a consulta pode retornar NIL ou caso a session jaacute exista retornaraacute o valor do tipo que foi atribuiacutedo `a
mesma
If HttpSession-gtUserId = NIL
Session ainda natildeo foi criada Usuaacuterio natildeo estaacute logado
conout(Usuario natildeo estaacute logado)
Else
Session jaacute criada o usuaacuterio estaacute logado
conout(Usuario estaacute logado ID = + HttpSession-gtUserId )
Endif
Exemplo de Funcionamento de Session No exemplo abaixo criamos uma session para identificar quantas vezes o usuaacuterio chamou esta funccedilatildeo especiacutefica Damos o nome da session de MyCounter que iraacute conter um nuacutemero No primeiro acesso do usuaacuterio a
session natildeo existe ( = NIL ) e eacute criada com o valor numeacuterico 1 (um) A partir das proacuteximas requisiccedilotildees realizadas ao Protheus atraveacutes desta paacutegina ( atraveacutes do botatildeo Refresh do Browser por exemplo ) a session jaacute
existe sendo somado o valor 1 agraveo conteuacutedo jaacute existente e devolvido agraveo browser solicitante um Html informando quantas chamadas jaacute foram realizadas por este usuaacuterio
include rwmakech
include apwebexch
User Function TstSession()
Local cHtml = cEcho =
WEB EXTENDED INIT cHtml
If httpSession-gtmycounter = NIL
cEcho = Inicializando contador
Conout(cEcho)
cHtml += cEcho
httpSession-gtmycounter = 1
Else
httpSession-gtmycounter++
cEcho = contador em +str(httpSession-gtmycounter3)
conout(cEcho)
Endif
cHtml += cEcho + lthrgt
WEB EXTENDED END
Return cHtml
Apoacutes compilado o fonte acima e o Server Protheus configurado e iniciado com HTTP habilitado e as working Threads configuradas abra um Web Browser e solicite a url httplocalhostu_tstsessionapw Seraacute
mostrado no Browse a mensagem Inicializando Contador Agora peccedila um Refresh desta tela ao Browser Seraacute devolvida a mensagem Contador em 2 e a cada refresh deste Browser o contador seraacute
incrementado
Uso de Sessions e Paralelismo - Comportamento do Protheus Server
O Protheus Server trata agraves requisiccedilotildees simultacircneas de links APW em paralelo desde que estejam disponiacuteveis o numero de Working Threads necessaacuterio para tal Por exemplo em uma estrutura de Frames onde cada
um deles aponta o SRC (source) para um link apw o Browser envia as trecircs requisiccedilotildees de apw para o Protheus Server e caso extistam 3 working threads disponiacuteveis naquele momento as trecircs requisiccedilotildees satildeo
atendidas em paralelo
Por outro lado se em duas destas trecircs requisiccedilotildees faz-se necessaacuteria a atualizaccedilatildeo eou consulta a uma variaacutevel de Session ( httpsession ) este processamento em paralelo caso natildeo fosse tratado poderia gerar perdas
no conteuacutedo da session caso a mesma session fosse atualizada simultaneamente
Para resolver esta questatildeo de maneira a natildeo sobrecarregar o Servidor com solicitaccedilotildees de Processamento Sequencial ( Critical Sessions ) foi montado um esquema de Lock de Session de Usuaacuterio automaacutetico com
liberaccedilatildeo automaacutetica apoacutes o processamento do APW ou liberaccedilatildeo manual atraveacutes da chamada da funccedilatildeo HttpLeaveSession() antes do processamento ser terminado
Exemplificando a aplicaccedilatildeo praacutetica e funcionamento deste conceito partimos de um ambiente hipoteacutetico utilizando 3 frames onde um usuaacuterio realiza uma requisiccedilatildeo agrave funccedilatildeo que retornaraacute o source HTML da paacutegina
de frames e a mesma ao chegar no Browser faz o mesmo realizar as trecircs requisiccedilotildees simultaneamente todas elas referentes ao mesmo usuaacuterio Poreacutem o primeiro e o segundo frames realizam uma operaccedilatildeo qualquer
com uma ou mais variaacuteveis da Session do usuaacuterio e o terceiro frame realiza um outro processamento que natildeo depende da consulta de nenhuma variaacutevel da Session As trecircs requisiccedilotildees referente a este usuario seratildeo
processadas simultaneamente por working Threads diferentes ( vamos supor que naquele momento haviam trecircs Working Threads disponiacuteveis) poreacutem quando uma das duas working Threads que tentarem acesso agrave uma
variaacutevel de Session daquele usuaacuterio o Servidor verifica se alguma outra Thread estaacute com o flag de acesso agraves sessions deste usuario Se nenhuma outra thread em uso por este usuaacuterio estaacute com a bandeira entatildeo a
thread atual pega a bandeira para ela senatildeo o processamento da Thread eacute congelado no aguardo da liberaccedilatildeo da bandeira
A liberaccedilatildeo da bandeira ocorre automaticamente no retorno da Working Thread para o Browser antes da chamada do ponto de entrada para Reset do Ambiente atraveacutes da chamada na KlibEx da funccedilatildeo
HttpLeaveSession() Caso seja viaacutevel para o usuaacuterio liberar as sessions antes do retorno da funccedilatildeo ele pode utilizar-se da funccedilatildeo httpLeaveSession() no seu fonte sem necessariamente aguardar pelo encerramento
efetivo e reset de ambiente da Working Thread
Logo retornando ao exemplo acima os Frames 1 e 2 iratildeo concorrer pela banceira de atualizaccedilatildeo de conteuacutedo de sessions onde o primeiro frame que a ser executado pegaraacute a bandeira para ele e atualizaraacute a session e
o segundo frame iraacute esperar o primeiro liberar a bandeira para continuar a ser processado e o terceiro frame como natildeo utiliza nenhuma variaacutevel da session seraacute processado sem depender de nenhum dos outros dois
frames anteriores
Quando utilizamos ASP ( Microsoft Active Server Pages ) o mesmo realiza uma serializaccedilatildeo de requisiccedilotildees de paacuteginas ASP por usuaacuterio de modo que caso o mesmo usuaacuterio solicite trecircs frames asp as requisiccedilotildees
de processamento chegaratildeo ao Servidor ASP simultaneamente mas a bandeira de processamento eacute unica por paacutegina asp sendo liberada apenas apos o teacutermino do processamento da paacutegina de modo que mesmo que
nenhuma das paacuteginas faccedila uso de sessions todas as paacuteginas deste usuaacuterio seratildeo processadas em sequecircncia
08 Envio simultacircneo de HTML ao Browser
Revisatildeo 30042004
Abrangecircncia
10
Versatildeo 710 Versatildeo 811 LIB WEBEX
As aplicaccedilotildees web desenhadas para utilizar a Infra-Estrutura APWEBEX contam com o recurso de Envio simultacircneo de Html ao Browser durante o processamento de uma paacutegina Advpl-ASP ( APH eou AHU )
Este recurso eacute habilitado atraveacutes do Protheus IDE nas opccedilotildees de configuraccedilatildeo de compilaccedilatildeo do ambiente em questatildeo mais especificamente habilitado atraveacutes do CheckBox [ ] Exibir conteuacutedo do Advpl ASP
progressivamente no Browser
Ao habilitamos esta configuraccedilatildeo todos os arquivos APH e AHU satildeo parseados fazendo internamente o uso da funccedilatildeo HttpSend() de modo que mesmo antes do processamento estar concluiacutedo o Html gerado jaacute estaacute
sendo enviado agraveo Browser qoe o solicitou
A utilizaccedilatildeo deste recurso provecirc um ganho de performance subtancial na aplicaccedilatildeo final Todos os projetos desenvolvidos com esta tecnologia ( Infra-Estrutura APWEBEX ) devem ter esta configuraccedilatildeo de compilaccedilatildeo
habilitada no IDE Vale lembrar que caso este recurso natildeo esteja habilitado ao habilitaacute-lo os arquivos aph e ahu do projeto necessitam ser recompilados para que esta configuraccedilatildeo tenha o efeito desejado
Pode existir a necessidade de um processamento de um APH ou AHU natildeo enviar o script Html gerado diretamente ao Browser Para tal situaccedilatildeo podemos desabilitar temporariamente este recurso de envio de html
progressivo em tempo de execuccedilatildeo permitindo assim por exemplo uma funccedilatildeo chamar em sequecircncia dois arquivos APH um para gerar um conteuacutedo Html a ser enviado via e-mail armazenado em uma variaacutevel
Advpl e outro APH para a montagem de uma tela de status que seraacute enviada agraveo Browser solicitante
Para habilitar eou desabilitar o envio simultacircneo do Script HTML agraveo browser em tempo de execuccedilatildeo utilize a funccedilatildeo HttpSetPart()
09 Configuraccedilotildees especiacuteficas APWEBEX
Revisatildeo 26042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Ao utilizarmos as funccedilotildees de Infra-estrutura APWEBEX existem recursos da lib que exigem uma configuraccedilatildeo adicional para serem utilizados
Envio de e-mail automaacutetico atraveacutes da Rotina de Tratamento de Erro do Site
Em caso de erro fatal na aplicaccedilatildeo Web a proacutepria rotina de tratamento de erro pode ser configurada para enviar um e-mail agraveo Administrador do sistema Para tal eacute necessaacuterio inserir as chaves abaixo na seccedilatildeo
do ambiente em uso para o site
ErrorSMTP= (endereccedilo do servidor SMTP a ser usado para o envio do e-mail )
ErrorMail= ( um ou mais endereccedilos de e-mail a receber op e-mail de erro separados por virgula )
ErrorFrom= ( um e apenas um endereccedilo de e-mail a ser usado como remetente do aviso de erro )
ErrorLogin = ( nome de usuario de login no servidor de SMTP caso necessaacuterio )
ErrorPassword= ( senha do usuario de login no servidor de SMTP caso necessaacuterio )
WebAdmin - Login alternativo
A infra-estrutura APWEBEX exige um usuaacuterio e senha para entrar no moacutedulo de administraccedilatildeo WebAdmin Para validar o login eacute utilizado o arquivo de senhas do ERP O usuaacuterio deve ser o Administrador ou
pertencer ao grupo de administradores para ter acesso agraveo WebAdmin Caso natildeo seja viaacutevel usar este arquivo de senhas para validar o login podemos inserir uma chave adicional ( AdmLogin ) no Environment em uso
pela aplicaccedilatildeo Web e configurar nela a senha do usuaacuterio Administrador para login no WebAdmin Caso esta chave seja configurada o arquivo de senhas do ERP natildeo seraacute utilizado para validar o login no WebAdmin
AdmLogin= ( senha do Administrador para logar no WebAdmin )
Pasta alternativa para upload de Rpo via WebAdmin No WebAdmin eacute possiacutevel utilizar uma configuraccedilatildeo especiacutefica para a troca do repositoacuterio de objetos em uso no site sem que seja necessaacuterio parar o servidor para isso Por default a pasta de upload chama-se
SwapRPO e deve existir na estrutura de diretoacuterio do ambiente utilizado a partir do diretoacuterio raiz do ambiente ( RootPath )
RpoUpload= ( pasta de upload alternativa a partir do RootPath do ambiente )
10 Recomendaccedilotildees finais
Revisatildeo 17122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Para todo o desenvolvimento de soluccedilotildees temos em matildeos uma diversidade de recursos desenhados para melhor atender agraves necessidades e adequar-se agraves caracteristicas da aplicaccedilatildeo Dada a flexibilidade dos recursos
recomenda-se aos desenvolvedores adotarem um padratildeo de desenvolvimento e ter em foco a eficiecircncia da aplicaccedilatildeo final tanto no aspecto funcional como na codificaccedilatildeo
Lanccedilando matildeo da experiecircncia em desenvolvimento de aplicaccedilotildees web adquiridas nos uacuteltimos anos nos toacutepicos abaixo estatildeo relacionadas algumas medidas tomadas no desenvolvimento de aplicaccedilotildees que nos satildeo muito
uacuteteis no decorrer de um projeto
Nomenclatura de Funccedilotildees
Para o desenvolvimento de aplicaccedilotildees web foi criado o Statement WEB FUNCTION para a declaraccedilatildeo de funccedilotildees referentes agrave projetos web Este comando na praacutetica apenas prefixa a declaraccedilatildeo da funccedilatildeo com
W_ poreacutem a sua utilizaccedilatildeo identifica que a funccedilatildeo em questatildeo foi construiacuteda uacutenica e exclusivamente para ser chamada a partir de uma requisiccedilatildeo HTTP Em adendo agrave este devemos utilizar os comandos WEB
EXTENDED INIT END disponivels no Include apwebexch para proteger a funccedilatildeo de ser chamada em um ambiente que natildeo o APWEBEX
Separando a Interface do Processamento
Ao desenvolver utilizando Advpl ASP paacuteginas APH AHU recomenda-se separar o processamento da Interface do seguinte modo Criar uma Web Function para a chamdada de umna paacutegina com conteuacutedo
dinacircmico via link apw e um arquivo APH ou AHU de mesmo nome que seraacute chamado internamente de modo que o coacutedigo-fonte escrito na Web Function seja responsaacutevel para gerar as informaccedilotildees a serem
disponibilizadas para o usuaacuterio e o APH contenha apenas a maacutescara destas informaccedilotildees e o miacutenimo de instruccedilotildees Advpl possiacutevel para a montagem da paacutegina Este processo facilita a manutenccedilatildeo de amobos
os coacutedigos pois o Web Designer que iraacute realizar um ajuste no APH natildeo teraacute que desviar do fonte Advpl inserido na paacutegina e o Analista Programador que faraacute a manutenccedilatildeo no coacutedigo Advpl preocupar-se-aacute apenas
com o coacutedigo responsaacutevel para a geraccedilatildeo dos dados que seratildeo mascarados
Utilizaccedilatildeo das Funccedilotildees de Infra-Estrutura
Atraveacutes dos comandos e funccedilotildees disponibilizadas na Infra-Estrutura APWEBEX natildeo tecircmos a necessidade de recriar partes comuns de coacutedigo para todos os projetos que se utilizem desta tecnologia aleacutem de permitir
atraveacutes de pontos de entrada estrategicamente colocados na ferramenta um niacutevel altiacutessimo de customizaccedilatildeo para os projetos desenvolvidos com esta tecnologia de maneira praacutetica e objetiva
11 Monitoramento de Sites em WEBEX
Revisatildeo 17122003
Abrangecircncia
LIB WEBEX
O Objetivo de uma funccedilatildeo de Monitoramento de Sites eacute testar as funcionalidades baacutesicas de um site retornando uma mensagem HTML preacute-definida indicando que estaacute tudo certo e em caso de erro uma
mensagem que procure identificar o que estaacute de errado
Para sites desenvolvidos em Protheus utilizando a tecnologia WEBEX devemos criar uma funccedilatildeo especiacutefica para o site que iraacute determinar se o mesmo estaacute operacional Esta funccedilatildeo seraacute chamada atraveacutes de link
apw
Vejamos o exemplo abaixo escrito para um site cujas bases de dados estatildeo num SQL acessadas via TopConnect Neste exemplo a funccedilatildeo chamada seraacute httpservidorU_SiteMonitorapw e caso esteja tudo certo
ela retornaraacute a string (SITE OK) seguido da data e horaacuterio da execuccedilatildeo da rotina Qualquer retorno diferente disto poderaacute indicar uma anomalia no funcionamento do site
Quando hospedado um site utilizando esta tecnologia no DataCenter da Makira esta informaccedilatildeo gerada pela rotina deve ser passada agraveo depto de infra-estrutura que configuraraacute um software Monitor de Sites que iraacute
realizar a cada um minuto uma requisiccedilatildeo agrave url especificada e iraacute emitir um alerta ao Departamento para que seja verificado o site caso haja alguma falha na resposta include protheusch
include apwebexch
User Function SiteMonitor()
Local cQuery nQtdRec
Verifica se a working Thread estaacute conectada com o TOP
If TCIsConnected()
Return Working Thread perdeu a conexatildeo com o TOP
Endif
Verifica se as tabelas principais estatildeo abertas
If select(SA1)=0
Return Tabela SA1 natildeo estaacute aberta
Endif
If select(SC5)=0
Return Tabela SC5 natildeo estaacute aberta
Endif
Executa uma query de contagem de registros de uma tabela do sistema
cQuery = SELECT count() as QTDREC from SA1010
OPEN QUERY cQuery ALIAS TMPCOUNT
nQtdRec = TMPCOUNT-gtQTDREC
CLOSE QUERY TMPCOUNT
If nQtdRec=0
11
Return Falha na Contagem de registros Query SA1
Endif
Se estaacute tudo certo retorna um HTML informando que estaacute tudo OK
Return (SITE OK) +dtos(date())+ +time()
Comandos - CLOSE QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CLOSE QUERY cAlias
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAlias Caracter Alias sob o qual o cursor da Query foi aberto Caso o alias passado como paracircmetro natildeo se encontre aberto a funccedilatildeo natildeo gera nenhuma ocorrecircncia de
erro
Descriccedilatildeo
Atraveacutes do comando Close Query realizamos o fechamento de uma query aberta atraveacutes do comando OPEN QUERY
ATENCcedilAtildeO Uma query aberta pelo comando OPEN QUERY deve ser fechada pelo comando CLOSE QUERY Poderiacuteamos fechar o alias aberto atraveacutes de uma Query simplesmente com a funccedilatildeo
DbCloseArea() poreacutem isto deixaria em aberto elementos internos de controle criados pelo comando OPEN QUERY
Comandos - OPEN QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
OPEN QUERY ltcQuerygt ALIAS ltcAliasgt [ [NOCHANGE] ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcQuerygt Caracter cQuery corresponde agrave String contendo a Query a ser executada no banco de dados
ALIAS ltcAliasgt Caracter cAlias corresponde ao nome do alias sob o qual o cursor de retorno dos dados pesquisados seraacute aberto no ambiente Advpl Natildeo pode ser especificado
um nome de alias jaacute em uso senatildeo a aplicaccedilatildeo seraacute finalizada com a ocorrecircncia de erro Alias already in Use
[NOCHANGE] Caracter Caso especificada a claacuteusola NOCHANGE na abertura da query a string em cQuery natildeo seraacute submetida agrave funccedilatildeo ChangeQuery()
Descriccedilatildeo
Atraveacutes do comando OPEN QUERY realizamos a abertura de uma Query de busca no Banco de Dados atraveacutes do RDD TOPCONN retornando os dados consultados atraveacutes de um ALIAS Advpl
Caso a Query nao possa ser aberta por erro de sintaxe devido agrave thread atual natildeo estar conectada com o TopConnect ou outro erro seraacute gerado um log de erro informando o Alias o Stack ( Pilha de Chamadas ) de
execucatildeo e o conteuacutedo da Query para Debug
OBSERVACcedilOtildeES IMPORTANTES
Na montagem da string da Query devemos especificar os comandos SQL alias e nomes de campos em letras maiuacutesculas
Quando utilizamos o comando OPEN QUERY natildeo precisamos passar a expressatildeo da Query atraveacutes da funccedilatildeo ChangeQuery() Este proceduimento jaacute eacute realizado internamente pelo comando OPEN
QUERY Para que a query natildeo seja submetida agrave funccedilatildeo ChangeQuery() devemos utilizar o paracircmetro NOCHANGE
A utilizaccedilatildeo deste comando eacute impliacutecita agrave LIB APWEBEX e necessita da utilizaccedilatildeo do include Apwebexch
Comandos - WEB EXTENDED END
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED END ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando para fechar uma seccedilatildeo aberta pelo comando WEB EXTENDED INIT Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do
comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
Comandos - WEB EXTENDED INIT
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED INIT ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando juntamente com o comando WEB EXTENDED END quando montamos uma funcatildeo ( Web Function ) que foi construiacuteda para ser chamada a partir de um Web Browser quando nos
utilizamos das funccedilotildees de Infra-Estrutura APWEBEX
Atraveacutes dele eacute realizada uma preacute-validaccedilatildeo que certifica que a execuccedilatildeo da funccedilatildeo somente seraacute realizada caso a thread atual seja realmente uma Thread montada no ambiente WEBEX aleacutem de podermos inserir uma
preacute-validaccedilatildeo (START) de execuccedilatildeo especiacutefica para esta funccedilatildeo
Caso seja especificada uma funccedilatildeo na claacuteusula START a mesma deveraacute retornar uma String Retornando uma String em branco o processamento da funccedilatildeo original seraacute efetuado normalmente Caso a funccedilatildeo retorne
uma string natildeo-vazia esta string seraacute retornada para a variaacutevel cHtml e o processamento do programa seraacute desviado para a linha do coacutedigo-fonte imediatamente posterior agraveo comando WEB EXTENDED END
Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
12
Infra-Estrutura APWEBEX - EnvUserAPL - Exemplo de Uso com ERP
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo praacutetico abaixo utilizamos em um coacutedigo fonte Advpl os pontos de entrada disponibilizados na Infra-Estrutura APWEBEX para realizar a preparaccedilatildeo de um ambiente ERP Reset de Ambiente
finalizaccedilatildeo de Thread finalizaccedilatildeo de sessions por time-out e customizaccedilatildeo de mensagem de erro para o desenvolvimento de um projeto de Web Site integrado com o ERP Microsiga
Devemos adotar como padratildeo para projetos que utilizam APWEBEX a criaccedilatildeo do arquivo EnvUserapl especificamente para a definiccedilatildeo dos pontos de entrada utilizados pela Infra-Estrutura
APWEBEX e devemos apenas compilar os fontes dos pontos de entrada realmente necessaacuterios agraveo projeto INCLUDE PROTHEUSCH
INCLUDE APWEBEXCH
====================================================================================
Exemplo de Arquivo de Lib de Projeto APWEBEX utilizando os pontos de entrada
da lib para preparaccedilatildeo de ambiente reset de ambiente e tratamento de erro
utilizando APWEBEX em conjunto com o ERP Microsiga
====================================================================================
----------------------------------------------------------------------------
Ponto de Entrada StartWebEx( NIL ) =gt T ou F
Ponto de entrada executado na inicializaccedilatildeo de cada Working Thread ( ONSTART )
Eacute a responsaacutevel por preparar o ambiente para atender agraves requisiccedilotildees WEB de links apw
Natildeo recebe paracircmetro algum da lib e deve retornar T caso tenha inicialziado com sucesso
ou F em caso de falha de inicializaccedilatildeo
----------------------------------------------------------------------------
USER Function StartWebEx()
Prepara o Ambiente ERP
PREPARE ENVIRONMENT
EMPRESA 01
FILIAL 01
TABLES ZX1ZX2ZX3ZX4ZZ1ZZ2ZZ3ZZ4ZZ5
Return T
-------------------------------------------------------------------------------
Ponto de Entrada ConnectWebEx(cFnName) =gt cHtml ou
Ponto de entrada executado imediatamente antes do processamento de uma requisiccedilatildeo de um link APW
Recebe como paracircmetro o nome da funccedilatildeo a ser executada passada no link
Deve retornar uma String que seraacute retornada ao ao Browser solicitante Caso retorne uma string
em branco (vazia) a funccedilatildeo originalmente solicitada eacute executada pela lib
Caso contraacuterio a funccedilatildeo original natildeo eacute executada e a string retornada eacute enviada ao Browser
-------------------------------------------------------------------------------
USER Function ConnectWebEx(cFnName)
Local cHtmlConn =
conout(Vou executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada ResetWebEx(cFnName) =gt cHtml ou
Funccedilatildeo chamada imediatamente Apos a execuccedilatildeo de uma requisiccedilatildeo APW
Recebe como paracircmetro o nome da funccedilatildeo executada e permite tambeacutem que seja acrescentado
algo a mais no Html a ser retornado ao Browser
-------------------------------------------------------------------------------
USER Function ResetWebEx(cFnName)
Local cHtmlConn =
conout(Terminei de executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada FINISHWEBEX()
Funccedilatildeo chamada no fechamendo do ambiente de uma working Thread Apos a execuccedilatildeo deste
a Thread utilizada eacute eliminada da memoacuteria
-------------------------------------------------------------------------------
USER Function FINISHWEBEX()
conout(Finalizando a Working Thread)
Return
-------------------------------------------------------------------------------
Ponto de Entrada ENDSESSION(cSessionId) =gt NIL
Ponto de entrada chamado em uma working Thread quando a session de um usuaacuterio seraacute
eliminada da memoacuteria por time-out Recebe como parametro o Id de sessions de usuario
que estaacute sendo finalizado
-------------------------------------------------------------------------------
USER Function ENDSESSION(cSessionId)
Conout(Sesssion +cSessionId+ limpa da memoacuteria)
Return
----------------------------------------------------------------------------
Ponto de Entrada WebExError(ecErrorLogcHtml) =gt cCustomHtml ou
Esta funcao eacute chamada pela rotina de tratamento de erro WEBEX quando ocorre um erro fatal
e permite que seja retornado um Html de tratamento de erro diferenciado Ela recebe como
parametro o objeto do erro a mensagem ASCII que foi acrescentada ao arquivo errorlog
e o Html original montado pela rotina de tratamento de erro default
IMPORTANTE Por sem um ponto de entrada executado em um momento criacutetico (tratamento
de erro ) esta funccedilatildeo deve ser o mais suscinta e simples possiacutevel natildeo utilizando
sessions banco de dados etc
----------------------------------------------------------------------------
USER Function WebExError(oErrorcErrorLogcHtml)
Local cCustomHtml =
Monta mensagem de erro mais amigavel
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
13
Ocorreu um erro inesperado no
cCustomHtml += processamento desta paacutegina O Administrador do sistema seraacute notificado desta
cCustomHtml += ocorrecircncia Recomendamos fortemente que esta janela do navegador seja cCustomHtml += fechada e uma nova janela seja aberta para retornar agrave navegaccedilatildeo do site
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
Return cCustomHtml
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Nos exemplo abaixo utilizamos a funccedilatildeo escape() para formatar paracircmetros para inserir em uma URL cUrl = httplocalhostwebinfoapw
cPAram1 = Teste de Parametro 01-02
cPAram2 = reserva
cPAram3 = 1+2+3
cUrl += Par01= + escape(cPAram1) + ampPAr02= + escape(cPAram2) + ampPar03= + escape(cPAram3)
O conteudo de cUrl deveraacute ser httplocalhostwebinfoapwPar01=Teste20de20Parametro2001-02ampPAr02=23reserva23ampPar03=12B22B3
proacuteprio para a monyahem de um link
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETJOBPROFSTRING
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
O exemplo abaixo executado em uma thread iniciada a partir de um JOB WEBEX recupera algumas configuraccedilotildees atuais em uso para este JOB cJobType = GetJobProfString(type(empty) )
cInstances = GetJobProfString(Instances(empty) )
cInacTime = GetJobProfString(InactiveTimeout(default) )
cExpTime = GetJobProfString(ExpirationTime(default) )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETPARVALUE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo satildeo montados dois arrays multi-dimensionais com 2 dimensotildees e satildeo realizadas buscas nos mesmos explorando todas as possibilidades de uso da funccedilatildeo GetParValue() Local aTeste1 =
Local aTeste2 =
Aadd(aTeste1AliasTMP1)
Aadd(aTeste1Relacao2x3)
Aadd(aTeste2AliasTMP2)
Aadd(aTeste2Info---Informaccedilatildeo adicional---)
Busca apenas no array ateste1
cAlias = GetParValue(ALIASaTeste1)
cRelacao = GetParValue(RELACAOaTeste1)
cInfo = GetParValue(INFOaTeste1)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) (nao encontrado)
Busca apenas no array ateste2
cAlias = GetParValue(ALIASaTeste2)
cRelacao = GetParValue(RELACAOaTeste2)
cInfo = GetParValue(INFOaTeste2)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP2
conout(cRelacao) (nao encontrado)
conout(cInfo) ---Informaccedilatildeo Adicional---
Busca em ambos os Arrays
Primeiro no aTeste1 e depois no aTeste2
cAlias = GetParValue(ALIASaTeste1aTeste2)
cRelacao = GetParValue(RELACAOaTeste1aTeste2)
cInfo = GetParValue(INFOaTeste1aTeste2)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) ---Informaccedilatildeo Adicional---
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo abaixo geramos a string com o DUMP de um arquivo HTML salvo na pasta WEB a partir do RootPath do Environment O Dump do arquivo seraacute mostrado no Console do servidor e no Web
Browser que solicitou a funccedilatildeo U_DumpTestapw
include protheusch
include apwebexch
User Function DumpTest()
Local cHtml =
Local cTXTFile =
Local cDump =
WEB EXTENDED INIT cHtml
14
Le o arquivo
cTTXFile = memoread(WebDefaulthtm)
Gera a string com o Dump do arquivo
cDump = HExStrDump(cTTXFile)
Mostra o Dump no console
conout(cDump)
Gera HTML para a visualizaccedilatildeo do DUMP
cHtml = VarInfo(DUMPHtmlnotags(cDump)tf)
WEB EXTENDED END
Return cHtml
Exemplo do Texto mostrado no Console
HexSTRDump ( String 237 Start 1 Length 237 )
-------------------------------------------------------------------------------
3C 48 54 4D 4C 3E 3C 48 45 41 44 3E 0D 0A 3C 4D | ltHTMLgtltHEADgt__ltM
45 54 41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 | ETA HTTP-EQUIV=
43 6F 6E 74 65 6E 74 2D 54 79 70 65 22 20 63 6F | Content-Type co
6E 74 65 6E 74 3D 22 74 65 78 74 2F 68 74 6D 6C | ntent=texthtml
22 0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 | __ltMETA HTTP-EQ
55 49 56 3D 22 70 72 61 67 6D 61 22 20 63 6F 6E | UIV=pragma con
74 65 6E 74 3D 22 6E 6F 2D 63 61 63 68 65 22 3E | tent=no-cachegt
0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 55 | __ltMETA HTTP-EQU
49 56 3D 22 45 78 70 69 72 65 73 22 20 63 6F 6E | IV=Expires con
74 65 6E 74 3D 22 2D 31 22 3E 0D 0A 3C 4D 45 54 | tent=-1gt__ltMET
41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 52 65 | A HTTP-EQUIV=Re
66 72 65 73 68 22 20 63 6F 6E 74 65 6E 74 3D 22 | fresh content=
30 3B 20 75 72 6C 3D 2F 77 5F 77 45 78 30 30 30 | 0 url=w_wEx000
2E 61 70 77 22 3E 3C 2F 48 45 41 44 3E 0D 0A 3C | apwgtltHEADgt__lt
2F 48 45 41 44 3E 3C 2F 48 54 4D 4C 3E | HEADgtltHTMLgt
-------------------------------------------------------------------------------
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HTMLNOTAGS
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo a funccedilatildeo HtmlNoTags eacute utilizada para permitir a utilizaccedilatildeo de caracteres especiais no conteuacutedo de um input para um formulaacuterio Html Local cHtml =
Local cInput =
Conteudo do campo com tags HTML intepretaacuteveis
cInput =
Ao montar o Input aplicar a HtmlNoTags() ao conteudo do mesmo
cHtml +=
+HtmlNoTags(cIn
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
15
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos a funccedilatildeo RetSqlAce para montar uma query de busca por tiacutetulo de uma determinada informaccedilatildeo considerando todas as possibilidades de acentuaccedilatildeo independentemente de como o
banco foi alimentado eou a string de busca foi digitada
IMPORTANTE Na expressatildeo da Query o campo da tabela deve ser passado pela funccedilatildeo LOWER do BAnco pois a funccedilatildeo retsqlace monta a string para busca com letras minuacutesculas cFind = acentuaccedilatildeo
cQuery = SELECT FROM + RetSqlTab(ZZ1)
cQuery += WHERE LOWER(ZZ1_TITULO) LIKE +RetSqlAce(cFind)+
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VALTOSQL
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = + ValToSql(02)
cQuery += AND FA2_DTINC lt= + ValToSql(date())
O exemplo acima caso escrito de forma a realizar as conversotildees especiacuteficas para cada tipo de conteuacutedo seria o equivalemte ao coacutedigo abaixo
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = 02
cQuery += AND FA2_DTINC lt= + DTOS( date() )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VARINFO
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo eacute gerada uma string HTML com as informaccedilotildees do retorno da chamada de duas funccedilotildees baacutesicas da Linguagem Advpl User Function InfoTeste()
Local cHtml =
cHtml += VarInfo(lsquoDatersquodate())
cHtml += VarInfo(lsquoTimelsquotime())
Return cHtml
Deve ser gerado um echo no Console do Servidor parecido com este abaixo
Date -gt D ( 10) [08122003]
Time -gt C ( 8) [201748]
Infra-Estrutura APWEBEX - Exemplo das funccedilotildees de acentuaccedilatildeo ApWebEX
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo vemos a diferenccedila de comportamento entre as funccedilotildees baacutesicas da Linguagem Advpl Upper() e Lower() e a funccedilatildeo de Infra-estrutura Capital() em relaccedilatildeo agraves funccedilotildees da Infra-estrutura
APWEBEX UpperAce() LowerAce() e CApitalAce() quando utilizamos caracteres acentuados cRetorno =
cFrase = natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
cRetorno += Original + cFrase + CRLF
cRetorno += Upper() + upper(cFrase) + CRLF
cRetorno += Lower() + lower(cFrase) + CRLF
cRetorno += Capital() + capital(cFrase) + CRLF
cRetorno += UPPERACE() + UPPERACE(cFrase) + CRLF
cRetorno += LOWERACE() + LOWERACE(cFrase) + CRLF
cRetorno += CAPITALACE() + CAPITALACE(cFrase) + CRLF
Neste ponto a variaacutevel cRetorno deveraacute conter
Original natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
Upper() NatildeO Haacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSotildeES PARA O INEXPLICaacuteVEL
Lower() natildeo haacute explicaCcedilOtildees considerando excessotildees para o inexplicaacutevel
Capital() Natildeo Haacute ExplicaCcedilOtildees Considerando Excessotildees Para O Inexplicaacutevel
UPPERACE() NAtildeO HAacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSOtildeES PARA O INEXPLICAacuteVEL
LOWERACE() natildeo haacute explicaccedilotildees considerando excessotildees para o inexplicaacutevel
CAPITALACE() Natildeo Haacute Explicaccedilotildees Considerando Excessotildees Para O Inexplicaacutevel
Infra-Estrutura APWEBEX - Exemplos das funccedilotildees NTOC e CTON
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos as funccedilotildees cton e ntoc para realizar conversotildees de nuacutemeros em base decimal para outras bases numeacutericas e vice-versa
16
nNum1 = CTON(011010012) Converte binaacuterio para decimal
nNum2 = CTON(00DA25FE16) Converte Hexadecimal para decimal
nNum1++ Soma 1 ao numero em nNum1
nNum2++ Soma 1 ao numero em nNum2
cNum1 = NtoC(nNum128) Converte para binaacuterio novamente
cNum2 = NtoC(nNum2168) Converte para Hexa novamente
-------------------------------------------------------------------------
Ao final do programa cNum1 seraacute 01101010 e cNum2 seraacute 00DA25FF
-------------------------------------------------------------------------
APWEXADDERR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
APWEXADDERR ( [ cTitulo ] [ cInfo ] ) --gt T
Paracircmetros
Argumento Tipo Descriccedilatildeo
cTitulo Caracter cTitulo corresponde a um tiacutetulo identificador da informaccedilatildeo Deve ter no maacuteximo 20 caracteres Os caracteres acima da vigeacutesima posiccedilatildeo seratildeo
ignorados
cInfo Caracter cInfo corresponde agrave Informaccedilatildeo a ser acrescentada ao ERRORLOG em caso de erro
Retorno
Tipo Descriccedilatildeo
Loacutegico Esta funccedilatildeo sempre retorna T
Descriccedilatildeo
Atraveacutes da funccedilatildeo ApWExAddErr() podemos acrescentar uma string de informaccedilotildees adicionais em um buffer em memoacuteria descarregado na geraccedilatildeo do ERRORLOG no caso de uma ocorrecircncia de erro fatal na
working thread atual
Caso a funccedilatildeo seja chamada sem nenhum paracircmetro a uacuteltima ocorrecircncia acrescentada pela funccedilatildeo eacute eliminada da pilha interna de informaccedilotildees
ATENCcedilAtildeO Esta funccedilatildeo deve ser apenas utilizada em casos de necessidade de obtenccedilatildeo de informaccedilotildees especiacuteficas acerca de uma ocorrecircncia de erro natildeo reproduzida em ambiente de testes eou natildeo depuraacutevel pois
seu uso desnecessaacuterio prejudica a performance da aplicaccedilatildeo final
CAPITALACE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CAPITALACE ( lt cString gt ) --gt cStrCapital
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida
Retorno
Tipo Descriccedilatildeo
Caracter String resultante convertida para munuacutesculo com as primeiras letras das palavras significantes em maiuacutesculo
Descriccedilatildeo
Semelhante agrave funccedilatildeo de Infra-estrutura Capital() poreacutem converte tambeacutem caracteres acentuados
A funccedilatildeo CapitalAce() converte todos os caracteres de uma String para minuacutesculo e a primeira letra das palavras significantes para maiuacutesculo semelhante agrave funccedilatildeo Capital() poreacutem considera e converte tambeacutem
caracteres acentuados em OEM eou ANSI
CTON
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CTON ( lt cString gt lt nBase gt ) --gt nNumero
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave representaccedilatildeo de um nuacutemero em outra base numeacuterica compreendida entre 2 e 36
nBase Numeacuterico nBase corresponde agrave base numeacuterica utilizada pelo numero representado em cString
Retorno
Tipo Descriccedilatildeo
Numeacuterico Nuacutemero recebido como paracircmetro em notaccedilatildeo decimal ( Base 10 )
Descriccedilatildeo
Converte um nuacutemero representado em String de base 2 a 36 para um nuacutemero em base decimal (10)
Observaccedilatildeo Importante
Satildeo considerados caracteres vaacutelidos para compor um nuacutemero de base 36 os 10 algarismos numeacutericos de 0 a 9 e os 26 caracteres alfabeacuteticos maiuacutesculos compreendidos entre A e Z Quaisquer caractetes presentes na
String de paracircmetro fora desta faixa de dados eou fora da base ( por exemplo uma conversatildeo de string base 2 - binaacuterio - da string 01001020 ) retornaraacute -1 ( menos um )
ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
ESCAPE ( lt cString gt ) --gt cEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute uma sequecircncia de caracteres a ser processada
Retorno
Tipo Descriccedilatildeo
Caracter cEscaped corresponde agrave string original com os caracteres reservados utilizando a notaccedilatildeo HH
Descriccedilatildeo
A funccedilatildeo Escape() deve ser utilizada para realizar conversotildees de caracteres especiais e reservados quando da necessidade de passagem de paracircmetros via URL
A sintaxe de uma requisiccedilatildeo via URL para a passagem de paracircmetros eacute
(link)param=conteudoampparam2=conteudo2amp
Quando passamos paracircmetros via url devemos tomar o cuidado de natildeo utilizar caracteres reservados e especiais nos nomes e conteuacutedos de paracircmetros Para realizar estas conversotildees utilizamos a funccedilatildeo Escape()
17
EXECINPAGE
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXECINPAGE ( lt cAPHPage gt ) --gt cHTMLPage
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAPHPage Caracter Corresponde agraveo nome do APH que deve ser executado sem a extensatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cHtmlPage corresponde agrave string HTML gerada pela paacutegina APH AHU
Descriccedilatildeo
Atraveacutes da funccedilatildeo ExecInPage() executamos uma paacutegina APH passada como paracircmetro A funccedilatildeo deveraacute retornar a String HTML correspondente agrave paacutegina processada
Poreacutem a funccedilatildeo ExecInPage() realiza tratamentos adicionais padratildeo relacionaodo agraveo comportamento dos Projetos WEB referentes agrave customizaccedilotildees da segunte maneira
1 Primeiro eacute verificado se existe uma paacutegina AHU compilada com o nome cAPHPage Caso exista a mesma seraacute executada pela execinpage
2 Caso natildeo exista AHU com este nome eacute procurado pelo APH Caso o APH exista o mesmo seraacute executado pela ExecInPage
3 Caso natildeo existam no RPO atual o APH nem o AHU com o nome especificado no paracircmetro cAPHFile o processamento eacute abortado com a ocorrecircncia de erro [APWEXERR_0007] APH page
[ltcAPHPagegt] not found in RPO 4 Antes de executar o APH ou AHU identificado nos passos anteriores eacute verificado se existe um ponto de entrada ( User Function ) compilado com o mesmo nome do APH Caso exista o ponto de
entrada eacute executado Ele deveraacute retornar uma String HTML Se for retornada alguma string a funccedilatildeo retorna a tring retornada e natildeo processa o APH AHU Observaccedilatildeo A funccedilatildeo ExecInPage natildeo iraacute executar este
tratamento da User Function com o nome de cAPHPage caso a funccedilatildeo ExecInPage() esteja sendo executada atraveacutes de uma USER FUNCTION
Observaccedilatildeo Importante - Envio parcial de HTML agraveo Browser A funccedilatildeo ExecInpage() juntamente com o APH compilado ao serem processados iratildeo tentar enviar o conteuacutedo HTML para o Browser solicitante durante o processamento de modo que a funccedilatildeo normalmente iraacute
retornar uma String vazia
Caso seja necessaacuteria a execuccedilatildeo de uma paacutegina APH ou AHU e o natildeo-envio da mesma para o Browse por exemplo para a geraccedilatildeo de um coacutedigo HTML a ser enviado via e-mail revemos utilizar a funccedilatildeo
HttpSetPart() realizando uma chamada da mesma antes da ExecInPage() passando o paracircmetro F para desabilitar temporariamente o envio de HTML simultacircneo ao Browser e apoacutes a execuccedilatildeo da ExecInPage()
devemos re-habilitar o envio simultacircneo atraveacutes da chamada da funccedilatildeo HttpSetPart() com o paracircmetro T
EXISTPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTPAGE ( lt cAphFile gt ) --gt lFound
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAphFile Caracter Nome do arquivo APH sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Caracter Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistPage() para identificarmos no ambiente atual se um determinado arquivo APH encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistPage(teste)
conout(testeaph compilado neste RPO)
Else
conout(testeaph NAO compilado neste RPO)
Endif
EXISTUSRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTUSRPAGE ( lt cAhuFile gt ) --gt lExist
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAhuFile Caracter Nome do arquivo AHU sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Loacutegico Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistUSRPage() para identificarmos no ambiente atual se um determinado arquivo AHU encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistUSRPage(teste)
conout(testeahu compilado neste RPO)
Else
conout(testeahu NAO compilado neste RPO)
Endif
GETJOBPROFSTRING
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETJOBPROFSTRING ( lt cKey gt lt cDefault gt ) --gt cKeyValue
Paracircmetros
Argumento Tipo Descriccedilatildeo
cKey Caracter cKey corresponde agrave chave da seccedilatildeo de configuraccedilatildeo da Working Thread atual a ser retornada
cDefault Caracter Valor default (string) a ser retornado pela funccedilatildeo caso a chave especificada natildeo sehja encontrada no INI
Retorno
Tipo Descriccedilatildeo
Caracter Conteudo da Chave solicitada Caso a chave natildeo seja encontrada eacute retornado o conteudo de cDefault Caso esta funccedilatildeo natildeo seja executada a partir de uma Working Thread ela
18
retornaraacute uma string em branco ()
Descriccedilatildeo
Atraveacutes desta funccedilatildeo podemos recuperar as configuraccedilotildees do Job da Working Thread atual
GETWEXVERSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETWEXVERSION ( ) --gt cBuildId
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave String Identificadora da versatildeo no formato ltLIBgt VAAMMDDHHmm Vide Tabela A
Descriccedilatildeo
Esta funccedilatildeo natildeo requer argumentos e retorna o Identificador do build versatildeo de Release das funccedilotildees de Infra-Estrutura APWEBEX
Observaccedilatildeo A data informada pela versatildeo natildeo corresponde agrave ultima compilaccedilatildeo do RPO de um determinado Projeto WEB mas sim agrave data de release da LIB de Infra-Estrutura APWEBEX
Tabela A
Simbolo Descriccedilatildeo
AA Ano de geraccedilatildeo da Lib
MM Mecircs da geraccedilatildeo da Lib
DD Dia da geraccedilatildeo da Lib
HH Horaacuterio da geraccedilatildeo da Lib
mm Minutos do Horaacuterio de Geraccedilatildeo da Lib
(HTTP) Indica que a versatildeo foi compilada com a configuracatildeo de envio progressivo de HTML simultacircneo para o Browse Esta opccedilatildeo eacute imprescindiacutevel para projetos que se utilizam desta LIB
Por exemplo
APWEBEX Version 30312021900 (HTTP)
HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HEXSTRDUMP ( lt cString gt [ nStart ] [ nLength ] ) --gt cHExDump
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser lida para a geraccedilatildeo do Dump
nStart Numeacuterico Corresponde agrave posiccedilatildeo inicial de cString a ser considerada para a geraccedilatildeo do Dump a partir da posiccedilatildeo 1 Caso este paracircmetro natildeo seja informado o
Default eacute a posiccedilatildeo 1 da string
nLength Numeacuterico nLength corresponde agraveo tamanho a ser considerado para a geraccedilatildeo do DUMP a partir da posiccedilatildeo inicial recebida em nStart Caso este paracircmetro natildeo
seja informado eacute considerado o tamanho ateacute o final da String
Retorno
Tipo Descriccedilatildeo
Caracter O retorno da funccedilatildeo corresponde agrave uma string Advpl formatadas em 16 bytes em hexadecimal por linha mais o separador pipe (|) mais os 16 caracteres em Ansi Os caracteres de
controle ( codigo ascii menor que 32 ) satildeo convertidos para visualizaccedilatildeo para o caractere underline (_)
Descriccedilatildeo
Atraveacutes da funccedilatildeo HexStrDump() podemos gerar uma string em Advpl em formato de Dump Hexadecimal a partir da string informada como paracircmetro a partir de uma determinada posiccedilatildeo da string considerando um
nuacutemero de bytes informado
Caso os paracircmetros nPosIni e nTamString natildeo sejam informados o dump gerado corresponde a string recebida como paracircmetro em sua totalidade
Observaccedilatildeo
Natildeo devemos pasar para a funccedilatildeo HexStrDump uma string maior que 240 Kb pois a geraccedilatildeo da String de dump eacute realizada em memoacuteria sendo a string final gerada em meacutedia 42 vezes maior que a string passada
como paracircmetro Caso a string passada como paracircmetro seja maior que 240 Kb a execuccedilatildeo seraacute abortada com a ocorrecircncia de erro fatal string size overflow
HTMLNOTAGS
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HTMLNOTAGS ( lt cStrHtml gt ) --gt cStrNoTags
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrHtml Caracter cStrHtml corresponde a uma String que natildeo pode conter caracteres Html interpretaacuteveis
Retorno
Tipo Descriccedilatildeo
Caracter String original com os caracteres interpretaacuteveis Html lt gt amp convertidos para caracteres natildeo-interpretaacuteveis
Descriccedilatildeo
A Funccedilatildeo HTMLNOTAGS converte as Tags interpretaacuteveis de uma String HTML para TAGS natildeo interpretaacuteveis Este recurso eacute normalmente utilizado quando precisamos montar um input Html com um conteudo que
nao pode ser interpretado pelo browser como uma Tag Esta funccedilatildeo apenas converte os caracteres lt ( menor que ) gt ( maior que ) amp ( e comercial ) e ldquo ( aspas duplas )
Recomenda-se fortemente que na montagem do value de um input html o conteuacutedo do mesmo seja colocado entre aspas duplas pois caso o conteuacutedo do value inicial do campo contenha aspas simples (
natildeo convertidas pela funccedilatildeo HtmlNoTags) isto poderaacute ocasionar perda de dados e erro de sintaxe no formulaacuterio Html
HTTPISWEBEX
Revisatildeo 12122003
Sintaxe
HTTPISWEBEX ( ) --gt lIsApWEBEX
Retorno
Tipo Descriccedilatildeo
Loacutegico A funccedilatildeo retornaraacute T caso o ambiente de execuccedilatildeo atual seja uma Working Thread WEBEX inicializada pela funccedilatildeo de infra-estrutura STARTWEBEX
Descriccedilatildeo
Atraveacutes da funccedilatildeo HttpIsWebEx() eacute possiacutevel identificarmos se o programa atual estaacute sendo executado atraveacutes de uma Working Thread inicializada utilizando-se as funccedilotildees de Infra-Estrutura APWEBEX
ISEMAIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
19
Sintaxe
ISEMAIL ( lt cEMail gt ) --gt lEmailOk
Paracircmetros
Argumento Tipo Descriccedilatildeo
cEMail Caracter cEmail corresponde a string a ser analizada contendo um e apenas um endereccedilo de e-mail
Retorno
Tipo Descriccedilatildeo
Caracter Retorna T caso a sring recebida como paracircmetro atenda agraves definiccedilotildees de nomenclatura vaacutelidos para um endereccedilo de e-mail
Descriccedilatildeo
Utilizada para validar e-mails em Advpl a funccedilatildeo ISEMAIL recebe como paracircmetro uma string contendo um e-mail retornando T caso a string esteja em um formaacuteto vaacutelido respeitando a regra para nomenclatura de
endereccedilos de e-mail
Regra Um e-mail eacute considerado vaacutelido caso seja iniciado por um caracter apenas contenha caracteres asc de a a z e 0 a 9 e os caracteres (arroba) (ponto) - ( hiacutefen) ou _ (underline) e deve conter uma e
apenas uma arroba e no minimo um ponto apos a arroba intercalado por um caracter
LOWERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
LOWERACE ( lt cString gt ) --gt cStrLower
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a sequecircncia de caracteres a ser convertida para letras minuacutesculas
Retorno
Tipo Descriccedilatildeo
Caracter String original em letras minuacutesculas
Descriccedilatildeo
A Funccedilatildeo LOWERACE converte todos os caracteres de uma String para ldquominusculordquo semelhante agrave funccedilatildeo LOWER() poreacutem considera e converte tambeacutem caracteres acentuados em ANSI
NTOC
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
NTOC ( lt nNumero gt lt nBase gt lt nTamStr gt ) --gt cString
Paracircmetros
Argumento Tipo Descriccedilatildeo
nNumero Numeacuterico nNumero eacute o valor numeacuterico em base devimal a ser convertido
nBase Numeacuterico nBase corresponde agrave base binaacuteria a ser utilizada para converter nNumero
nTamStr Numeacuterico nTamStr corresponde ao tamanho da string representando o numero na base desejada
Retorno
Tipo Descriccedilatildeo
Caracter cString corresponde ao numero convertido para a base numeacuterica especificada como paracircmetro
Descriccedilatildeo
A Funccedilatildeo NTOC converte um nuacutemero em notaccedilatildeo decimal para um nuacutemero representado por String utilizando uma base numeacuterica entre 2 e 36 preenchendo-o com ldquo0rdquo (zeros) agrave esquerda do tamanho especificado
Observaccedilatildeo O Paracircmetro nBase deve ser especificado com um nuacutemero entre 2 e 36 Caso seja passado como paracircmetro um nuacutemero base fora desta faixa o processamento eacute abortado com a ocorrecircncia de erro
[APWEXERR_0022] INVALID NTOC BASE [X] onde ltXgt foi a base passada como argumento
REDIRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
REDIRPAGE ( lt cUrl gt [ cTarget ] [ nTime ] ) --gt cScript
Paracircmetros
Argumento Tipo Descriccedilatildeo
cUrl Caracter Link para onde o script deve apontar o redirecionamento
cTarget Caracter Destino do redirecionamento Caso natildeo especificado o default eacute _self
nTime Numeacuterico Tempo (em segundos) de delay antes do redirecionamento ser executado
Retorno
Tipo Descriccedilatildeo
Caracter Script Html JavaScript que ao ser executado no Browser (client) chama a paacuteginaobjeto chamado no Link
Descriccedilatildeo
A funccedilatildeo RedirPage eacute utilizada quando desejamos devolver ao Browser um script que ao ser executado redirecionaraacute o Browser agrave abertura de um link passado como paracircmetro
RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLACE ( lt cStrFind gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrFind Caracter cStrFind corresponde agrave sequecircncia de caracteres a ser procurada podendo conter caracteres maiuacutesculos e minuacutesculos com ou sem acentuaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cStrQuery corresponde agrave string de busca a ser utilizada na query utilizando caracteres em minuacutesculo
Descriccedilatildeo
A funccedilatildeo RetSqlAce eacute utilizada para auxiliar de montagem de querys de busca de caracteres acentuados em bases de dados A funccedilatildeo automaticamente trata a string original removendo os acentos convertendo todos
os caracteres para minuacutesculas e trocando todas as vogais e cedilhas da string original por uma sequecircncia de caracteres acentuados em munuacutescilas para busca posicional
20
RETSQLCOND
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLCOND ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlCond() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga e o Makira Hypersite utilizando aliases de 3
caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar a filial atual ( xFilial ) de acordo com o modo do arquivo ( X2_MODO ) e para sempre desconsiderar
registros deletados
Observaccedilotildees
Esta funccedilatildeo foi mantida apenas por compatibilidade pois a ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do
banco para efeitos de performance Para ganharmos performance nas Querys devemos ao inveacutes de utilizar a funccedilatildeo RetSqlCond() utilizar como primeira clauacutesula WHERE o retorno da funccedilatildeo RetSqlFil() (
comparaccedilatildeo dos campos _FILIAL os primeiros do(s) iacutendice(s) do ERP ) que retorna apenas as comparaccedilotildees de Filial e por uacuteltimo a funccedilatildeo RetSqlDel que retorna o script para verificaccedilatildeo dos campos deletados (
que eacute o uacuteltimo campo das chaves de iacutendice do ERP utilizando TopConnect )
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlCond() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de
modo que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute
retorna os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLDEL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLDEL ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlDel() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo D_E_L_E_T_ da(s) tabela(s) passada(s) como paracircmetro
Observaccedilotildees
A ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do banco para efeitos de performance Para ganharmos performance
nas Querys devemos utilizar a funccedilatildeo RetSqlDEl() na montagem das ultimas consistecircncias da claacuteusula WHERE de uma Query
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlDel() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo
que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna
os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLFIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLFIL ( lt cAliases gt [ cCompFil ] ) --gt cSQlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
cCompFil Caracter
Atraveacutes de cCompFil eacute possiacutevel especificar uma Filial FIXA a ser comparada com os campos FILIAL do(s) alias(es) passados no paracircmetro cAliases
Caso natildeo informado os campos _FILIAL da(s) tabela(s) passadas como paracircmetro em cAliases seratildeo comparados com o retorno da funccedilatildeo xFilial() de
cada alias respectivamente
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo filial atual ( xFilial ) de acordo com o modo de abertura do arquivo no ERP ( X2_MODO )
Observaccedilatildeo
Devemos atentar ao fato que a funccedilatildeo RetSqlFil() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo que estes
alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna os
nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLTAB
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLTAB ( lt cAliasList gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliasList Caracter String contendo um ou mais alias separados por virgula a terem seus nomes fiacutesicos determinados
Retorno
Tipo Descriccedilatildeo
Caracter String contendo nomes fisicos e alias identificadores dos aliases recebidos como paracircmetro
Descriccedilatildeo
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
4
Uma funccedilatildeo executada no momento do recebimento de uma requisiccedilatildeo HTTP eacute executada como um JOB ou seja natildeo contem interface Por isso tais funccedilotildees natildeo podem conter comandos de interface
como criaccedilatildeo de janelas ou exibiccedilatildeo de helps e mensagens de alerta
A uacutenica interface possiacutevel eacute a utilizada no client HTTP Por isso tais funccedilotildees devem SEMPRE retornar uma string de caracteres Apoacutes o processamento da funccedilatildeo essa string de retorno seraacute enviada
diretamente ao client HTTP e este seraacute o responsaacutevel por sua interpretaccedilatildeo Por exemplo utilizando um Web Browser como client pode-se retornar a string de comandos HTML diretamente O HTML entatildeo seraacute
propriamente exibido no Web Browser
Qualquer retorno diferente de uma string de caracteres geraraacute um erro que seraacute enviado agrave aplicaccedilatildeo client HTTP (o erro gerado eacute ldquoInvalid Proc Returnrdquo)
O servidor Protheus passa alguns paracircmetros para as funccedilotildees chamadas Isso significa que ao criar funccedilotildees para serem utilizadas em resposta agraves requisiccedilotildees HTTP deve-se criar o cabeccedilalho da funccedilatildeo
com estes paracircmetros Natildeo eacute obrigatoacuterio utilizar os mesmos nomes de paracircmetros sugeridos abaixo quando criar diretamente estas funccedilotildees Poreacutem como satildeo esses os nomes utilizados no ADVPL ASP explicado mas a
frente eacute aconselhaacutevel utilizaacute-los por motivo de padronizaccedilatildeo
o __aCookies Este paracircmetro recebe um array bidimensional com os Cookies criados na aplicaccedilatildeo client HTTP (por exemplo no Internet Explorer 5) Pode-se utilizaacute-lo para checar
validaccedilotildees mantidas nas maacutequinas client por exemplo Para maiores detalhes consulte a documentaccedilatildeo do HTML ou do Web Browser utilizado
o __aPostParms Este paracircmetro recebe um array bidimensional com os campos contidos em um formulaacuterio HTML recebido atraveacutes de um comando POST Cada item deste array conteacutem
um array com o nome do campo e o valor informado Por exemplo para um formulaacuterio com dois campos para digitaccedilatildeo (um chamado nome e o outro chamado endereco) que enviam os dados para a funccedilatildeo
cadastroapl atraveacutes de um POST a funccedilatildeo receberaacute o array __aPostParms da seguinte forma
ldquonomerdquo ldquoNOME DIGITADO NA PAGINA HTMLrdquo
ldquoenderecordquo ldquoENDERECO DIGITADO NA PAGINA HTMLrdquo
A funccedilatildeo pode tratar os dados recebidos neste array para realizar um processamento especiacutefico com tais informaccedilotildees Para campos onde natildeo eacute possiacutevel a entrada de dados e sim a escolha de uma informaccedilatildeo preacute-
definida (como por exemplo um checkbox) o item somente existiraacute no array caso o campo tenha sido selecionado no formulaacuterio HTML (por exemplo se o checkbox for marcado)
o __nProcID Conteacutem o Handle da Thread de execuccedilatildeo daquela funccedilatildeo A utilizaccedilatildeo deste paracircmetro seraacute explicada juntamente com o toacutepico ADVPL ASP posteriormente
o __aProcParms Este paracircmetro recebe um array bidimensional com os paracircmetros enviados na linha de URL do Web Browser Por exemplo na execuccedilatildeo de uma funccedilatildeo via linha de URL
do Web Browser como
httpservidorvendeaplcod=000001ampnome=PRODUTO DE TESTEampquant=20
a funccedilatildeo chamada vende receberaacute o array __aProcParms da seguinte forma
ldquocodrdquo ldquo000001rdquo
ldquonomerdquo ldquoPRODUTO DE TESTErdquo
ldquoquantrdquo ldquo20rdquo
A funccedilatildeo pode tratar estes dados recebidos para realizar processamentos especiacuteficos Eacute muito uacutetil tambeacutem para criar links de execuccedilatildeo diretamente atraveacutes de um Web Browser
o __cHTTPPage Esse paracircmetro foi criado originbalmente para recebe o nome da paacutegina arquivo ou funccedilatildeo originalmente requisitada para o Protheus Server poreacutem natildeo foi utilizado e
permaneceu por compatibilidadeCaso consultado ele retorna uma string em branco
o __aHTTPHead Esse paracircmetro recebe um array com os Headers do cabeccedilalho da requisiccedilatildeo HTTP enviados pelo Web Browser
Exemplo de funccedilatildeo APL
A funccedilatildeo a seguir eacute um bom exemplo para ser executado atraveacutes de um Web Browser Ela retorna uma string contendo a paacutegina HTML onde estaacute escrita a mensagem ldquoHello Worldrdquo e a lista de paracircmetros passados na
linha de URL Para testaacute-la crie um arquivo novo no Protheus IDE cole o coacutedigo abaixo e salve o arquivo como WEBDEMOPRW Apoacutes compilar o programa basta chamar em um Web Browser uma URL como
httplocalhostu_webdemoaplcod=000001ampdesc=DESCRICAO DO PRODUTOampqtd=2
Coacutedigo da funccedilatildeo include rwmakech
User Function WebDemo(__aCookies__aPostParms__nProcID__aProcParms__cHTTPPage)
Local cHTML =
Local i
Coloca uma mensagem em HTML
cHTML += ltpgtlth1 align=centergtHello Worldlth1gtltpgt
Coloca um separador de linha em HTML
cHTML += lthrgt
If Len(__aProcParms) = 0
cHTML += ltpgtNenhum paracircmetro informado na linha de URL
Else
For i = 1 To Len(__aProcParms)
cHTML += ltpgtParacircmetro + __aProcParms[i1] + - Valor +
__aProcParms[i2] + ltpgt
Next i
Endif
Return(cHTML)
Importante
Para crias as funccedilotildees que seratildeo utilizadas em chamadas via um Web Browser ou seja em qualquer request HTTP deve-se seguir o procedimento normal de criaccedilatildeo de funccedilotildees no AP5 utilizando o AP5 IDE para a
ediccedilatildeo e para a compilaccedilatildeo
Note que no caso de funccedilotildees do usuaacuterio (User Function) o nome chamado na URL do Browser tambeacutem deveraacute conter o U_ no comeccedilo da funccedilatildeo por exemplo
httpservidoru_WebDemoapl
Configuraccedilatildeo Miacutenima Em toacutepico agrave parte eacute explicada toda a configuraccedilatildeo referente agrave seccedilatildeo http do Protheus Server A configuraccedilatildeo abaixo eacute a miacutenima necessaacuteria para executar o exemplo acima
[http]
Port=80
Path=(caminho absoluto de disco para arquivos publicados no servidor )
Environment=(nome do environment do Serber que seraacute utilizado para o processamento)
Para testar sua configuraccedilatildeo reinicie o server Protheus e chame via WebBrowser a url
httplocalhosttimeapl
Deveraacute ser mostrada no Browse o horaacuterio atual no formato hhmmss no Servidor pois este eacute o resultado da funccedilatildeo Advpl TIME()
O Protheus atendendo agrave requisiccedilotildees apl
Quando solicitado atraveacutes de um Web Browser um processamento de uma funccedilatildeo via link apl a funccedilatildeo solicitada deve ser responsaacutevel por abrir o ambiente necessaacuterio agraveo processamento conectar com o Banco de
Dados caso necessaacuterio realizar o processamento e retornar a String Html ao Web Browser
Este ambiente criado eacute fechado imediatamente apoacutes o teacutermino do processamento o que exige muito do Servidor da aplicaccedilatildeo em se tratando de uma aplicaccedilatildeo web com vaacuterios usuaacuterios efetuando acessos simultacircneos
Para atender com mais eficiecircncia agraves requisiccedilotildees de processamento de um projeto web foi implementada no Protheus a tecnologia de Working Threads explicada em mais detalhes no toacutepico Desenvolvimento de
Funccedilotildees apw
05 Desenvolvimento de Funccedilotildees APW
Revisatildeo 26042004
Abrangecircncia
Versatildeo 609 Versatildeo 710 Versatildeo 811
Diferenccedila de Funcionamento entre links APL e APW
Como visto em toacutepicos anteriores ao desenvolver uma funccedilatildeo para ser executada via link apl a funccedilatildeo deve ser responsaacutevel pela abertura do ambiente e inicializaccedilotildees necessaacuterias para um processamento qualquer e
apoacutes ser finalizado este processamento o ambiente montado e utilizado eacute fechado automaticamente de modo que cada requisiccedilatildeo de processamento de usuaacuterio atraveacutes de link apl iraacute iniciar uma nova Thread onde o
ambiente deveraacute ser preparado novamente A programaccedilatildeo neste tipo de ambiente exige muito do servidor Protheus
Visando dar perfornance agraves aplicaccedilotildees WEB desenvolvidas utilizando-se o Protheus foi criado link APW que utiliza um recurso do servidor Protheus conhecido como working threads Uma wortking thread eacute uma
configuraccedilatildeo especial de job que permite configurar umacutenuacutemero preacute-definido de Threads no Servidor as quais teratildeo o ambiente de execuccedilatildeo preparado e inicializado atraveacutes de uma funccedilatildeo Advpl onde cada working
5
thread eacute deixada na memoacuteria do servidor em modo de espera (stand-by) de modo que um usuaacuterio ao acessar um link apw o servidor Protheus iraacute direcionar a requisiccedilatildeo de processamento agrave uma working thread que
estiver em stand-by e apoacutes o processamento ser efetuado e o HTML ser retornado ao Browser a working thread retorna novamente ao estado de stand-by voltando a estar disponiacutevel para atender agrave uma nova
requisiccedilatildeo do mesmo ou de outro usuaacuterio navegando no site aplicaccedilatildeo Web
A utilizaccedilatildeo de Working Threads exige a definiccedilatildeo miacutenima de duas funccedilotildees Advpl que seratildeo executadas em dois momentos distintos A primeira funccedilatildeo eacute responsaacutevel pela inicializaccedilatildeo do ambiente comum de
execuccedilatildeo de requisiccedilotildees devendo estabelecer conexatildeo com a Base de Dados utilizada abrir as tabelas utilizadas no Site e preparar as variaacuteveis comuns de utilizaccedilatildeo da aplicaccedilatildeo A segunda funccedilatildeo seraacute responsaacutevel
por encapsular a requisiccedilatildeo do usuaacuterio realizada a partir do Web Browse Ela receberaacute como paracircmetro o nome do link digitado e macro-executar a funccedilatildeo correspondente realizando o tratamento de erro e retorno
Deste modo um ambiente uma vez inicializado natildeo eacute fechado e pode ser utilizado por vaacuterios usuaacuterios que estatildeo navegando no Site o que viabiliza um grande ganho em perfoemance e carga do Servidor
Tipos de Working Threads
Existem dois tipos de Working Threads configuraacuteveis no Protheus a Working Thread WEB e a Working Thread WEBEX ( abreviaccedilatildeo de WEB EXtended ) Ambas possuem basicamente o mesmo princiacutepio de
funcionamento poreacutem o que muda entre ambas eacute a recepccedilatildeo de paracircmetros e a utilizaccedilatildeo de Sessions nativas do Server Protheus Para visualizarmos melhor estas diferenccedilas vejamos com um detalhe um pouco maior
os modelos de funccedilatildeo de inicializaccedilatildeo de ambiente e conexatildeo para ambas as configuraccedilotildees de Working Threads WEB e WEBEX
Working Threads WEB
Para nos utilizarmos das Working Threasd WEB devemos criar as funccedilotildees responsaacuteveis pela inicializaccedilatildeo de ambiente e a funccedilatildeo de conexatildeo
A funccedilatildeo de inicializaccedilatildeo de ambiente natildeo recebe paracircmetro algum realizar a preparaccedilatildeo do ambiente comum de execuccedilatildeo de requisiccedilotildees e deve retornar um valor booleano (T) verdadeiro caso o ambiente tenha sido
inicializado com sucesso ou (F) falso no caso de alguma condiccedilatildeo ou erro que torne o ambiente montado por esta thread natildeo operacional caso este em que a Thread eacute removida da memoacuteria apoacutes a inicializaccedilatildeo
A funccedilatildeo de conexatildeo recebe os mesmos seis paracircmetros de uma funccedilatildeo chamada via link apl e um seacutetimo parametro String que conteacutem apenas o nome da funccedilatildeo chamada no link Por exemplo a chamada de um
link httplocalhostu_testeapw no seacutetimo paracircmetro da funccedilatildeo de conexatildeo a string u_teste A funccedilatildeo de conexatildeo deve ter tratamento de erro proacuteprio e diferenciado e sempre deveraacute retornar um conteuacutedo do tipo
String
Working Threads WEBEX Para nos utilizarmos das Working Threasd WEBEX devemos tambeacutem criar as funccedilotildees responsaacuteveis pela inicializaccedilatildeo de ambiente e a funccedilatildeo de conexatildeo
A funccedilatildeo de inicializaccedilatildeo comporta-se de maneira idecircntica a de inicializaccedilatildeo WEB natildeo recebendo paracircmetro algum e devendo retornar um valor booleano (T) verdadeiro caso o ambiente tenha sido inicializado com
sucesso ou (F) falso no caso de alguma condiccedilatildeo ou erro que torne o ambiente montado por esta thread natildeo operacional caso este em que a Thread eacute removida da memoacuteria apoacutes a inicializaccedilatildeo
A funccedilatildeo de conexatildeo natildeo recebe diretamente paracircmetro algum Isso mesmo Todos os paracircmetros recebidos em versotildees anteriores atraveacutes de Arrays satildeo recebidos agora por Alias Virtuais de alta velocidade
HttpGet
HttpPost
HttpCookies
HttpHeadIn
Cada um destes alias virtuais eacute responsaacutevel respectivamente pela recepccedilatildeo de paracircmetros via GET POST COOKIES e Header HTTP da requisiccedilatildeo
Tambeacutem foram implementados os Alias virtuais HttpHeadOut e HttpSession para respecrivamente permitir alterar ou adicionar informaccedilotildees do Header HTTP de retorno de processamento de uma requisiccedilatildeo e
utilizaccedilatildeo de variaacuteveis tipo SESSION por usuaacuterio Web Estes recursos satildeo detalhados nos toacutepicos WEBEX - Detalhamento de Operaccedilatildeo e posteriores
O Futuro das aplicaccedilotildees WEB no Protheus
Apoacutes o desenvolvimento de aplicaccedilotildees em ambiente WEBEX e dados os oacutetimos resultados obtidos recomenda-se fortemente que as aplicaccedilotildees web desenvolvidas utilizando-se o Protheus Server sejam escritas em
conformidade para a utilizaccedilatildeo dos recursos WEBEX
Para facilitar tal desenvolvimento em paralelo agrave tecnologia disponibilizada na aplicaccedilatildeo jaacute estaacute integrada com a Infra-Estrutura disponiacutevel no repositoacuterio padratildeo do Microsiga Protheus 8 as funccedilotildees da Infra-Estrutura
ApWebEx escritas e publicadas para melhor atender agraves necessidades comuns verificadas no decorrer do desenvolvimento de uma aplicaccedilatildeo Web
Os recursos disponiacuteveis nesta lib estatildeo documentados nos toacutepicos Infra-Estrutura APWEBEX e posteriores englobando comandos funccedilotildees exemplos e dicas de utilizaccedilatildeo destes recursos
6
06 Configurando o Server Protheus para HTTP
Revisatildeo 28042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
As configuraccedilotildees de http do Server Protheus permitem a configuraccedilatildeo de sites estaacuteticos e dinacircmicos com a criaccedilatildeo de um ou mais hosts de acesso criaccedilatildeo de pastas virtuais e dites dinacircmicos com resposta para links
apl e apw simultaneamente Neste documento abrangeremos um resumo exemplificado das configuraccedilotildees HTTP do Server Protheus As seccedilotildees abaixo devem ser inseridas no arquivo de configuraccedilotildees do servidor
Protheus ( mp8srvini )
Configuraccedilatildeo Miacutenima [http]
Enable=1
Path=cAp_Datahttp
Observaccedilatildeo Vale lembrar que apoacutes ter inserido a configuraccedilatildeo do [http] no INI do Protheus eacute importante baixar o Server e subir novamente
Com esta configuraccedilatildeo habilitamos o Server Protheus como um servidor de arquivos e paacuteginas estaacuteticas com o HTTP na porta padratildeo (80) e utilizando o diretorio em cAp_dataHttp como diretoacuterio raiz de
publicaccedilotildees WEB Como natildeo haacute configuraccedilatildeo de host especiacutefica um arquivo nesta pasta poseraacute ser acessado atraveacutes dos hosts httplocalhost ( desde que o browse seja aberto na estaccedilatildeo servidora )
httpnnnnnnnnnnnn ( IP da estaccedilatildeo servidora ) ou httpxxxxxxxxxx ( nome da estaccedilatildeo servidora ) Por exemplo Dentro da pasta configurada na chave PATH do HTTP crie um arquivo chamado defaulthtm
com o seguinte conteuacutedo ( pode ser criado inclusove com o notepad )
lthrgt
Ola Mundo HTTP
lthrgt
Agora abra um Web Browser no mesmo equipamento e digite na url httplocalhost Ao acessar esta url deveraacute ser mostrado na tela do Browse huas barras horizontais e o texto Ola Mundo HTTP entre elas
Atendendo agrave requisiccedilotildees apl
Agora vamos habilitar este host para atender agrave requisiccedilotildees de funccedilotildees atraveacutes de link apl Para tal precisamos apenas do nome de um Environment (ambiente) configurado no INI Podemos usar o proacuteprio ambinete
do ERP Basta acrescentarmos na seccedilatildeo http a chave Environment=ltnome_do_ambientegt para que este ambiente passe a atender agraveo processamento de funccedilotildees Advpl atraveacutes de links apl Por exemlo caso o
ambiente configurado para o ERP chame-se EnvADS710 basta acrescentar na seccedilatildeo http a chave Environment=EnvADS710 O INI ficaria conforme abaixo
[http]
Enable=1
Path=cAp_Datahttp
Environment=EnvADS710
Para testar a execuccedilatildeo de funccedilotildees abra um Web Browse na estaccedilatildeo servidora e acesse o link httplocalhosttimeapl IStoacuteiraacute executar a funccedilatildeo Advpl TIME() que retornaraacute ao Browse uma string contendo o
horaacuterio atual no servidor no formato HHMMSS
Atendendo agrave requisiccedilotildees apw
A configuraccedilatildeo para atendimento de requisiccedilotildees de processamento http atraveacutes de links apw envolve a criaccedilatildeo de uma nova seccedilatildeo no INI com um nome natildeo-especiacutefico para configurar o tipo de job que iraacute executar o
processamento ( WEB ou WEBEX ) juntamente com as funccedilotildees responsaacuteveis pela inicializaccedilatildeo e conexatildeo das Threads Advpl e na seccedilatildeo http configuramos uma chave chamada ResponseJob apontando para a seccedilatildeo
de configuraccedilatildeo do JOB
Por exemplo para configurarmos o atendimento de requisiccedilotildees apw em um ambiente ERP utilizando a infra-estrutura APWEBEX vamos criar uma seccedilatildeo chamada ERP_APWEBEX apontando para as funccedilotildees da
Infra-Estrutura APWEBEX correspondentes
[ERP_APWEBEX]
type=WEBEX
onstart=STARTWEBEX
onconnect=CONNECTWEBEX
Environment=EnvADS710
Instances=13
SigaWeb=MAK
Atraveacutes desta configuraccedilatildeo especificamos um Job do tipo WEBEX onde a funccedilatildeo de inicializaccedilatildeo utilizada seraacute a STARTWEBEX a funccedilatildeo de conexatildeo seraacute a CONNECTWEBEX ( ambas da Infra-estrutura
APWEBEX ) que utilizaratildeo o ambiente AnvADS710 para processamento e seratildeo colocadas no ar apenas uma Working Thread para atendimento de processamento ateacute o maacuteximo de 3 Threads As threads colocadas
no ar acima do nuacutemero miacutenimo ( no exemplo apenas 1 ) satildeo colocadas on-demand caso sejam realizadas requisiccedilotildees apw ao Servidor e natildeo hajam Working Threads dispoviacuteveis no momento e o nuacutemero de Working
Threads no ar ainda natildeo tenha atingido o maacuteximo definido Atraveacutes da configuraccedilatildeo SigaWeb=MAK informamos ao sistema que a mesma estaacute sendo utilizada para o desenvolvimento de um moacutedulo especiacutefico e natildeo
estamos utilizando um moacutedulo Web da ferramenta Protheus 8 Caso a configuraccedilatildeo SigaWeb natildeo seja informada o valor MAK eacute assumido como default
Agora para que esta seccedilatildeo de Jobs seja utilizada para o atendimento efetivo de requisiccedilotildees apw devemos estecificaacute-la na seccedilatildeo http atraveacutes da chave REsponseJob No caso inserimos a chave
ResponseJob=ERP_APWEBEX fincando a seccedilatildeo HTTP conforme abaixo
[http]
Enable=1
Path=cAp_Datahttp
Environment=EnvADS710
ResponseJob=ERP_APWEBEX
Como as requisiccedilotildees via apl e via apw satildeo independentes eacute possiacutevel configurar a seccedilatildeo http para que Environments diferentes respondam agrave requisiccedilotildees apl e apw ou que natildeo sejam atendidas requisiccedilotildees apl
apenas apw
Configurando a seccedilatildeo http para multi-host Todas as configuraccedilotildees acima vistas pertencem agrave seccedilatildeo default do HTTP De modo que tanto faz acessarmos o servidor pelo nome como pelo IP que o resultado serraacute o mesmo Poreacutem para a utilizaccedilatildeo de demais
recursos como diretoacuterios virtuais e mais de um site no mesmo servidor precisamos configurar um host de acesso
Por exemplo vamos criar uma configuraccedilatildeo de HOST para que o servidor caso seja acessado pelo NOME da maquia via HTTP seja visualizado um outro site e apenas sejam atendidos agrave links apl Para isso
devemos criar uma nova seccedilatildeo no INI cujo nome deve ser exatamente o host que seraacute acessado ( como o exemplo vamos supor que o servidor de testes chama-se srvteste ) logo devemos criar uma seccedilatildeo com este
nome
Nesta seccedilatildeo do INI devemos no miacutenimo especificar um Path de acesso agraveos arquivos e as demais configuraccedilotildees vistas ateacute agora da seccedilatildeo http satildeo opcionais A configuraccedilatildeo PORT do HTTP em um host natildeo eacute
suportada Natildeo eacute possiacutevel subir um server protheus em mais de uma porta HTTP
[srvteste]
Path=cAp_DataTestes
Environment=EnvTOP710
Deste modo caso o servidor seja acessado via http atraveacutes de LOCALHOST ou do IP do Server seraacute permitido o acesso agraves funcionalidades configuradas na seccedilatildeo HTTP Caso seja acessado via nome do servidor (
httpsrvteste ) seratildeo acessados os arquivos de outra pasta e as requisiccedilotildees apl seratildeo atendidas pelo Ambiente EnvTOP710
Utilizando este tipo de configuraccedilatildeo podemos subir vaacuterios sites diferentes na mesma aplicaccedilatildeo servidor Protheus cada qual com o seu diretoacuterio raiz de publicaccedilotildees seus ambientes independentes atendendo ou nacirco agrave
requisiccedilotildees apl eou apw
Configurando diretoacuterios virtuais
Ao configurar um host especiacutefico podemos acrescentar ao mesmo uma barra seguido de um nome para acesso agrave um diretoacuterio virtual criando desse modo um endereccedilo de acesso composto por um host e um
diretoacuterio que pode se comportar como um outro site com os arquivos publicados em um path especiacutefico que poderaacute atender requisiccedilotildees de links apl eou apw sob um outro ambiente e configuraccedilatildeo distinta
Utilizando diretoacuterios virtuais eacute possiacutevel dentro do mesmo host instalar vaacuterias aplicaccedilotildees web independentes todas acessiacuteveis sob o mesmo endereccedilotilde base alterando apenas o diretoacuterio de acesso Por exemplo
utilizando como host principal o nome do equipamento servertst podemos instalar o moacutedulo Web Portal Protheus sob o host servertstportal o moacutedulo TCF sob o host servertstrhonline e no host servertst
podemos configurar um site estaacutetico em Html com uma apresentaccedilatildeo institucional e links para os demais moacutedulos
Observaccedilotildees Importantes
Ao configurarmos um Host ele herda as configuraccedilotildees de atendimento de requisiccedilotildees apl e apw especificados na seccedilatildeo HTTP De modo que o host do exemplo continuaraacute a atender requisiccedilotildees apw poreacutem no
ambiente EnvADS710
Visto desta forma recomendamos fortemente que a seccedilatildeo [http] possua apenas especificado um Path em disco que esteja vazio e seja criada uma ou mais configuraccedilotildees de host com as suas devidas propriedades
especificas
Todas as demais chaves relacionadas agrave configuraccedilatildeo HTTP e aos Jobs WEB e WEBEX satildeo opcionais para atender agrave necessiades especiacuteficas Estas chaves estatildeo explicadas em maiores detalhes no DEM na seccedilatildeo
XXX
Configurando diretoacuterios virtuais Da mesma forma que a criaccedilatildeo de hosts podemos criar um novo host utilizando a barra de divisatildeo para especiicar uma pasta virtual quue permite a flexibilidade de termos uma pasta dentro de um mesmo host que
se comporte como um outro host Ainda baseando-se no INI montado nestes exemplos para o servidor de testes vamos supor que exista uma pasta no disco ( por exemplo cAp_dataDocs ) que contenha arquivos
HTML de uma documentaccedilatildeo que deve estar disponccedilivel na web utilizando tambeacutem o host httpsrvteste Poreacutem o host srvteste jaacute aponta para o diretoacuterio cAp_dataTestes
Com o recurso de criaccedilatildeo de diretorio virtual no HTTP criamos apenas uma nova entrada do mesmo host colocando no nome do mesmo uma barra de divisatildeo seguido do nome de uma pasta a ser acessada via
HTTP ( que natildeo precisa necessariamente existir no disco) e dentro desta seccedilatildeo acrescentar a chave path apontando para o diretoacuterio desejado da mesma maneira utilizada para configurar um host
No exemplo abaixo criamos a pasta virtual info dentro do host srvteste apontando para o path do disco cAp_DataDocs De modo que ao ser acessado via url o endereccedilo httpsrvtesteinfo a partir dele seratildeo
acessados os arquivos da pasta cAp_DataDocs
[srvtesteinfo]
Path=cAp_DataDocs
Vejamos agora como ficou o nosso arquivo INI com todas as configuraccedilotildees acima exemplificadas
Configuiracao de Working Threads usando a infra-estrutura APWEBEX
[ERP_APWEBEX]
type=WEBEX
onstart=STARTWEBEX
onconnect=CONNECTWEBEX
Environment=EnvADS710
Instances=13
Configuraccedilatildeo da seccedilatildeo httpo default para atender agrave requisiccedilotildees de apl e apw
[http]
7
Enable=1
Path=cAp_Datahttp
Environment=EnvADS710
ResponseJob=ERP_APWEBEX
SigaWeb=MAK
Configuraccedilatildeo do host srvteste para atender requisiccedilotildees via apl atraveacutes do environment EnvTOP710
[srvteste]
Path=cAp_DataTestes
Environment=EnvTOP710
Configuraccedilatildeo da pasta virtual info no host srvteste para apontar para um path no disco com documentos
[srvtesteinfo]
Path=cAp_DataDocs
Infra-Estrutura APWEBEX
Revisatildeo 27042004
Abrangecircncia
Versatildeo 811
A Infra-Estrutura APWEBEX Visando o melhor aproveitamento da tecnologia de working threads implementada no servidor Protheus para o processamento de requisiccedilotildees de uma aplicaccedilatildeo web foram desenvolvidas funccedilotildees de apoio miscelacircnea
e infra-estrutura compiladas no repositoacuterio padratildeo de Infra-Estrutura do ERP Microsiga visando simplificar e auxiliar o desenvolvimento de uma soluccedilatildeo web A este conjunto de funccedilotildees demos o nome de Lib de
Infra-Estrutura APWEBEX que engloba atualmente os tratamentos comuns agraves funccedilotildees de inicializaccedilatildeo de ambiente e conexatildeo ( atendimento de requisiccedilotildees http via link apw ) com seus respectivos pontos de
entrada comandos e funccedilotildees de miscelacircnea comuns agraveos projetos de soluccedilotildees web integradas com o ERP
Como utilizar este recurso no desenvolvimento de soluccedilotildees
As funccedilotildees pertinentes agrave Infra-Estrutura APWEBEX jaacute estatildeo implementadas no repositoacuterio padratildeo da ferramenta Protheus 8 e os comandos especiacuteficos que envolvem este recurso encontram-se no arquivo header
apwebexch disponibilizado tambeacutem jonto com a ferramenta Protheus 8
A utilizaccedilatildeo destes recursos para integraccedilatildeo de aplicaccedilotildees envolve a leitura desta documentaccedilatildeo onde seraacute visto com maiores detalhes as possibilidades de uso da ferramenta como a integraccedilatildeo de uma aplicaccedilatildeo Web
com um ambiente e funcionalidades do ERP Microsiga
Como usufruir desta documentaccedilatildeo Todos os toacutepicos pertencentes agrave este grupo satildeo direcionados agraveo desenvolvimento de soluccedilotildees web utilizando as funccedilotildees de Infra-Estrutura APWEBEX aleacutem de ser explicado com detalhes o funcionamento da
tecnologia WEBEX do Protheus e dos recursos nativos da ferramenta englobando os comandos e funccedilotildees publicados exemplos de coacutedigos Advpl utilizando estes recursos configuraccedilatildeo da ferramenta e mensagens de
ocorrecircncias de erro das funccedilotildees e comandos com possiacuteveis causas e soluccedilotildees
Eacute fortemente recomendado que os documentos constantes neste grupo fossem apreciados antes de aprofundar-se nas informaccedilotildees dos proacuteximos toacutepicos
01 Recepccedilatildeo de paracircmetros por Alias Virtuais
Revisatildeo 30042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
A recepccedilatildeo de paracircmetros vindos do Web Browser quando utilizamos Working Threads do tipo WEBEX atraveacutes de links apw eacute realizada atraveacutes de Alias Virtuais especiacuteficos ao inveacutes de receber as informaccedilotildees
GET POST e HEADER em array quando executamos a chamada atraveacutes de link apl A nomenclatura de Alias Virtual foi adotada pois a sintaxe do coacutedigo-fonte eacute exatamente a mesma utilizada quando desejamos
acessar um campo de uma tabela aberta atraveacutes de um alias
Em um ambiente montado para atender agrave requisiccedilotildees via link apw utilizando Working Threads WEBEX podemos nos utilizar dos seguintes alias virtuais
HttpCookies
HttpGet
HttpPost
HttpHeadIn
HttpHeadOut
HttpSession
HttpCookies Atraveacutes do alias virtual HttpCookies eacute possiacutevel consultar os Cookies do Header Http enviados pelo Browser e criar ou alterar o conteuacutedo de um cookie a ser devolvido agraveo Browser Um cookie visto de forma geral eacute
um paracircmetro ao qual atribuiacutemos um nome que uma vez devolvido agraveo Browse solicitante eacute re-enviado ao Protheus a partir da proacutexima requisiccedilatildeo realizada pelo Browser
HttpGet
Para receber os paracircmetros enviados atraveacutes da URL (meacutetodo GET do HTTP) jaacute devidamente convertidos e tratados utilizamos o alias virtual HttpGet onde acessamos pelo nome a propriedade desejada e caso a
mesma tenha sido enviada pelo Browser a mesma eacute retornada como uma String
HttpPost Para receber os paracircmetros submetidos (enviados) pelo Browser atraveacutes do meacutetodo POST jaacute devidamente convertidos e tratados utilizamos o alias virtual HttpPost onde acessamos pelo nome a propriedade desejada
e caso a mesma tenha sido enviada pelo Browser a mesma eacute retornada como uma String
HttpHeadIn
Para a recepccedilatildeo e tratamento das informaccedilotildees recebidas atraveacutes do Header do pacote HTTP foi criado o alias virtual HttpHeadIn que aleacutem de consultar as informaccedilotildees constantes no Header HTTP proveinente da
requisiccedilatildeo do usuaacuterio permite tambeacutem acesso agrave propriedades da conexatildeo atual do usuaacuterio como o IP do usuaacuterio solicitante por exemplo
HttpHeadOut Atraveacutes deste alias virtual de retorno podemos alterar ou criar um paracircmetro no Header de retorno HTTP do Protheus a ser devolvido agraveo Browser solicitante de uma requisiccedilatildeo de processamento
HttpSession O alias virtual HttpSession foi criado para possibilitar a criaccedilatildeo de variaacuteveis session por usuaacuterio do site com controle de identificaccedilatildeo nativa da ferramenta atraveacutes de um cookie de identificaccedilatildeo chamado
SESSIONID No toacutepico Alias Virtual HttpSession eacute explicado em detalhes o funcionamento deste mecanismo
Este recurso nos permite criar atricuir conteuacutedo e consultar conteuacutedo de uma variaacutevel relacionada agraveo usuaacuterio que estaacute realizando uma requisiccedilatildeo http Podemos armazenar em uma variaacutevel de Session os seguintes
tipos de variaacuteveis A (array) C (character) D (data) L (loacutegica) e N (numeacuterica) Natildeo satildeo suportados O (Objetos) eou B (Code Blocks)
Limitaccedilotildees de uso dos alias virtuais para recebimento de paratildemetros
Dadas as caracteriacutesticas operacionais e de acesso agraveos alias virtuais devemos estar atentos agrave nomenclatura de campos de um formulaacuterio HTML para serem recuperados com sucesso pelos alias virtuais correspondentes
A nomenclatura de campos do formulaacuterio deve obedecer agrave regra de criaccedilatildeo de variaacuteveis em Advpl O campo do formulaacuterio deve sempre ser iniciado com um caracter alfabeacutetico pode conter letras ou algarismos no
nome e o caracter _ ( underline ) Natildeo satildeo permititos espaccedilotildes hiacutefen ou caracteres acentuados como nome de um campo Caso utilizado um nome de campo fora do padratildeo suportado o conteuacutedo do mesmo natildeo seraacute
recuperaacutevel em Advpl
8
02 Alias virtual HttpCookies
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpCookies eacute possiacutevel consultar os Cookies do Header Http enviados pelo Browser e criar ou alterar o conteuacutedo de um cookie a ser devolvido agraveo Browser Uma variaacutevel de Cookie retorna um
tipo Advpl String e apenas aceita uma atruibuiccedilatildeo de String Vale lembrar tambeacutem que um cookie eacute um recurso do Browser que estaacute realizando a requisiccedilatildeo e existe um limite de tamanho para o total de Cookies
utilizados Este limite costuma ser proacuteximo a 1024 Bytes
Trata-se portanto de uma propriedade de leitura e gravaccedilatildeo dispniacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Utilizaccedilatildeo de Cookies
A utilizaccedilatildeo de Cookies tecircm objetivo praacutetico restrito agrave aplicaccedilotildees onde haja a necessidade impliacutecita de termos uma informaccedilatildeo relacionada agraveo browser utilizado pelo usuaacuterio atual que devam ser interpretadas
independente do usuaacuterio estar logado ou natildeo ( isto eacute independam diretamente de sessions )
Um exemplo praacutetico disto eacute o desenvolvimento de um site onde o conteuacutedo dinacircmico eacute retornado ao usuaacuterio em mais de um idioma Na entrada do site apresentamos um formulaacuterio ao usuaacuterio onde o mesmo iraacute
escolher o idioma de sua preferecircncia Mesmo que a session de login deste usuaacuterio expire no servidor o cookie com o idioma selecionado ainda estaacute no Browser de modo que a proacutexima requisiccedilatildeo do usuaacuterio pode ser
codificada para direcionaacute-lo para a paacutegina de login do site com as mensagens no idioma que o mesmo jaacute estava navegando
Lendo o valor de um Cookie
Atraveacutes dos exemplos abaixo lemos o valor do Cookie de identificaccedilatildeo do uacutesuaacuterio e um cookie de usuaacuterio criado para identificar no Browse qual eacute o idioma utilizado pelo usuaacuterio atual
cUserId = HttpCookies-gtUSERID Retorna o Cookie identificador do usuaacuterio do Protheus
cIdioma = HttpCookies-gtSiteLang Retorna o conteuacutedo do cookie SiteLang criado
Lendo todos os Cookies recebidos
O alias virtual HttpCookie possui uma propriedade chamada aCookies criada apenas para consulta (read-only) que retorna um Array Advpl de Strings contendo os nomes dos Cookies enviados pelo Browser agraveo
Protheus Por exemplo
aInfo = HttpCookies-gtaCookies
For nI = 1 to len(aInfo)
Mostra no console do Server todos os cookies recebidos
conout(Cookie +str(nI3)+ = + aInfo[nI])
Next
Criando um Cookie
A criaccedilatildeo de um Cookie eacute realizada atraveacutes da atrubuiccedilatildeo de um valor diretamente agraveo cookie desejado Por exemplo
HttpCookies-gtMeuCookie = TESTE
A criaccedilatildeo de um Cookie merece uma atenccedilatildeo especial pois um Cookie eacute retornado agraveo browser atraveacutes do Header de Retorno HTTP De modo que para que a criaccedilatildeo de um cookie seja realizada com sucesso o
mesmo deve ser criado antes de haver qualquer processamento de APH AHU caso este que natildeo seria mais possiacutevel a criaccedilatildeo do Cookie pois o Header de Retorno HTTP jaacute teria sido enviado agraveo browser solicitante
03 Alias virtual HttpGet
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpGet podemos consultar se uma determinada propriedade nos foi enviada atraveacutes da URL ( meacutetodo GET )
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos realizar uma requisiccedilatildeo a um link apw
passando pela URL o paracircmetro IMAGEM com o conteacuteuacutedo TESTE
httplocalhostu_TesteGetapwimagem=testeampcor=azul
Para recuperarmos em Advpl o conteuacutedo dos paracircmetros imagem e cor utilizamos
cImagem = HttpGet-gtimagem
cCor = HttpGet-gtcor
Podemos inserir tambeacutem um tratamento default Caso algum paracircmetro natildeo seja enviado ( resulte NIL ) assumimos um valor para o mesmo
DEFAULT cImagem = LogoAp8
DEFAULT cCor = amarelo
Existe tambeacutem uma propriedade do alias virtual HttpGet chamada aGets onde podemos recuperar um array de strings contendo a lista com os nomes dos paracircmetros enviados pelo browser solicitante Por exemplo
aInfo = HttpGet-gtaGets
For nI = 1 to len(aInfo)
conout(GET +str(nI3)+ = +aInfo[nI])
Next
04 Alias virtual HttpPost
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpPost podemos consultar os campos submetidos agraveo servidor atraveacutes do meacutetodo POST
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro
O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos realizar uma requisiccedilatildeo a um link apw
atraveacutes de um formulaacuterio html com meacutetodo POST partindo do Html abaixo
lthtmlgtltbodygt
ltform method=POST action=httplocalhostu_TstPostapwgt
Teste ltinput type=text name=CODIGO size=10gt
lthrgt
ltinput type=submitgt
ltformgt
ltbodygtlthtmlgt
Para recuperarmos em Advpl o conteuacutedo do campo CODIGO utilizamos
cCodigo = HttpPOST-gtCodigo
Existe tambeacutem uma propriedade do alias virtual chamada aPost onde podemos recuperar um array de strings contendo a lista com os nomes dos paracircmetros enviados pelo browser solicitante Por exemplo
aInfo = HttpPost-gtaPost
For nI = 1 to len(aInfo)
conout(POST +str(nI3)+ = +aInfo[nI])
Next
05 Alias virtual HttpHeadIn
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpHeadIn podemos consultar os paracircmetros enviados pelo Browser solicitante enviados atraveacutes do Header HTTP ao realizar uma requisiccedilatildeo ao Protheus Server
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos consultar o header http User-Agent
enviado pelo Browser solicitante contendo uma String identiificando o modelo de Browser utilizado
cUserAgent = Httpheadin-gtUser_Agent
Devemos obter como retorno uma string parecida com a mostra abaixo
Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)
Observaccedilatildeo Importante Qualquer paracircmetro no Header HTTP que contenha um ou mais caracteres invaacutelidos para a nomenclatura de variaacuteveis Advpl ( como por exemplo o User-Agent que conteacutem um hiacutefen ) satildeo trocados pelo caractere _
underline para ser possiacutevel a leitura da propriedade
Propriedades especiais
HttpHeadIn-gtaHeaders
Retorna um Array de Strings contendo todas as linhas do Header HTTP da requisiccedilatildeo
HttpHeadIn-gtmain
Retorna o nome da funccedilatildeo chamda atraveacutes da URL sem a extensatildeo e sem o host Por exemplo ao chamar o link httplocalhostu_tstHEaderapw o conteuacutedo de HttpHeadin-gtmain seraacute u_tstHEader
9
HttpHeadIn-gtREMOTE_ADDR
Retorna uma string no formato nnnnnnnnnnnn o IP da estaccedilatildeo que realizou a requisiccedilatildeo
httpHeadIn-gtREMOTE_PORT
Retorna um valor Advpl numeacuterico informando a porta utilizada para realizar a requisiccedilatildeo
06 Alias virtual HttpHeadOut
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 LIB WEBEX
Atraveacutes deste alias virtual de retorno podemos alterar ou criar um paracircmetro no Header de retorno HTTP do Protheus a ser devolvido agraveo Browser solicitante de uma requisiccedilatildeo de processamento
Trata-se portanto de uma propriedade de retorno disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
A criaccedilatildeo de uma linha no Header HTTP merece uma atenccedilatildeo especial pois para que a operaccedilatildeo realizada com sucesso o header deve ser criado antes de haver qualquer processamento de APH AHU pois neste caso
o Header de Retorno HTTP jaacute teria sido enviado agraveo browser solicitante
07 Alias virtual HttpSession
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual httpSession podemos criar e consultar variaacuteveis do tipo session relacionadas agraveo usuaacuterio que realizou a requisiccedilatildeo atraveacutes do Browser
Para diferenciar os usuaacuterios que estatildeo navegando num site o Protheus busca por um cookie identificador de usuaacuterio retornado para o browser a cada requisiccedilatildeo de link APW chamado SESSIONID Caso o Protheus
receba este cookie ele identifica quais sessions pertencem a este usuaacuterio
Quando um usuaacuterio realiza a primeira requisiccedilatildeo http ao Protheus o Protheus natildeo recebe o cookie identificador e automaticamente inicializa um identificador de sessions para o mesmo retornando o identificador ao
Browser via Header HTTP Este identificador pode ser recuperado em uma funccedilatildeo advpl atraveacutes de httpSession-gtSESSIONID
Quando criamos uma variaacutevel de session ela pode ser acessada nas proacuteximas requisiccedilotildees provenientes deste mesmo usuaacuterio Caso uma variaacutevel de session consultada natildeo exista ela retorna o valor NIL (nulo)
Vejamos os exemplos abaixo
Criando variaacuteveis Session HttpSession-gtUserId = 123
HttpSession-gtUserName = U_GetUserName()
Nas linhas acima criamos uma session para o usuaacuterio atual chamada UserId com o conteuacutedo do tipo String e criamos outra session chamada UserName com o retorno da funccedilatildeo U_GetUserName()
Consultando variaacuteveis Session Ao consultar uma variaacutevel session sempre devemos prever que a mesma natildeo pode ter sido criada de modo que a consulta pode retornar NIL ou caso a session jaacute exista retornaraacute o valor do tipo que foi atribuiacutedo `a
mesma
If HttpSession-gtUserId = NIL
Session ainda natildeo foi criada Usuaacuterio natildeo estaacute logado
conout(Usuario natildeo estaacute logado)
Else
Session jaacute criada o usuaacuterio estaacute logado
conout(Usuario estaacute logado ID = + HttpSession-gtUserId )
Endif
Exemplo de Funcionamento de Session No exemplo abaixo criamos uma session para identificar quantas vezes o usuaacuterio chamou esta funccedilatildeo especiacutefica Damos o nome da session de MyCounter que iraacute conter um nuacutemero No primeiro acesso do usuaacuterio a
session natildeo existe ( = NIL ) e eacute criada com o valor numeacuterico 1 (um) A partir das proacuteximas requisiccedilotildees realizadas ao Protheus atraveacutes desta paacutegina ( atraveacutes do botatildeo Refresh do Browser por exemplo ) a session jaacute
existe sendo somado o valor 1 agraveo conteuacutedo jaacute existente e devolvido agraveo browser solicitante um Html informando quantas chamadas jaacute foram realizadas por este usuaacuterio
include rwmakech
include apwebexch
User Function TstSession()
Local cHtml = cEcho =
WEB EXTENDED INIT cHtml
If httpSession-gtmycounter = NIL
cEcho = Inicializando contador
Conout(cEcho)
cHtml += cEcho
httpSession-gtmycounter = 1
Else
httpSession-gtmycounter++
cEcho = contador em +str(httpSession-gtmycounter3)
conout(cEcho)
Endif
cHtml += cEcho + lthrgt
WEB EXTENDED END
Return cHtml
Apoacutes compilado o fonte acima e o Server Protheus configurado e iniciado com HTTP habilitado e as working Threads configuradas abra um Web Browser e solicite a url httplocalhostu_tstsessionapw Seraacute
mostrado no Browse a mensagem Inicializando Contador Agora peccedila um Refresh desta tela ao Browser Seraacute devolvida a mensagem Contador em 2 e a cada refresh deste Browser o contador seraacute
incrementado
Uso de Sessions e Paralelismo - Comportamento do Protheus Server
O Protheus Server trata agraves requisiccedilotildees simultacircneas de links APW em paralelo desde que estejam disponiacuteveis o numero de Working Threads necessaacuterio para tal Por exemplo em uma estrutura de Frames onde cada
um deles aponta o SRC (source) para um link apw o Browser envia as trecircs requisiccedilotildees de apw para o Protheus Server e caso extistam 3 working threads disponiacuteveis naquele momento as trecircs requisiccedilotildees satildeo
atendidas em paralelo
Por outro lado se em duas destas trecircs requisiccedilotildees faz-se necessaacuteria a atualizaccedilatildeo eou consulta a uma variaacutevel de Session ( httpsession ) este processamento em paralelo caso natildeo fosse tratado poderia gerar perdas
no conteuacutedo da session caso a mesma session fosse atualizada simultaneamente
Para resolver esta questatildeo de maneira a natildeo sobrecarregar o Servidor com solicitaccedilotildees de Processamento Sequencial ( Critical Sessions ) foi montado um esquema de Lock de Session de Usuaacuterio automaacutetico com
liberaccedilatildeo automaacutetica apoacutes o processamento do APW ou liberaccedilatildeo manual atraveacutes da chamada da funccedilatildeo HttpLeaveSession() antes do processamento ser terminado
Exemplificando a aplicaccedilatildeo praacutetica e funcionamento deste conceito partimos de um ambiente hipoteacutetico utilizando 3 frames onde um usuaacuterio realiza uma requisiccedilatildeo agrave funccedilatildeo que retornaraacute o source HTML da paacutegina
de frames e a mesma ao chegar no Browser faz o mesmo realizar as trecircs requisiccedilotildees simultaneamente todas elas referentes ao mesmo usuaacuterio Poreacutem o primeiro e o segundo frames realizam uma operaccedilatildeo qualquer
com uma ou mais variaacuteveis da Session do usuaacuterio e o terceiro frame realiza um outro processamento que natildeo depende da consulta de nenhuma variaacutevel da Session As trecircs requisiccedilotildees referente a este usuario seratildeo
processadas simultaneamente por working Threads diferentes ( vamos supor que naquele momento haviam trecircs Working Threads disponiacuteveis) poreacutem quando uma das duas working Threads que tentarem acesso agrave uma
variaacutevel de Session daquele usuaacuterio o Servidor verifica se alguma outra Thread estaacute com o flag de acesso agraves sessions deste usuario Se nenhuma outra thread em uso por este usuaacuterio estaacute com a bandeira entatildeo a
thread atual pega a bandeira para ela senatildeo o processamento da Thread eacute congelado no aguardo da liberaccedilatildeo da bandeira
A liberaccedilatildeo da bandeira ocorre automaticamente no retorno da Working Thread para o Browser antes da chamada do ponto de entrada para Reset do Ambiente atraveacutes da chamada na KlibEx da funccedilatildeo
HttpLeaveSession() Caso seja viaacutevel para o usuaacuterio liberar as sessions antes do retorno da funccedilatildeo ele pode utilizar-se da funccedilatildeo httpLeaveSession() no seu fonte sem necessariamente aguardar pelo encerramento
efetivo e reset de ambiente da Working Thread
Logo retornando ao exemplo acima os Frames 1 e 2 iratildeo concorrer pela banceira de atualizaccedilatildeo de conteuacutedo de sessions onde o primeiro frame que a ser executado pegaraacute a bandeira para ele e atualizaraacute a session e
o segundo frame iraacute esperar o primeiro liberar a bandeira para continuar a ser processado e o terceiro frame como natildeo utiliza nenhuma variaacutevel da session seraacute processado sem depender de nenhum dos outros dois
frames anteriores
Quando utilizamos ASP ( Microsoft Active Server Pages ) o mesmo realiza uma serializaccedilatildeo de requisiccedilotildees de paacuteginas ASP por usuaacuterio de modo que caso o mesmo usuaacuterio solicite trecircs frames asp as requisiccedilotildees
de processamento chegaratildeo ao Servidor ASP simultaneamente mas a bandeira de processamento eacute unica por paacutegina asp sendo liberada apenas apos o teacutermino do processamento da paacutegina de modo que mesmo que
nenhuma das paacuteginas faccedila uso de sessions todas as paacuteginas deste usuaacuterio seratildeo processadas em sequecircncia
08 Envio simultacircneo de HTML ao Browser
Revisatildeo 30042004
Abrangecircncia
10
Versatildeo 710 Versatildeo 811 LIB WEBEX
As aplicaccedilotildees web desenhadas para utilizar a Infra-Estrutura APWEBEX contam com o recurso de Envio simultacircneo de Html ao Browser durante o processamento de uma paacutegina Advpl-ASP ( APH eou AHU )
Este recurso eacute habilitado atraveacutes do Protheus IDE nas opccedilotildees de configuraccedilatildeo de compilaccedilatildeo do ambiente em questatildeo mais especificamente habilitado atraveacutes do CheckBox [ ] Exibir conteuacutedo do Advpl ASP
progressivamente no Browser
Ao habilitamos esta configuraccedilatildeo todos os arquivos APH e AHU satildeo parseados fazendo internamente o uso da funccedilatildeo HttpSend() de modo que mesmo antes do processamento estar concluiacutedo o Html gerado jaacute estaacute
sendo enviado agraveo Browser qoe o solicitou
A utilizaccedilatildeo deste recurso provecirc um ganho de performance subtancial na aplicaccedilatildeo final Todos os projetos desenvolvidos com esta tecnologia ( Infra-Estrutura APWEBEX ) devem ter esta configuraccedilatildeo de compilaccedilatildeo
habilitada no IDE Vale lembrar que caso este recurso natildeo esteja habilitado ao habilitaacute-lo os arquivos aph e ahu do projeto necessitam ser recompilados para que esta configuraccedilatildeo tenha o efeito desejado
Pode existir a necessidade de um processamento de um APH ou AHU natildeo enviar o script Html gerado diretamente ao Browser Para tal situaccedilatildeo podemos desabilitar temporariamente este recurso de envio de html
progressivo em tempo de execuccedilatildeo permitindo assim por exemplo uma funccedilatildeo chamar em sequecircncia dois arquivos APH um para gerar um conteuacutedo Html a ser enviado via e-mail armazenado em uma variaacutevel
Advpl e outro APH para a montagem de uma tela de status que seraacute enviada agraveo Browser solicitante
Para habilitar eou desabilitar o envio simultacircneo do Script HTML agraveo browser em tempo de execuccedilatildeo utilize a funccedilatildeo HttpSetPart()
09 Configuraccedilotildees especiacuteficas APWEBEX
Revisatildeo 26042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Ao utilizarmos as funccedilotildees de Infra-estrutura APWEBEX existem recursos da lib que exigem uma configuraccedilatildeo adicional para serem utilizados
Envio de e-mail automaacutetico atraveacutes da Rotina de Tratamento de Erro do Site
Em caso de erro fatal na aplicaccedilatildeo Web a proacutepria rotina de tratamento de erro pode ser configurada para enviar um e-mail agraveo Administrador do sistema Para tal eacute necessaacuterio inserir as chaves abaixo na seccedilatildeo
do ambiente em uso para o site
ErrorSMTP= (endereccedilo do servidor SMTP a ser usado para o envio do e-mail )
ErrorMail= ( um ou mais endereccedilos de e-mail a receber op e-mail de erro separados por virgula )
ErrorFrom= ( um e apenas um endereccedilo de e-mail a ser usado como remetente do aviso de erro )
ErrorLogin = ( nome de usuario de login no servidor de SMTP caso necessaacuterio )
ErrorPassword= ( senha do usuario de login no servidor de SMTP caso necessaacuterio )
WebAdmin - Login alternativo
A infra-estrutura APWEBEX exige um usuaacuterio e senha para entrar no moacutedulo de administraccedilatildeo WebAdmin Para validar o login eacute utilizado o arquivo de senhas do ERP O usuaacuterio deve ser o Administrador ou
pertencer ao grupo de administradores para ter acesso agraveo WebAdmin Caso natildeo seja viaacutevel usar este arquivo de senhas para validar o login podemos inserir uma chave adicional ( AdmLogin ) no Environment em uso
pela aplicaccedilatildeo Web e configurar nela a senha do usuaacuterio Administrador para login no WebAdmin Caso esta chave seja configurada o arquivo de senhas do ERP natildeo seraacute utilizado para validar o login no WebAdmin
AdmLogin= ( senha do Administrador para logar no WebAdmin )
Pasta alternativa para upload de Rpo via WebAdmin No WebAdmin eacute possiacutevel utilizar uma configuraccedilatildeo especiacutefica para a troca do repositoacuterio de objetos em uso no site sem que seja necessaacuterio parar o servidor para isso Por default a pasta de upload chama-se
SwapRPO e deve existir na estrutura de diretoacuterio do ambiente utilizado a partir do diretoacuterio raiz do ambiente ( RootPath )
RpoUpload= ( pasta de upload alternativa a partir do RootPath do ambiente )
10 Recomendaccedilotildees finais
Revisatildeo 17122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Para todo o desenvolvimento de soluccedilotildees temos em matildeos uma diversidade de recursos desenhados para melhor atender agraves necessidades e adequar-se agraves caracteristicas da aplicaccedilatildeo Dada a flexibilidade dos recursos
recomenda-se aos desenvolvedores adotarem um padratildeo de desenvolvimento e ter em foco a eficiecircncia da aplicaccedilatildeo final tanto no aspecto funcional como na codificaccedilatildeo
Lanccedilando matildeo da experiecircncia em desenvolvimento de aplicaccedilotildees web adquiridas nos uacuteltimos anos nos toacutepicos abaixo estatildeo relacionadas algumas medidas tomadas no desenvolvimento de aplicaccedilotildees que nos satildeo muito
uacuteteis no decorrer de um projeto
Nomenclatura de Funccedilotildees
Para o desenvolvimento de aplicaccedilotildees web foi criado o Statement WEB FUNCTION para a declaraccedilatildeo de funccedilotildees referentes agrave projetos web Este comando na praacutetica apenas prefixa a declaraccedilatildeo da funccedilatildeo com
W_ poreacutem a sua utilizaccedilatildeo identifica que a funccedilatildeo em questatildeo foi construiacuteda uacutenica e exclusivamente para ser chamada a partir de uma requisiccedilatildeo HTTP Em adendo agrave este devemos utilizar os comandos WEB
EXTENDED INIT END disponivels no Include apwebexch para proteger a funccedilatildeo de ser chamada em um ambiente que natildeo o APWEBEX
Separando a Interface do Processamento
Ao desenvolver utilizando Advpl ASP paacuteginas APH AHU recomenda-se separar o processamento da Interface do seguinte modo Criar uma Web Function para a chamdada de umna paacutegina com conteuacutedo
dinacircmico via link apw e um arquivo APH ou AHU de mesmo nome que seraacute chamado internamente de modo que o coacutedigo-fonte escrito na Web Function seja responsaacutevel para gerar as informaccedilotildees a serem
disponibilizadas para o usuaacuterio e o APH contenha apenas a maacutescara destas informaccedilotildees e o miacutenimo de instruccedilotildees Advpl possiacutevel para a montagem da paacutegina Este processo facilita a manutenccedilatildeo de amobos
os coacutedigos pois o Web Designer que iraacute realizar um ajuste no APH natildeo teraacute que desviar do fonte Advpl inserido na paacutegina e o Analista Programador que faraacute a manutenccedilatildeo no coacutedigo Advpl preocupar-se-aacute apenas
com o coacutedigo responsaacutevel para a geraccedilatildeo dos dados que seratildeo mascarados
Utilizaccedilatildeo das Funccedilotildees de Infra-Estrutura
Atraveacutes dos comandos e funccedilotildees disponibilizadas na Infra-Estrutura APWEBEX natildeo tecircmos a necessidade de recriar partes comuns de coacutedigo para todos os projetos que se utilizem desta tecnologia aleacutem de permitir
atraveacutes de pontos de entrada estrategicamente colocados na ferramenta um niacutevel altiacutessimo de customizaccedilatildeo para os projetos desenvolvidos com esta tecnologia de maneira praacutetica e objetiva
11 Monitoramento de Sites em WEBEX
Revisatildeo 17122003
Abrangecircncia
LIB WEBEX
O Objetivo de uma funccedilatildeo de Monitoramento de Sites eacute testar as funcionalidades baacutesicas de um site retornando uma mensagem HTML preacute-definida indicando que estaacute tudo certo e em caso de erro uma
mensagem que procure identificar o que estaacute de errado
Para sites desenvolvidos em Protheus utilizando a tecnologia WEBEX devemos criar uma funccedilatildeo especiacutefica para o site que iraacute determinar se o mesmo estaacute operacional Esta funccedilatildeo seraacute chamada atraveacutes de link
apw
Vejamos o exemplo abaixo escrito para um site cujas bases de dados estatildeo num SQL acessadas via TopConnect Neste exemplo a funccedilatildeo chamada seraacute httpservidorU_SiteMonitorapw e caso esteja tudo certo
ela retornaraacute a string (SITE OK) seguido da data e horaacuterio da execuccedilatildeo da rotina Qualquer retorno diferente disto poderaacute indicar uma anomalia no funcionamento do site
Quando hospedado um site utilizando esta tecnologia no DataCenter da Makira esta informaccedilatildeo gerada pela rotina deve ser passada agraveo depto de infra-estrutura que configuraraacute um software Monitor de Sites que iraacute
realizar a cada um minuto uma requisiccedilatildeo agrave url especificada e iraacute emitir um alerta ao Departamento para que seja verificado o site caso haja alguma falha na resposta include protheusch
include apwebexch
User Function SiteMonitor()
Local cQuery nQtdRec
Verifica se a working Thread estaacute conectada com o TOP
If TCIsConnected()
Return Working Thread perdeu a conexatildeo com o TOP
Endif
Verifica se as tabelas principais estatildeo abertas
If select(SA1)=0
Return Tabela SA1 natildeo estaacute aberta
Endif
If select(SC5)=0
Return Tabela SC5 natildeo estaacute aberta
Endif
Executa uma query de contagem de registros de uma tabela do sistema
cQuery = SELECT count() as QTDREC from SA1010
OPEN QUERY cQuery ALIAS TMPCOUNT
nQtdRec = TMPCOUNT-gtQTDREC
CLOSE QUERY TMPCOUNT
If nQtdRec=0
11
Return Falha na Contagem de registros Query SA1
Endif
Se estaacute tudo certo retorna um HTML informando que estaacute tudo OK
Return (SITE OK) +dtos(date())+ +time()
Comandos - CLOSE QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CLOSE QUERY cAlias
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAlias Caracter Alias sob o qual o cursor da Query foi aberto Caso o alias passado como paracircmetro natildeo se encontre aberto a funccedilatildeo natildeo gera nenhuma ocorrecircncia de
erro
Descriccedilatildeo
Atraveacutes do comando Close Query realizamos o fechamento de uma query aberta atraveacutes do comando OPEN QUERY
ATENCcedilAtildeO Uma query aberta pelo comando OPEN QUERY deve ser fechada pelo comando CLOSE QUERY Poderiacuteamos fechar o alias aberto atraveacutes de uma Query simplesmente com a funccedilatildeo
DbCloseArea() poreacutem isto deixaria em aberto elementos internos de controle criados pelo comando OPEN QUERY
Comandos - OPEN QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
OPEN QUERY ltcQuerygt ALIAS ltcAliasgt [ [NOCHANGE] ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcQuerygt Caracter cQuery corresponde agrave String contendo a Query a ser executada no banco de dados
ALIAS ltcAliasgt Caracter cAlias corresponde ao nome do alias sob o qual o cursor de retorno dos dados pesquisados seraacute aberto no ambiente Advpl Natildeo pode ser especificado
um nome de alias jaacute em uso senatildeo a aplicaccedilatildeo seraacute finalizada com a ocorrecircncia de erro Alias already in Use
[NOCHANGE] Caracter Caso especificada a claacuteusola NOCHANGE na abertura da query a string em cQuery natildeo seraacute submetida agrave funccedilatildeo ChangeQuery()
Descriccedilatildeo
Atraveacutes do comando OPEN QUERY realizamos a abertura de uma Query de busca no Banco de Dados atraveacutes do RDD TOPCONN retornando os dados consultados atraveacutes de um ALIAS Advpl
Caso a Query nao possa ser aberta por erro de sintaxe devido agrave thread atual natildeo estar conectada com o TopConnect ou outro erro seraacute gerado um log de erro informando o Alias o Stack ( Pilha de Chamadas ) de
execucatildeo e o conteuacutedo da Query para Debug
OBSERVACcedilOtildeES IMPORTANTES
Na montagem da string da Query devemos especificar os comandos SQL alias e nomes de campos em letras maiuacutesculas
Quando utilizamos o comando OPEN QUERY natildeo precisamos passar a expressatildeo da Query atraveacutes da funccedilatildeo ChangeQuery() Este proceduimento jaacute eacute realizado internamente pelo comando OPEN
QUERY Para que a query natildeo seja submetida agrave funccedilatildeo ChangeQuery() devemos utilizar o paracircmetro NOCHANGE
A utilizaccedilatildeo deste comando eacute impliacutecita agrave LIB APWEBEX e necessita da utilizaccedilatildeo do include Apwebexch
Comandos - WEB EXTENDED END
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED END ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando para fechar uma seccedilatildeo aberta pelo comando WEB EXTENDED INIT Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do
comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
Comandos - WEB EXTENDED INIT
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED INIT ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando juntamente com o comando WEB EXTENDED END quando montamos uma funcatildeo ( Web Function ) que foi construiacuteda para ser chamada a partir de um Web Browser quando nos
utilizamos das funccedilotildees de Infra-Estrutura APWEBEX
Atraveacutes dele eacute realizada uma preacute-validaccedilatildeo que certifica que a execuccedilatildeo da funccedilatildeo somente seraacute realizada caso a thread atual seja realmente uma Thread montada no ambiente WEBEX aleacutem de podermos inserir uma
preacute-validaccedilatildeo (START) de execuccedilatildeo especiacutefica para esta funccedilatildeo
Caso seja especificada uma funccedilatildeo na claacuteusula START a mesma deveraacute retornar uma String Retornando uma String em branco o processamento da funccedilatildeo original seraacute efetuado normalmente Caso a funccedilatildeo retorne
uma string natildeo-vazia esta string seraacute retornada para a variaacutevel cHtml e o processamento do programa seraacute desviado para a linha do coacutedigo-fonte imediatamente posterior agraveo comando WEB EXTENDED END
Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
12
Infra-Estrutura APWEBEX - EnvUserAPL - Exemplo de Uso com ERP
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo praacutetico abaixo utilizamos em um coacutedigo fonte Advpl os pontos de entrada disponibilizados na Infra-Estrutura APWEBEX para realizar a preparaccedilatildeo de um ambiente ERP Reset de Ambiente
finalizaccedilatildeo de Thread finalizaccedilatildeo de sessions por time-out e customizaccedilatildeo de mensagem de erro para o desenvolvimento de um projeto de Web Site integrado com o ERP Microsiga
Devemos adotar como padratildeo para projetos que utilizam APWEBEX a criaccedilatildeo do arquivo EnvUserapl especificamente para a definiccedilatildeo dos pontos de entrada utilizados pela Infra-Estrutura
APWEBEX e devemos apenas compilar os fontes dos pontos de entrada realmente necessaacuterios agraveo projeto INCLUDE PROTHEUSCH
INCLUDE APWEBEXCH
====================================================================================
Exemplo de Arquivo de Lib de Projeto APWEBEX utilizando os pontos de entrada
da lib para preparaccedilatildeo de ambiente reset de ambiente e tratamento de erro
utilizando APWEBEX em conjunto com o ERP Microsiga
====================================================================================
----------------------------------------------------------------------------
Ponto de Entrada StartWebEx( NIL ) =gt T ou F
Ponto de entrada executado na inicializaccedilatildeo de cada Working Thread ( ONSTART )
Eacute a responsaacutevel por preparar o ambiente para atender agraves requisiccedilotildees WEB de links apw
Natildeo recebe paracircmetro algum da lib e deve retornar T caso tenha inicialziado com sucesso
ou F em caso de falha de inicializaccedilatildeo
----------------------------------------------------------------------------
USER Function StartWebEx()
Prepara o Ambiente ERP
PREPARE ENVIRONMENT
EMPRESA 01
FILIAL 01
TABLES ZX1ZX2ZX3ZX4ZZ1ZZ2ZZ3ZZ4ZZ5
Return T
-------------------------------------------------------------------------------
Ponto de Entrada ConnectWebEx(cFnName) =gt cHtml ou
Ponto de entrada executado imediatamente antes do processamento de uma requisiccedilatildeo de um link APW
Recebe como paracircmetro o nome da funccedilatildeo a ser executada passada no link
Deve retornar uma String que seraacute retornada ao ao Browser solicitante Caso retorne uma string
em branco (vazia) a funccedilatildeo originalmente solicitada eacute executada pela lib
Caso contraacuterio a funccedilatildeo original natildeo eacute executada e a string retornada eacute enviada ao Browser
-------------------------------------------------------------------------------
USER Function ConnectWebEx(cFnName)
Local cHtmlConn =
conout(Vou executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada ResetWebEx(cFnName) =gt cHtml ou
Funccedilatildeo chamada imediatamente Apos a execuccedilatildeo de uma requisiccedilatildeo APW
Recebe como paracircmetro o nome da funccedilatildeo executada e permite tambeacutem que seja acrescentado
algo a mais no Html a ser retornado ao Browser
-------------------------------------------------------------------------------
USER Function ResetWebEx(cFnName)
Local cHtmlConn =
conout(Terminei de executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada FINISHWEBEX()
Funccedilatildeo chamada no fechamendo do ambiente de uma working Thread Apos a execuccedilatildeo deste
a Thread utilizada eacute eliminada da memoacuteria
-------------------------------------------------------------------------------
USER Function FINISHWEBEX()
conout(Finalizando a Working Thread)
Return
-------------------------------------------------------------------------------
Ponto de Entrada ENDSESSION(cSessionId) =gt NIL
Ponto de entrada chamado em uma working Thread quando a session de um usuaacuterio seraacute
eliminada da memoacuteria por time-out Recebe como parametro o Id de sessions de usuario
que estaacute sendo finalizado
-------------------------------------------------------------------------------
USER Function ENDSESSION(cSessionId)
Conout(Sesssion +cSessionId+ limpa da memoacuteria)
Return
----------------------------------------------------------------------------
Ponto de Entrada WebExError(ecErrorLogcHtml) =gt cCustomHtml ou
Esta funcao eacute chamada pela rotina de tratamento de erro WEBEX quando ocorre um erro fatal
e permite que seja retornado um Html de tratamento de erro diferenciado Ela recebe como
parametro o objeto do erro a mensagem ASCII que foi acrescentada ao arquivo errorlog
e o Html original montado pela rotina de tratamento de erro default
IMPORTANTE Por sem um ponto de entrada executado em um momento criacutetico (tratamento
de erro ) esta funccedilatildeo deve ser o mais suscinta e simples possiacutevel natildeo utilizando
sessions banco de dados etc
----------------------------------------------------------------------------
USER Function WebExError(oErrorcErrorLogcHtml)
Local cCustomHtml =
Monta mensagem de erro mais amigavel
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
13
Ocorreu um erro inesperado no
cCustomHtml += processamento desta paacutegina O Administrador do sistema seraacute notificado desta
cCustomHtml += ocorrecircncia Recomendamos fortemente que esta janela do navegador seja cCustomHtml += fechada e uma nova janela seja aberta para retornar agrave navegaccedilatildeo do site
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
Return cCustomHtml
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Nos exemplo abaixo utilizamos a funccedilatildeo escape() para formatar paracircmetros para inserir em uma URL cUrl = httplocalhostwebinfoapw
cPAram1 = Teste de Parametro 01-02
cPAram2 = reserva
cPAram3 = 1+2+3
cUrl += Par01= + escape(cPAram1) + ampPAr02= + escape(cPAram2) + ampPar03= + escape(cPAram3)
O conteudo de cUrl deveraacute ser httplocalhostwebinfoapwPar01=Teste20de20Parametro2001-02ampPAr02=23reserva23ampPar03=12B22B3
proacuteprio para a monyahem de um link
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETJOBPROFSTRING
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
O exemplo abaixo executado em uma thread iniciada a partir de um JOB WEBEX recupera algumas configuraccedilotildees atuais em uso para este JOB cJobType = GetJobProfString(type(empty) )
cInstances = GetJobProfString(Instances(empty) )
cInacTime = GetJobProfString(InactiveTimeout(default) )
cExpTime = GetJobProfString(ExpirationTime(default) )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETPARVALUE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo satildeo montados dois arrays multi-dimensionais com 2 dimensotildees e satildeo realizadas buscas nos mesmos explorando todas as possibilidades de uso da funccedilatildeo GetParValue() Local aTeste1 =
Local aTeste2 =
Aadd(aTeste1AliasTMP1)
Aadd(aTeste1Relacao2x3)
Aadd(aTeste2AliasTMP2)
Aadd(aTeste2Info---Informaccedilatildeo adicional---)
Busca apenas no array ateste1
cAlias = GetParValue(ALIASaTeste1)
cRelacao = GetParValue(RELACAOaTeste1)
cInfo = GetParValue(INFOaTeste1)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) (nao encontrado)
Busca apenas no array ateste2
cAlias = GetParValue(ALIASaTeste2)
cRelacao = GetParValue(RELACAOaTeste2)
cInfo = GetParValue(INFOaTeste2)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP2
conout(cRelacao) (nao encontrado)
conout(cInfo) ---Informaccedilatildeo Adicional---
Busca em ambos os Arrays
Primeiro no aTeste1 e depois no aTeste2
cAlias = GetParValue(ALIASaTeste1aTeste2)
cRelacao = GetParValue(RELACAOaTeste1aTeste2)
cInfo = GetParValue(INFOaTeste1aTeste2)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) ---Informaccedilatildeo Adicional---
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo abaixo geramos a string com o DUMP de um arquivo HTML salvo na pasta WEB a partir do RootPath do Environment O Dump do arquivo seraacute mostrado no Console do servidor e no Web
Browser que solicitou a funccedilatildeo U_DumpTestapw
include protheusch
include apwebexch
User Function DumpTest()
Local cHtml =
Local cTXTFile =
Local cDump =
WEB EXTENDED INIT cHtml
14
Le o arquivo
cTTXFile = memoread(WebDefaulthtm)
Gera a string com o Dump do arquivo
cDump = HExStrDump(cTTXFile)
Mostra o Dump no console
conout(cDump)
Gera HTML para a visualizaccedilatildeo do DUMP
cHtml = VarInfo(DUMPHtmlnotags(cDump)tf)
WEB EXTENDED END
Return cHtml
Exemplo do Texto mostrado no Console
HexSTRDump ( String 237 Start 1 Length 237 )
-------------------------------------------------------------------------------
3C 48 54 4D 4C 3E 3C 48 45 41 44 3E 0D 0A 3C 4D | ltHTMLgtltHEADgt__ltM
45 54 41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 | ETA HTTP-EQUIV=
43 6F 6E 74 65 6E 74 2D 54 79 70 65 22 20 63 6F | Content-Type co
6E 74 65 6E 74 3D 22 74 65 78 74 2F 68 74 6D 6C | ntent=texthtml
22 0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 | __ltMETA HTTP-EQ
55 49 56 3D 22 70 72 61 67 6D 61 22 20 63 6F 6E | UIV=pragma con
74 65 6E 74 3D 22 6E 6F 2D 63 61 63 68 65 22 3E | tent=no-cachegt
0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 55 | __ltMETA HTTP-EQU
49 56 3D 22 45 78 70 69 72 65 73 22 20 63 6F 6E | IV=Expires con
74 65 6E 74 3D 22 2D 31 22 3E 0D 0A 3C 4D 45 54 | tent=-1gt__ltMET
41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 52 65 | A HTTP-EQUIV=Re
66 72 65 73 68 22 20 63 6F 6E 74 65 6E 74 3D 22 | fresh content=
30 3B 20 75 72 6C 3D 2F 77 5F 77 45 78 30 30 30 | 0 url=w_wEx000
2E 61 70 77 22 3E 3C 2F 48 45 41 44 3E 0D 0A 3C | apwgtltHEADgt__lt
2F 48 45 41 44 3E 3C 2F 48 54 4D 4C 3E | HEADgtltHTMLgt
-------------------------------------------------------------------------------
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HTMLNOTAGS
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo a funccedilatildeo HtmlNoTags eacute utilizada para permitir a utilizaccedilatildeo de caracteres especiais no conteuacutedo de um input para um formulaacuterio Html Local cHtml =
Local cInput =
Conteudo do campo com tags HTML intepretaacuteveis
cInput =
Ao montar o Input aplicar a HtmlNoTags() ao conteudo do mesmo
cHtml +=
+HtmlNoTags(cIn
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
15
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos a funccedilatildeo RetSqlAce para montar uma query de busca por tiacutetulo de uma determinada informaccedilatildeo considerando todas as possibilidades de acentuaccedilatildeo independentemente de como o
banco foi alimentado eou a string de busca foi digitada
IMPORTANTE Na expressatildeo da Query o campo da tabela deve ser passado pela funccedilatildeo LOWER do BAnco pois a funccedilatildeo retsqlace monta a string para busca com letras minuacutesculas cFind = acentuaccedilatildeo
cQuery = SELECT FROM + RetSqlTab(ZZ1)
cQuery += WHERE LOWER(ZZ1_TITULO) LIKE +RetSqlAce(cFind)+
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VALTOSQL
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = + ValToSql(02)
cQuery += AND FA2_DTINC lt= + ValToSql(date())
O exemplo acima caso escrito de forma a realizar as conversotildees especiacuteficas para cada tipo de conteuacutedo seria o equivalemte ao coacutedigo abaixo
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = 02
cQuery += AND FA2_DTINC lt= + DTOS( date() )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VARINFO
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo eacute gerada uma string HTML com as informaccedilotildees do retorno da chamada de duas funccedilotildees baacutesicas da Linguagem Advpl User Function InfoTeste()
Local cHtml =
cHtml += VarInfo(lsquoDatersquodate())
cHtml += VarInfo(lsquoTimelsquotime())
Return cHtml
Deve ser gerado um echo no Console do Servidor parecido com este abaixo
Date -gt D ( 10) [08122003]
Time -gt C ( 8) [201748]
Infra-Estrutura APWEBEX - Exemplo das funccedilotildees de acentuaccedilatildeo ApWebEX
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo vemos a diferenccedila de comportamento entre as funccedilotildees baacutesicas da Linguagem Advpl Upper() e Lower() e a funccedilatildeo de Infra-estrutura Capital() em relaccedilatildeo agraves funccedilotildees da Infra-estrutura
APWEBEX UpperAce() LowerAce() e CApitalAce() quando utilizamos caracteres acentuados cRetorno =
cFrase = natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
cRetorno += Original + cFrase + CRLF
cRetorno += Upper() + upper(cFrase) + CRLF
cRetorno += Lower() + lower(cFrase) + CRLF
cRetorno += Capital() + capital(cFrase) + CRLF
cRetorno += UPPERACE() + UPPERACE(cFrase) + CRLF
cRetorno += LOWERACE() + LOWERACE(cFrase) + CRLF
cRetorno += CAPITALACE() + CAPITALACE(cFrase) + CRLF
Neste ponto a variaacutevel cRetorno deveraacute conter
Original natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
Upper() NatildeO Haacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSotildeES PARA O INEXPLICaacuteVEL
Lower() natildeo haacute explicaCcedilOtildees considerando excessotildees para o inexplicaacutevel
Capital() Natildeo Haacute ExplicaCcedilOtildees Considerando Excessotildees Para O Inexplicaacutevel
UPPERACE() NAtildeO HAacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSOtildeES PARA O INEXPLICAacuteVEL
LOWERACE() natildeo haacute explicaccedilotildees considerando excessotildees para o inexplicaacutevel
CAPITALACE() Natildeo Haacute Explicaccedilotildees Considerando Excessotildees Para O Inexplicaacutevel
Infra-Estrutura APWEBEX - Exemplos das funccedilotildees NTOC e CTON
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos as funccedilotildees cton e ntoc para realizar conversotildees de nuacutemeros em base decimal para outras bases numeacutericas e vice-versa
16
nNum1 = CTON(011010012) Converte binaacuterio para decimal
nNum2 = CTON(00DA25FE16) Converte Hexadecimal para decimal
nNum1++ Soma 1 ao numero em nNum1
nNum2++ Soma 1 ao numero em nNum2
cNum1 = NtoC(nNum128) Converte para binaacuterio novamente
cNum2 = NtoC(nNum2168) Converte para Hexa novamente
-------------------------------------------------------------------------
Ao final do programa cNum1 seraacute 01101010 e cNum2 seraacute 00DA25FF
-------------------------------------------------------------------------
APWEXADDERR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
APWEXADDERR ( [ cTitulo ] [ cInfo ] ) --gt T
Paracircmetros
Argumento Tipo Descriccedilatildeo
cTitulo Caracter cTitulo corresponde a um tiacutetulo identificador da informaccedilatildeo Deve ter no maacuteximo 20 caracteres Os caracteres acima da vigeacutesima posiccedilatildeo seratildeo
ignorados
cInfo Caracter cInfo corresponde agrave Informaccedilatildeo a ser acrescentada ao ERRORLOG em caso de erro
Retorno
Tipo Descriccedilatildeo
Loacutegico Esta funccedilatildeo sempre retorna T
Descriccedilatildeo
Atraveacutes da funccedilatildeo ApWExAddErr() podemos acrescentar uma string de informaccedilotildees adicionais em um buffer em memoacuteria descarregado na geraccedilatildeo do ERRORLOG no caso de uma ocorrecircncia de erro fatal na
working thread atual
Caso a funccedilatildeo seja chamada sem nenhum paracircmetro a uacuteltima ocorrecircncia acrescentada pela funccedilatildeo eacute eliminada da pilha interna de informaccedilotildees
ATENCcedilAtildeO Esta funccedilatildeo deve ser apenas utilizada em casos de necessidade de obtenccedilatildeo de informaccedilotildees especiacuteficas acerca de uma ocorrecircncia de erro natildeo reproduzida em ambiente de testes eou natildeo depuraacutevel pois
seu uso desnecessaacuterio prejudica a performance da aplicaccedilatildeo final
CAPITALACE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CAPITALACE ( lt cString gt ) --gt cStrCapital
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida
Retorno
Tipo Descriccedilatildeo
Caracter String resultante convertida para munuacutesculo com as primeiras letras das palavras significantes em maiuacutesculo
Descriccedilatildeo
Semelhante agrave funccedilatildeo de Infra-estrutura Capital() poreacutem converte tambeacutem caracteres acentuados
A funccedilatildeo CapitalAce() converte todos os caracteres de uma String para minuacutesculo e a primeira letra das palavras significantes para maiuacutesculo semelhante agrave funccedilatildeo Capital() poreacutem considera e converte tambeacutem
caracteres acentuados em OEM eou ANSI
CTON
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CTON ( lt cString gt lt nBase gt ) --gt nNumero
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave representaccedilatildeo de um nuacutemero em outra base numeacuterica compreendida entre 2 e 36
nBase Numeacuterico nBase corresponde agrave base numeacuterica utilizada pelo numero representado em cString
Retorno
Tipo Descriccedilatildeo
Numeacuterico Nuacutemero recebido como paracircmetro em notaccedilatildeo decimal ( Base 10 )
Descriccedilatildeo
Converte um nuacutemero representado em String de base 2 a 36 para um nuacutemero em base decimal (10)
Observaccedilatildeo Importante
Satildeo considerados caracteres vaacutelidos para compor um nuacutemero de base 36 os 10 algarismos numeacutericos de 0 a 9 e os 26 caracteres alfabeacuteticos maiuacutesculos compreendidos entre A e Z Quaisquer caractetes presentes na
String de paracircmetro fora desta faixa de dados eou fora da base ( por exemplo uma conversatildeo de string base 2 - binaacuterio - da string 01001020 ) retornaraacute -1 ( menos um )
ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
ESCAPE ( lt cString gt ) --gt cEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute uma sequecircncia de caracteres a ser processada
Retorno
Tipo Descriccedilatildeo
Caracter cEscaped corresponde agrave string original com os caracteres reservados utilizando a notaccedilatildeo HH
Descriccedilatildeo
A funccedilatildeo Escape() deve ser utilizada para realizar conversotildees de caracteres especiais e reservados quando da necessidade de passagem de paracircmetros via URL
A sintaxe de uma requisiccedilatildeo via URL para a passagem de paracircmetros eacute
(link)param=conteudoampparam2=conteudo2amp
Quando passamos paracircmetros via url devemos tomar o cuidado de natildeo utilizar caracteres reservados e especiais nos nomes e conteuacutedos de paracircmetros Para realizar estas conversotildees utilizamos a funccedilatildeo Escape()
17
EXECINPAGE
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXECINPAGE ( lt cAPHPage gt ) --gt cHTMLPage
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAPHPage Caracter Corresponde agraveo nome do APH que deve ser executado sem a extensatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cHtmlPage corresponde agrave string HTML gerada pela paacutegina APH AHU
Descriccedilatildeo
Atraveacutes da funccedilatildeo ExecInPage() executamos uma paacutegina APH passada como paracircmetro A funccedilatildeo deveraacute retornar a String HTML correspondente agrave paacutegina processada
Poreacutem a funccedilatildeo ExecInPage() realiza tratamentos adicionais padratildeo relacionaodo agraveo comportamento dos Projetos WEB referentes agrave customizaccedilotildees da segunte maneira
1 Primeiro eacute verificado se existe uma paacutegina AHU compilada com o nome cAPHPage Caso exista a mesma seraacute executada pela execinpage
2 Caso natildeo exista AHU com este nome eacute procurado pelo APH Caso o APH exista o mesmo seraacute executado pela ExecInPage
3 Caso natildeo existam no RPO atual o APH nem o AHU com o nome especificado no paracircmetro cAPHFile o processamento eacute abortado com a ocorrecircncia de erro [APWEXERR_0007] APH page
[ltcAPHPagegt] not found in RPO 4 Antes de executar o APH ou AHU identificado nos passos anteriores eacute verificado se existe um ponto de entrada ( User Function ) compilado com o mesmo nome do APH Caso exista o ponto de
entrada eacute executado Ele deveraacute retornar uma String HTML Se for retornada alguma string a funccedilatildeo retorna a tring retornada e natildeo processa o APH AHU Observaccedilatildeo A funccedilatildeo ExecInPage natildeo iraacute executar este
tratamento da User Function com o nome de cAPHPage caso a funccedilatildeo ExecInPage() esteja sendo executada atraveacutes de uma USER FUNCTION
Observaccedilatildeo Importante - Envio parcial de HTML agraveo Browser A funccedilatildeo ExecInpage() juntamente com o APH compilado ao serem processados iratildeo tentar enviar o conteuacutedo HTML para o Browser solicitante durante o processamento de modo que a funccedilatildeo normalmente iraacute
retornar uma String vazia
Caso seja necessaacuteria a execuccedilatildeo de uma paacutegina APH ou AHU e o natildeo-envio da mesma para o Browse por exemplo para a geraccedilatildeo de um coacutedigo HTML a ser enviado via e-mail revemos utilizar a funccedilatildeo
HttpSetPart() realizando uma chamada da mesma antes da ExecInPage() passando o paracircmetro F para desabilitar temporariamente o envio de HTML simultacircneo ao Browser e apoacutes a execuccedilatildeo da ExecInPage()
devemos re-habilitar o envio simultacircneo atraveacutes da chamada da funccedilatildeo HttpSetPart() com o paracircmetro T
EXISTPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTPAGE ( lt cAphFile gt ) --gt lFound
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAphFile Caracter Nome do arquivo APH sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Caracter Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistPage() para identificarmos no ambiente atual se um determinado arquivo APH encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistPage(teste)
conout(testeaph compilado neste RPO)
Else
conout(testeaph NAO compilado neste RPO)
Endif
EXISTUSRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTUSRPAGE ( lt cAhuFile gt ) --gt lExist
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAhuFile Caracter Nome do arquivo AHU sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Loacutegico Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistUSRPage() para identificarmos no ambiente atual se um determinado arquivo AHU encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistUSRPage(teste)
conout(testeahu compilado neste RPO)
Else
conout(testeahu NAO compilado neste RPO)
Endif
GETJOBPROFSTRING
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETJOBPROFSTRING ( lt cKey gt lt cDefault gt ) --gt cKeyValue
Paracircmetros
Argumento Tipo Descriccedilatildeo
cKey Caracter cKey corresponde agrave chave da seccedilatildeo de configuraccedilatildeo da Working Thread atual a ser retornada
cDefault Caracter Valor default (string) a ser retornado pela funccedilatildeo caso a chave especificada natildeo sehja encontrada no INI
Retorno
Tipo Descriccedilatildeo
Caracter Conteudo da Chave solicitada Caso a chave natildeo seja encontrada eacute retornado o conteudo de cDefault Caso esta funccedilatildeo natildeo seja executada a partir de uma Working Thread ela
18
retornaraacute uma string em branco ()
Descriccedilatildeo
Atraveacutes desta funccedilatildeo podemos recuperar as configuraccedilotildees do Job da Working Thread atual
GETWEXVERSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETWEXVERSION ( ) --gt cBuildId
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave String Identificadora da versatildeo no formato ltLIBgt VAAMMDDHHmm Vide Tabela A
Descriccedilatildeo
Esta funccedilatildeo natildeo requer argumentos e retorna o Identificador do build versatildeo de Release das funccedilotildees de Infra-Estrutura APWEBEX
Observaccedilatildeo A data informada pela versatildeo natildeo corresponde agrave ultima compilaccedilatildeo do RPO de um determinado Projeto WEB mas sim agrave data de release da LIB de Infra-Estrutura APWEBEX
Tabela A
Simbolo Descriccedilatildeo
AA Ano de geraccedilatildeo da Lib
MM Mecircs da geraccedilatildeo da Lib
DD Dia da geraccedilatildeo da Lib
HH Horaacuterio da geraccedilatildeo da Lib
mm Minutos do Horaacuterio de Geraccedilatildeo da Lib
(HTTP) Indica que a versatildeo foi compilada com a configuracatildeo de envio progressivo de HTML simultacircneo para o Browse Esta opccedilatildeo eacute imprescindiacutevel para projetos que se utilizam desta LIB
Por exemplo
APWEBEX Version 30312021900 (HTTP)
HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HEXSTRDUMP ( lt cString gt [ nStart ] [ nLength ] ) --gt cHExDump
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser lida para a geraccedilatildeo do Dump
nStart Numeacuterico Corresponde agrave posiccedilatildeo inicial de cString a ser considerada para a geraccedilatildeo do Dump a partir da posiccedilatildeo 1 Caso este paracircmetro natildeo seja informado o
Default eacute a posiccedilatildeo 1 da string
nLength Numeacuterico nLength corresponde agraveo tamanho a ser considerado para a geraccedilatildeo do DUMP a partir da posiccedilatildeo inicial recebida em nStart Caso este paracircmetro natildeo
seja informado eacute considerado o tamanho ateacute o final da String
Retorno
Tipo Descriccedilatildeo
Caracter O retorno da funccedilatildeo corresponde agrave uma string Advpl formatadas em 16 bytes em hexadecimal por linha mais o separador pipe (|) mais os 16 caracteres em Ansi Os caracteres de
controle ( codigo ascii menor que 32 ) satildeo convertidos para visualizaccedilatildeo para o caractere underline (_)
Descriccedilatildeo
Atraveacutes da funccedilatildeo HexStrDump() podemos gerar uma string em Advpl em formato de Dump Hexadecimal a partir da string informada como paracircmetro a partir de uma determinada posiccedilatildeo da string considerando um
nuacutemero de bytes informado
Caso os paracircmetros nPosIni e nTamString natildeo sejam informados o dump gerado corresponde a string recebida como paracircmetro em sua totalidade
Observaccedilatildeo
Natildeo devemos pasar para a funccedilatildeo HexStrDump uma string maior que 240 Kb pois a geraccedilatildeo da String de dump eacute realizada em memoacuteria sendo a string final gerada em meacutedia 42 vezes maior que a string passada
como paracircmetro Caso a string passada como paracircmetro seja maior que 240 Kb a execuccedilatildeo seraacute abortada com a ocorrecircncia de erro fatal string size overflow
HTMLNOTAGS
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HTMLNOTAGS ( lt cStrHtml gt ) --gt cStrNoTags
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrHtml Caracter cStrHtml corresponde a uma String que natildeo pode conter caracteres Html interpretaacuteveis
Retorno
Tipo Descriccedilatildeo
Caracter String original com os caracteres interpretaacuteveis Html lt gt amp convertidos para caracteres natildeo-interpretaacuteveis
Descriccedilatildeo
A Funccedilatildeo HTMLNOTAGS converte as Tags interpretaacuteveis de uma String HTML para TAGS natildeo interpretaacuteveis Este recurso eacute normalmente utilizado quando precisamos montar um input Html com um conteudo que
nao pode ser interpretado pelo browser como uma Tag Esta funccedilatildeo apenas converte os caracteres lt ( menor que ) gt ( maior que ) amp ( e comercial ) e ldquo ( aspas duplas )
Recomenda-se fortemente que na montagem do value de um input html o conteuacutedo do mesmo seja colocado entre aspas duplas pois caso o conteuacutedo do value inicial do campo contenha aspas simples (
natildeo convertidas pela funccedilatildeo HtmlNoTags) isto poderaacute ocasionar perda de dados e erro de sintaxe no formulaacuterio Html
HTTPISWEBEX
Revisatildeo 12122003
Sintaxe
HTTPISWEBEX ( ) --gt lIsApWEBEX
Retorno
Tipo Descriccedilatildeo
Loacutegico A funccedilatildeo retornaraacute T caso o ambiente de execuccedilatildeo atual seja uma Working Thread WEBEX inicializada pela funccedilatildeo de infra-estrutura STARTWEBEX
Descriccedilatildeo
Atraveacutes da funccedilatildeo HttpIsWebEx() eacute possiacutevel identificarmos se o programa atual estaacute sendo executado atraveacutes de uma Working Thread inicializada utilizando-se as funccedilotildees de Infra-Estrutura APWEBEX
ISEMAIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
19
Sintaxe
ISEMAIL ( lt cEMail gt ) --gt lEmailOk
Paracircmetros
Argumento Tipo Descriccedilatildeo
cEMail Caracter cEmail corresponde a string a ser analizada contendo um e apenas um endereccedilo de e-mail
Retorno
Tipo Descriccedilatildeo
Caracter Retorna T caso a sring recebida como paracircmetro atenda agraves definiccedilotildees de nomenclatura vaacutelidos para um endereccedilo de e-mail
Descriccedilatildeo
Utilizada para validar e-mails em Advpl a funccedilatildeo ISEMAIL recebe como paracircmetro uma string contendo um e-mail retornando T caso a string esteja em um formaacuteto vaacutelido respeitando a regra para nomenclatura de
endereccedilos de e-mail
Regra Um e-mail eacute considerado vaacutelido caso seja iniciado por um caracter apenas contenha caracteres asc de a a z e 0 a 9 e os caracteres (arroba) (ponto) - ( hiacutefen) ou _ (underline) e deve conter uma e
apenas uma arroba e no minimo um ponto apos a arroba intercalado por um caracter
LOWERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
LOWERACE ( lt cString gt ) --gt cStrLower
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a sequecircncia de caracteres a ser convertida para letras minuacutesculas
Retorno
Tipo Descriccedilatildeo
Caracter String original em letras minuacutesculas
Descriccedilatildeo
A Funccedilatildeo LOWERACE converte todos os caracteres de uma String para ldquominusculordquo semelhante agrave funccedilatildeo LOWER() poreacutem considera e converte tambeacutem caracteres acentuados em ANSI
NTOC
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
NTOC ( lt nNumero gt lt nBase gt lt nTamStr gt ) --gt cString
Paracircmetros
Argumento Tipo Descriccedilatildeo
nNumero Numeacuterico nNumero eacute o valor numeacuterico em base devimal a ser convertido
nBase Numeacuterico nBase corresponde agrave base binaacuteria a ser utilizada para converter nNumero
nTamStr Numeacuterico nTamStr corresponde ao tamanho da string representando o numero na base desejada
Retorno
Tipo Descriccedilatildeo
Caracter cString corresponde ao numero convertido para a base numeacuterica especificada como paracircmetro
Descriccedilatildeo
A Funccedilatildeo NTOC converte um nuacutemero em notaccedilatildeo decimal para um nuacutemero representado por String utilizando uma base numeacuterica entre 2 e 36 preenchendo-o com ldquo0rdquo (zeros) agrave esquerda do tamanho especificado
Observaccedilatildeo O Paracircmetro nBase deve ser especificado com um nuacutemero entre 2 e 36 Caso seja passado como paracircmetro um nuacutemero base fora desta faixa o processamento eacute abortado com a ocorrecircncia de erro
[APWEXERR_0022] INVALID NTOC BASE [X] onde ltXgt foi a base passada como argumento
REDIRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
REDIRPAGE ( lt cUrl gt [ cTarget ] [ nTime ] ) --gt cScript
Paracircmetros
Argumento Tipo Descriccedilatildeo
cUrl Caracter Link para onde o script deve apontar o redirecionamento
cTarget Caracter Destino do redirecionamento Caso natildeo especificado o default eacute _self
nTime Numeacuterico Tempo (em segundos) de delay antes do redirecionamento ser executado
Retorno
Tipo Descriccedilatildeo
Caracter Script Html JavaScript que ao ser executado no Browser (client) chama a paacuteginaobjeto chamado no Link
Descriccedilatildeo
A funccedilatildeo RedirPage eacute utilizada quando desejamos devolver ao Browser um script que ao ser executado redirecionaraacute o Browser agrave abertura de um link passado como paracircmetro
RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLACE ( lt cStrFind gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrFind Caracter cStrFind corresponde agrave sequecircncia de caracteres a ser procurada podendo conter caracteres maiuacutesculos e minuacutesculos com ou sem acentuaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cStrQuery corresponde agrave string de busca a ser utilizada na query utilizando caracteres em minuacutesculo
Descriccedilatildeo
A funccedilatildeo RetSqlAce eacute utilizada para auxiliar de montagem de querys de busca de caracteres acentuados em bases de dados A funccedilatildeo automaticamente trata a string original removendo os acentos convertendo todos
os caracteres para minuacutesculas e trocando todas as vogais e cedilhas da string original por uma sequecircncia de caracteres acentuados em munuacutescilas para busca posicional
20
RETSQLCOND
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLCOND ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlCond() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga e o Makira Hypersite utilizando aliases de 3
caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar a filial atual ( xFilial ) de acordo com o modo do arquivo ( X2_MODO ) e para sempre desconsiderar
registros deletados
Observaccedilotildees
Esta funccedilatildeo foi mantida apenas por compatibilidade pois a ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do
banco para efeitos de performance Para ganharmos performance nas Querys devemos ao inveacutes de utilizar a funccedilatildeo RetSqlCond() utilizar como primeira clauacutesula WHERE o retorno da funccedilatildeo RetSqlFil() (
comparaccedilatildeo dos campos _FILIAL os primeiros do(s) iacutendice(s) do ERP ) que retorna apenas as comparaccedilotildees de Filial e por uacuteltimo a funccedilatildeo RetSqlDel que retorna o script para verificaccedilatildeo dos campos deletados (
que eacute o uacuteltimo campo das chaves de iacutendice do ERP utilizando TopConnect )
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlCond() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de
modo que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute
retorna os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLDEL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLDEL ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlDel() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo D_E_L_E_T_ da(s) tabela(s) passada(s) como paracircmetro
Observaccedilotildees
A ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do banco para efeitos de performance Para ganharmos performance
nas Querys devemos utilizar a funccedilatildeo RetSqlDEl() na montagem das ultimas consistecircncias da claacuteusula WHERE de uma Query
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlDel() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo
que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna
os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLFIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLFIL ( lt cAliases gt [ cCompFil ] ) --gt cSQlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
cCompFil Caracter
Atraveacutes de cCompFil eacute possiacutevel especificar uma Filial FIXA a ser comparada com os campos FILIAL do(s) alias(es) passados no paracircmetro cAliases
Caso natildeo informado os campos _FILIAL da(s) tabela(s) passadas como paracircmetro em cAliases seratildeo comparados com o retorno da funccedilatildeo xFilial() de
cada alias respectivamente
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo filial atual ( xFilial ) de acordo com o modo de abertura do arquivo no ERP ( X2_MODO )
Observaccedilatildeo
Devemos atentar ao fato que a funccedilatildeo RetSqlFil() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo que estes
alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna os
nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLTAB
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLTAB ( lt cAliasList gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliasList Caracter String contendo um ou mais alias separados por virgula a terem seus nomes fiacutesicos determinados
Retorno
Tipo Descriccedilatildeo
Caracter String contendo nomes fisicos e alias identificadores dos aliases recebidos como paracircmetro
Descriccedilatildeo
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
5
thread eacute deixada na memoacuteria do servidor em modo de espera (stand-by) de modo que um usuaacuterio ao acessar um link apw o servidor Protheus iraacute direcionar a requisiccedilatildeo de processamento agrave uma working thread que
estiver em stand-by e apoacutes o processamento ser efetuado e o HTML ser retornado ao Browser a working thread retorna novamente ao estado de stand-by voltando a estar disponiacutevel para atender agrave uma nova
requisiccedilatildeo do mesmo ou de outro usuaacuterio navegando no site aplicaccedilatildeo Web
A utilizaccedilatildeo de Working Threads exige a definiccedilatildeo miacutenima de duas funccedilotildees Advpl que seratildeo executadas em dois momentos distintos A primeira funccedilatildeo eacute responsaacutevel pela inicializaccedilatildeo do ambiente comum de
execuccedilatildeo de requisiccedilotildees devendo estabelecer conexatildeo com a Base de Dados utilizada abrir as tabelas utilizadas no Site e preparar as variaacuteveis comuns de utilizaccedilatildeo da aplicaccedilatildeo A segunda funccedilatildeo seraacute responsaacutevel
por encapsular a requisiccedilatildeo do usuaacuterio realizada a partir do Web Browse Ela receberaacute como paracircmetro o nome do link digitado e macro-executar a funccedilatildeo correspondente realizando o tratamento de erro e retorno
Deste modo um ambiente uma vez inicializado natildeo eacute fechado e pode ser utilizado por vaacuterios usuaacuterios que estatildeo navegando no Site o que viabiliza um grande ganho em perfoemance e carga do Servidor
Tipos de Working Threads
Existem dois tipos de Working Threads configuraacuteveis no Protheus a Working Thread WEB e a Working Thread WEBEX ( abreviaccedilatildeo de WEB EXtended ) Ambas possuem basicamente o mesmo princiacutepio de
funcionamento poreacutem o que muda entre ambas eacute a recepccedilatildeo de paracircmetros e a utilizaccedilatildeo de Sessions nativas do Server Protheus Para visualizarmos melhor estas diferenccedilas vejamos com um detalhe um pouco maior
os modelos de funccedilatildeo de inicializaccedilatildeo de ambiente e conexatildeo para ambas as configuraccedilotildees de Working Threads WEB e WEBEX
Working Threads WEB
Para nos utilizarmos das Working Threasd WEB devemos criar as funccedilotildees responsaacuteveis pela inicializaccedilatildeo de ambiente e a funccedilatildeo de conexatildeo
A funccedilatildeo de inicializaccedilatildeo de ambiente natildeo recebe paracircmetro algum realizar a preparaccedilatildeo do ambiente comum de execuccedilatildeo de requisiccedilotildees e deve retornar um valor booleano (T) verdadeiro caso o ambiente tenha sido
inicializado com sucesso ou (F) falso no caso de alguma condiccedilatildeo ou erro que torne o ambiente montado por esta thread natildeo operacional caso este em que a Thread eacute removida da memoacuteria apoacutes a inicializaccedilatildeo
A funccedilatildeo de conexatildeo recebe os mesmos seis paracircmetros de uma funccedilatildeo chamada via link apl e um seacutetimo parametro String que conteacutem apenas o nome da funccedilatildeo chamada no link Por exemplo a chamada de um
link httplocalhostu_testeapw no seacutetimo paracircmetro da funccedilatildeo de conexatildeo a string u_teste A funccedilatildeo de conexatildeo deve ter tratamento de erro proacuteprio e diferenciado e sempre deveraacute retornar um conteuacutedo do tipo
String
Working Threads WEBEX Para nos utilizarmos das Working Threasd WEBEX devemos tambeacutem criar as funccedilotildees responsaacuteveis pela inicializaccedilatildeo de ambiente e a funccedilatildeo de conexatildeo
A funccedilatildeo de inicializaccedilatildeo comporta-se de maneira idecircntica a de inicializaccedilatildeo WEB natildeo recebendo paracircmetro algum e devendo retornar um valor booleano (T) verdadeiro caso o ambiente tenha sido inicializado com
sucesso ou (F) falso no caso de alguma condiccedilatildeo ou erro que torne o ambiente montado por esta thread natildeo operacional caso este em que a Thread eacute removida da memoacuteria apoacutes a inicializaccedilatildeo
A funccedilatildeo de conexatildeo natildeo recebe diretamente paracircmetro algum Isso mesmo Todos os paracircmetros recebidos em versotildees anteriores atraveacutes de Arrays satildeo recebidos agora por Alias Virtuais de alta velocidade
HttpGet
HttpPost
HttpCookies
HttpHeadIn
Cada um destes alias virtuais eacute responsaacutevel respectivamente pela recepccedilatildeo de paracircmetros via GET POST COOKIES e Header HTTP da requisiccedilatildeo
Tambeacutem foram implementados os Alias virtuais HttpHeadOut e HttpSession para respecrivamente permitir alterar ou adicionar informaccedilotildees do Header HTTP de retorno de processamento de uma requisiccedilatildeo e
utilizaccedilatildeo de variaacuteveis tipo SESSION por usuaacuterio Web Estes recursos satildeo detalhados nos toacutepicos WEBEX - Detalhamento de Operaccedilatildeo e posteriores
O Futuro das aplicaccedilotildees WEB no Protheus
Apoacutes o desenvolvimento de aplicaccedilotildees em ambiente WEBEX e dados os oacutetimos resultados obtidos recomenda-se fortemente que as aplicaccedilotildees web desenvolvidas utilizando-se o Protheus Server sejam escritas em
conformidade para a utilizaccedilatildeo dos recursos WEBEX
Para facilitar tal desenvolvimento em paralelo agrave tecnologia disponibilizada na aplicaccedilatildeo jaacute estaacute integrada com a Infra-Estrutura disponiacutevel no repositoacuterio padratildeo do Microsiga Protheus 8 as funccedilotildees da Infra-Estrutura
ApWebEx escritas e publicadas para melhor atender agraves necessidades comuns verificadas no decorrer do desenvolvimento de uma aplicaccedilatildeo Web
Os recursos disponiacuteveis nesta lib estatildeo documentados nos toacutepicos Infra-Estrutura APWEBEX e posteriores englobando comandos funccedilotildees exemplos e dicas de utilizaccedilatildeo destes recursos
6
06 Configurando o Server Protheus para HTTP
Revisatildeo 28042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
As configuraccedilotildees de http do Server Protheus permitem a configuraccedilatildeo de sites estaacuteticos e dinacircmicos com a criaccedilatildeo de um ou mais hosts de acesso criaccedilatildeo de pastas virtuais e dites dinacircmicos com resposta para links
apl e apw simultaneamente Neste documento abrangeremos um resumo exemplificado das configuraccedilotildees HTTP do Server Protheus As seccedilotildees abaixo devem ser inseridas no arquivo de configuraccedilotildees do servidor
Protheus ( mp8srvini )
Configuraccedilatildeo Miacutenima [http]
Enable=1
Path=cAp_Datahttp
Observaccedilatildeo Vale lembrar que apoacutes ter inserido a configuraccedilatildeo do [http] no INI do Protheus eacute importante baixar o Server e subir novamente
Com esta configuraccedilatildeo habilitamos o Server Protheus como um servidor de arquivos e paacuteginas estaacuteticas com o HTTP na porta padratildeo (80) e utilizando o diretorio em cAp_dataHttp como diretoacuterio raiz de
publicaccedilotildees WEB Como natildeo haacute configuraccedilatildeo de host especiacutefica um arquivo nesta pasta poseraacute ser acessado atraveacutes dos hosts httplocalhost ( desde que o browse seja aberto na estaccedilatildeo servidora )
httpnnnnnnnnnnnn ( IP da estaccedilatildeo servidora ) ou httpxxxxxxxxxx ( nome da estaccedilatildeo servidora ) Por exemplo Dentro da pasta configurada na chave PATH do HTTP crie um arquivo chamado defaulthtm
com o seguinte conteuacutedo ( pode ser criado inclusove com o notepad )
lthrgt
Ola Mundo HTTP
lthrgt
Agora abra um Web Browser no mesmo equipamento e digite na url httplocalhost Ao acessar esta url deveraacute ser mostrado na tela do Browse huas barras horizontais e o texto Ola Mundo HTTP entre elas
Atendendo agrave requisiccedilotildees apl
Agora vamos habilitar este host para atender agrave requisiccedilotildees de funccedilotildees atraveacutes de link apl Para tal precisamos apenas do nome de um Environment (ambiente) configurado no INI Podemos usar o proacuteprio ambinete
do ERP Basta acrescentarmos na seccedilatildeo http a chave Environment=ltnome_do_ambientegt para que este ambiente passe a atender agraveo processamento de funccedilotildees Advpl atraveacutes de links apl Por exemlo caso o
ambiente configurado para o ERP chame-se EnvADS710 basta acrescentar na seccedilatildeo http a chave Environment=EnvADS710 O INI ficaria conforme abaixo
[http]
Enable=1
Path=cAp_Datahttp
Environment=EnvADS710
Para testar a execuccedilatildeo de funccedilotildees abra um Web Browse na estaccedilatildeo servidora e acesse o link httplocalhosttimeapl IStoacuteiraacute executar a funccedilatildeo Advpl TIME() que retornaraacute ao Browse uma string contendo o
horaacuterio atual no servidor no formato HHMMSS
Atendendo agrave requisiccedilotildees apw
A configuraccedilatildeo para atendimento de requisiccedilotildees de processamento http atraveacutes de links apw envolve a criaccedilatildeo de uma nova seccedilatildeo no INI com um nome natildeo-especiacutefico para configurar o tipo de job que iraacute executar o
processamento ( WEB ou WEBEX ) juntamente com as funccedilotildees responsaacuteveis pela inicializaccedilatildeo e conexatildeo das Threads Advpl e na seccedilatildeo http configuramos uma chave chamada ResponseJob apontando para a seccedilatildeo
de configuraccedilatildeo do JOB
Por exemplo para configurarmos o atendimento de requisiccedilotildees apw em um ambiente ERP utilizando a infra-estrutura APWEBEX vamos criar uma seccedilatildeo chamada ERP_APWEBEX apontando para as funccedilotildees da
Infra-Estrutura APWEBEX correspondentes
[ERP_APWEBEX]
type=WEBEX
onstart=STARTWEBEX
onconnect=CONNECTWEBEX
Environment=EnvADS710
Instances=13
SigaWeb=MAK
Atraveacutes desta configuraccedilatildeo especificamos um Job do tipo WEBEX onde a funccedilatildeo de inicializaccedilatildeo utilizada seraacute a STARTWEBEX a funccedilatildeo de conexatildeo seraacute a CONNECTWEBEX ( ambas da Infra-estrutura
APWEBEX ) que utilizaratildeo o ambiente AnvADS710 para processamento e seratildeo colocadas no ar apenas uma Working Thread para atendimento de processamento ateacute o maacuteximo de 3 Threads As threads colocadas
no ar acima do nuacutemero miacutenimo ( no exemplo apenas 1 ) satildeo colocadas on-demand caso sejam realizadas requisiccedilotildees apw ao Servidor e natildeo hajam Working Threads dispoviacuteveis no momento e o nuacutemero de Working
Threads no ar ainda natildeo tenha atingido o maacuteximo definido Atraveacutes da configuraccedilatildeo SigaWeb=MAK informamos ao sistema que a mesma estaacute sendo utilizada para o desenvolvimento de um moacutedulo especiacutefico e natildeo
estamos utilizando um moacutedulo Web da ferramenta Protheus 8 Caso a configuraccedilatildeo SigaWeb natildeo seja informada o valor MAK eacute assumido como default
Agora para que esta seccedilatildeo de Jobs seja utilizada para o atendimento efetivo de requisiccedilotildees apw devemos estecificaacute-la na seccedilatildeo http atraveacutes da chave REsponseJob No caso inserimos a chave
ResponseJob=ERP_APWEBEX fincando a seccedilatildeo HTTP conforme abaixo
[http]
Enable=1
Path=cAp_Datahttp
Environment=EnvADS710
ResponseJob=ERP_APWEBEX
Como as requisiccedilotildees via apl e via apw satildeo independentes eacute possiacutevel configurar a seccedilatildeo http para que Environments diferentes respondam agrave requisiccedilotildees apl e apw ou que natildeo sejam atendidas requisiccedilotildees apl
apenas apw
Configurando a seccedilatildeo http para multi-host Todas as configuraccedilotildees acima vistas pertencem agrave seccedilatildeo default do HTTP De modo que tanto faz acessarmos o servidor pelo nome como pelo IP que o resultado serraacute o mesmo Poreacutem para a utilizaccedilatildeo de demais
recursos como diretoacuterios virtuais e mais de um site no mesmo servidor precisamos configurar um host de acesso
Por exemplo vamos criar uma configuraccedilatildeo de HOST para que o servidor caso seja acessado pelo NOME da maquia via HTTP seja visualizado um outro site e apenas sejam atendidos agrave links apl Para isso
devemos criar uma nova seccedilatildeo no INI cujo nome deve ser exatamente o host que seraacute acessado ( como o exemplo vamos supor que o servidor de testes chama-se srvteste ) logo devemos criar uma seccedilatildeo com este
nome
Nesta seccedilatildeo do INI devemos no miacutenimo especificar um Path de acesso agraveos arquivos e as demais configuraccedilotildees vistas ateacute agora da seccedilatildeo http satildeo opcionais A configuraccedilatildeo PORT do HTTP em um host natildeo eacute
suportada Natildeo eacute possiacutevel subir um server protheus em mais de uma porta HTTP
[srvteste]
Path=cAp_DataTestes
Environment=EnvTOP710
Deste modo caso o servidor seja acessado via http atraveacutes de LOCALHOST ou do IP do Server seraacute permitido o acesso agraves funcionalidades configuradas na seccedilatildeo HTTP Caso seja acessado via nome do servidor (
httpsrvteste ) seratildeo acessados os arquivos de outra pasta e as requisiccedilotildees apl seratildeo atendidas pelo Ambiente EnvTOP710
Utilizando este tipo de configuraccedilatildeo podemos subir vaacuterios sites diferentes na mesma aplicaccedilatildeo servidor Protheus cada qual com o seu diretoacuterio raiz de publicaccedilotildees seus ambientes independentes atendendo ou nacirco agrave
requisiccedilotildees apl eou apw
Configurando diretoacuterios virtuais
Ao configurar um host especiacutefico podemos acrescentar ao mesmo uma barra seguido de um nome para acesso agrave um diretoacuterio virtual criando desse modo um endereccedilo de acesso composto por um host e um
diretoacuterio que pode se comportar como um outro site com os arquivos publicados em um path especiacutefico que poderaacute atender requisiccedilotildees de links apl eou apw sob um outro ambiente e configuraccedilatildeo distinta
Utilizando diretoacuterios virtuais eacute possiacutevel dentro do mesmo host instalar vaacuterias aplicaccedilotildees web independentes todas acessiacuteveis sob o mesmo endereccedilotilde base alterando apenas o diretoacuterio de acesso Por exemplo
utilizando como host principal o nome do equipamento servertst podemos instalar o moacutedulo Web Portal Protheus sob o host servertstportal o moacutedulo TCF sob o host servertstrhonline e no host servertst
podemos configurar um site estaacutetico em Html com uma apresentaccedilatildeo institucional e links para os demais moacutedulos
Observaccedilotildees Importantes
Ao configurarmos um Host ele herda as configuraccedilotildees de atendimento de requisiccedilotildees apl e apw especificados na seccedilatildeo HTTP De modo que o host do exemplo continuaraacute a atender requisiccedilotildees apw poreacutem no
ambiente EnvADS710
Visto desta forma recomendamos fortemente que a seccedilatildeo [http] possua apenas especificado um Path em disco que esteja vazio e seja criada uma ou mais configuraccedilotildees de host com as suas devidas propriedades
especificas
Todas as demais chaves relacionadas agrave configuraccedilatildeo HTTP e aos Jobs WEB e WEBEX satildeo opcionais para atender agrave necessiades especiacuteficas Estas chaves estatildeo explicadas em maiores detalhes no DEM na seccedilatildeo
XXX
Configurando diretoacuterios virtuais Da mesma forma que a criaccedilatildeo de hosts podemos criar um novo host utilizando a barra de divisatildeo para especiicar uma pasta virtual quue permite a flexibilidade de termos uma pasta dentro de um mesmo host que
se comporte como um outro host Ainda baseando-se no INI montado nestes exemplos para o servidor de testes vamos supor que exista uma pasta no disco ( por exemplo cAp_dataDocs ) que contenha arquivos
HTML de uma documentaccedilatildeo que deve estar disponccedilivel na web utilizando tambeacutem o host httpsrvteste Poreacutem o host srvteste jaacute aponta para o diretoacuterio cAp_dataTestes
Com o recurso de criaccedilatildeo de diretorio virtual no HTTP criamos apenas uma nova entrada do mesmo host colocando no nome do mesmo uma barra de divisatildeo seguido do nome de uma pasta a ser acessada via
HTTP ( que natildeo precisa necessariamente existir no disco) e dentro desta seccedilatildeo acrescentar a chave path apontando para o diretoacuterio desejado da mesma maneira utilizada para configurar um host
No exemplo abaixo criamos a pasta virtual info dentro do host srvteste apontando para o path do disco cAp_DataDocs De modo que ao ser acessado via url o endereccedilo httpsrvtesteinfo a partir dele seratildeo
acessados os arquivos da pasta cAp_DataDocs
[srvtesteinfo]
Path=cAp_DataDocs
Vejamos agora como ficou o nosso arquivo INI com todas as configuraccedilotildees acima exemplificadas
Configuiracao de Working Threads usando a infra-estrutura APWEBEX
[ERP_APWEBEX]
type=WEBEX
onstart=STARTWEBEX
onconnect=CONNECTWEBEX
Environment=EnvADS710
Instances=13
Configuraccedilatildeo da seccedilatildeo httpo default para atender agrave requisiccedilotildees de apl e apw
[http]
7
Enable=1
Path=cAp_Datahttp
Environment=EnvADS710
ResponseJob=ERP_APWEBEX
SigaWeb=MAK
Configuraccedilatildeo do host srvteste para atender requisiccedilotildees via apl atraveacutes do environment EnvTOP710
[srvteste]
Path=cAp_DataTestes
Environment=EnvTOP710
Configuraccedilatildeo da pasta virtual info no host srvteste para apontar para um path no disco com documentos
[srvtesteinfo]
Path=cAp_DataDocs
Infra-Estrutura APWEBEX
Revisatildeo 27042004
Abrangecircncia
Versatildeo 811
A Infra-Estrutura APWEBEX Visando o melhor aproveitamento da tecnologia de working threads implementada no servidor Protheus para o processamento de requisiccedilotildees de uma aplicaccedilatildeo web foram desenvolvidas funccedilotildees de apoio miscelacircnea
e infra-estrutura compiladas no repositoacuterio padratildeo de Infra-Estrutura do ERP Microsiga visando simplificar e auxiliar o desenvolvimento de uma soluccedilatildeo web A este conjunto de funccedilotildees demos o nome de Lib de
Infra-Estrutura APWEBEX que engloba atualmente os tratamentos comuns agraves funccedilotildees de inicializaccedilatildeo de ambiente e conexatildeo ( atendimento de requisiccedilotildees http via link apw ) com seus respectivos pontos de
entrada comandos e funccedilotildees de miscelacircnea comuns agraveos projetos de soluccedilotildees web integradas com o ERP
Como utilizar este recurso no desenvolvimento de soluccedilotildees
As funccedilotildees pertinentes agrave Infra-Estrutura APWEBEX jaacute estatildeo implementadas no repositoacuterio padratildeo da ferramenta Protheus 8 e os comandos especiacuteficos que envolvem este recurso encontram-se no arquivo header
apwebexch disponibilizado tambeacutem jonto com a ferramenta Protheus 8
A utilizaccedilatildeo destes recursos para integraccedilatildeo de aplicaccedilotildees envolve a leitura desta documentaccedilatildeo onde seraacute visto com maiores detalhes as possibilidades de uso da ferramenta como a integraccedilatildeo de uma aplicaccedilatildeo Web
com um ambiente e funcionalidades do ERP Microsiga
Como usufruir desta documentaccedilatildeo Todos os toacutepicos pertencentes agrave este grupo satildeo direcionados agraveo desenvolvimento de soluccedilotildees web utilizando as funccedilotildees de Infra-Estrutura APWEBEX aleacutem de ser explicado com detalhes o funcionamento da
tecnologia WEBEX do Protheus e dos recursos nativos da ferramenta englobando os comandos e funccedilotildees publicados exemplos de coacutedigos Advpl utilizando estes recursos configuraccedilatildeo da ferramenta e mensagens de
ocorrecircncias de erro das funccedilotildees e comandos com possiacuteveis causas e soluccedilotildees
Eacute fortemente recomendado que os documentos constantes neste grupo fossem apreciados antes de aprofundar-se nas informaccedilotildees dos proacuteximos toacutepicos
01 Recepccedilatildeo de paracircmetros por Alias Virtuais
Revisatildeo 30042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
A recepccedilatildeo de paracircmetros vindos do Web Browser quando utilizamos Working Threads do tipo WEBEX atraveacutes de links apw eacute realizada atraveacutes de Alias Virtuais especiacuteficos ao inveacutes de receber as informaccedilotildees
GET POST e HEADER em array quando executamos a chamada atraveacutes de link apl A nomenclatura de Alias Virtual foi adotada pois a sintaxe do coacutedigo-fonte eacute exatamente a mesma utilizada quando desejamos
acessar um campo de uma tabela aberta atraveacutes de um alias
Em um ambiente montado para atender agrave requisiccedilotildees via link apw utilizando Working Threads WEBEX podemos nos utilizar dos seguintes alias virtuais
HttpCookies
HttpGet
HttpPost
HttpHeadIn
HttpHeadOut
HttpSession
HttpCookies Atraveacutes do alias virtual HttpCookies eacute possiacutevel consultar os Cookies do Header Http enviados pelo Browser e criar ou alterar o conteuacutedo de um cookie a ser devolvido agraveo Browser Um cookie visto de forma geral eacute
um paracircmetro ao qual atribuiacutemos um nome que uma vez devolvido agraveo Browse solicitante eacute re-enviado ao Protheus a partir da proacutexima requisiccedilatildeo realizada pelo Browser
HttpGet
Para receber os paracircmetros enviados atraveacutes da URL (meacutetodo GET do HTTP) jaacute devidamente convertidos e tratados utilizamos o alias virtual HttpGet onde acessamos pelo nome a propriedade desejada e caso a
mesma tenha sido enviada pelo Browser a mesma eacute retornada como uma String
HttpPost Para receber os paracircmetros submetidos (enviados) pelo Browser atraveacutes do meacutetodo POST jaacute devidamente convertidos e tratados utilizamos o alias virtual HttpPost onde acessamos pelo nome a propriedade desejada
e caso a mesma tenha sido enviada pelo Browser a mesma eacute retornada como uma String
HttpHeadIn
Para a recepccedilatildeo e tratamento das informaccedilotildees recebidas atraveacutes do Header do pacote HTTP foi criado o alias virtual HttpHeadIn que aleacutem de consultar as informaccedilotildees constantes no Header HTTP proveinente da
requisiccedilatildeo do usuaacuterio permite tambeacutem acesso agrave propriedades da conexatildeo atual do usuaacuterio como o IP do usuaacuterio solicitante por exemplo
HttpHeadOut Atraveacutes deste alias virtual de retorno podemos alterar ou criar um paracircmetro no Header de retorno HTTP do Protheus a ser devolvido agraveo Browser solicitante de uma requisiccedilatildeo de processamento
HttpSession O alias virtual HttpSession foi criado para possibilitar a criaccedilatildeo de variaacuteveis session por usuaacuterio do site com controle de identificaccedilatildeo nativa da ferramenta atraveacutes de um cookie de identificaccedilatildeo chamado
SESSIONID No toacutepico Alias Virtual HttpSession eacute explicado em detalhes o funcionamento deste mecanismo
Este recurso nos permite criar atricuir conteuacutedo e consultar conteuacutedo de uma variaacutevel relacionada agraveo usuaacuterio que estaacute realizando uma requisiccedilatildeo http Podemos armazenar em uma variaacutevel de Session os seguintes
tipos de variaacuteveis A (array) C (character) D (data) L (loacutegica) e N (numeacuterica) Natildeo satildeo suportados O (Objetos) eou B (Code Blocks)
Limitaccedilotildees de uso dos alias virtuais para recebimento de paratildemetros
Dadas as caracteriacutesticas operacionais e de acesso agraveos alias virtuais devemos estar atentos agrave nomenclatura de campos de um formulaacuterio HTML para serem recuperados com sucesso pelos alias virtuais correspondentes
A nomenclatura de campos do formulaacuterio deve obedecer agrave regra de criaccedilatildeo de variaacuteveis em Advpl O campo do formulaacuterio deve sempre ser iniciado com um caracter alfabeacutetico pode conter letras ou algarismos no
nome e o caracter _ ( underline ) Natildeo satildeo permititos espaccedilotildes hiacutefen ou caracteres acentuados como nome de um campo Caso utilizado um nome de campo fora do padratildeo suportado o conteuacutedo do mesmo natildeo seraacute
recuperaacutevel em Advpl
8
02 Alias virtual HttpCookies
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpCookies eacute possiacutevel consultar os Cookies do Header Http enviados pelo Browser e criar ou alterar o conteuacutedo de um cookie a ser devolvido agraveo Browser Uma variaacutevel de Cookie retorna um
tipo Advpl String e apenas aceita uma atruibuiccedilatildeo de String Vale lembrar tambeacutem que um cookie eacute um recurso do Browser que estaacute realizando a requisiccedilatildeo e existe um limite de tamanho para o total de Cookies
utilizados Este limite costuma ser proacuteximo a 1024 Bytes
Trata-se portanto de uma propriedade de leitura e gravaccedilatildeo dispniacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Utilizaccedilatildeo de Cookies
A utilizaccedilatildeo de Cookies tecircm objetivo praacutetico restrito agrave aplicaccedilotildees onde haja a necessidade impliacutecita de termos uma informaccedilatildeo relacionada agraveo browser utilizado pelo usuaacuterio atual que devam ser interpretadas
independente do usuaacuterio estar logado ou natildeo ( isto eacute independam diretamente de sessions )
Um exemplo praacutetico disto eacute o desenvolvimento de um site onde o conteuacutedo dinacircmico eacute retornado ao usuaacuterio em mais de um idioma Na entrada do site apresentamos um formulaacuterio ao usuaacuterio onde o mesmo iraacute
escolher o idioma de sua preferecircncia Mesmo que a session de login deste usuaacuterio expire no servidor o cookie com o idioma selecionado ainda estaacute no Browser de modo que a proacutexima requisiccedilatildeo do usuaacuterio pode ser
codificada para direcionaacute-lo para a paacutegina de login do site com as mensagens no idioma que o mesmo jaacute estava navegando
Lendo o valor de um Cookie
Atraveacutes dos exemplos abaixo lemos o valor do Cookie de identificaccedilatildeo do uacutesuaacuterio e um cookie de usuaacuterio criado para identificar no Browse qual eacute o idioma utilizado pelo usuaacuterio atual
cUserId = HttpCookies-gtUSERID Retorna o Cookie identificador do usuaacuterio do Protheus
cIdioma = HttpCookies-gtSiteLang Retorna o conteuacutedo do cookie SiteLang criado
Lendo todos os Cookies recebidos
O alias virtual HttpCookie possui uma propriedade chamada aCookies criada apenas para consulta (read-only) que retorna um Array Advpl de Strings contendo os nomes dos Cookies enviados pelo Browser agraveo
Protheus Por exemplo
aInfo = HttpCookies-gtaCookies
For nI = 1 to len(aInfo)
Mostra no console do Server todos os cookies recebidos
conout(Cookie +str(nI3)+ = + aInfo[nI])
Next
Criando um Cookie
A criaccedilatildeo de um Cookie eacute realizada atraveacutes da atrubuiccedilatildeo de um valor diretamente agraveo cookie desejado Por exemplo
HttpCookies-gtMeuCookie = TESTE
A criaccedilatildeo de um Cookie merece uma atenccedilatildeo especial pois um Cookie eacute retornado agraveo browser atraveacutes do Header de Retorno HTTP De modo que para que a criaccedilatildeo de um cookie seja realizada com sucesso o
mesmo deve ser criado antes de haver qualquer processamento de APH AHU caso este que natildeo seria mais possiacutevel a criaccedilatildeo do Cookie pois o Header de Retorno HTTP jaacute teria sido enviado agraveo browser solicitante
03 Alias virtual HttpGet
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpGet podemos consultar se uma determinada propriedade nos foi enviada atraveacutes da URL ( meacutetodo GET )
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos realizar uma requisiccedilatildeo a um link apw
passando pela URL o paracircmetro IMAGEM com o conteacuteuacutedo TESTE
httplocalhostu_TesteGetapwimagem=testeampcor=azul
Para recuperarmos em Advpl o conteuacutedo dos paracircmetros imagem e cor utilizamos
cImagem = HttpGet-gtimagem
cCor = HttpGet-gtcor
Podemos inserir tambeacutem um tratamento default Caso algum paracircmetro natildeo seja enviado ( resulte NIL ) assumimos um valor para o mesmo
DEFAULT cImagem = LogoAp8
DEFAULT cCor = amarelo
Existe tambeacutem uma propriedade do alias virtual HttpGet chamada aGets onde podemos recuperar um array de strings contendo a lista com os nomes dos paracircmetros enviados pelo browser solicitante Por exemplo
aInfo = HttpGet-gtaGets
For nI = 1 to len(aInfo)
conout(GET +str(nI3)+ = +aInfo[nI])
Next
04 Alias virtual HttpPost
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpPost podemos consultar os campos submetidos agraveo servidor atraveacutes do meacutetodo POST
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro
O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos realizar uma requisiccedilatildeo a um link apw
atraveacutes de um formulaacuterio html com meacutetodo POST partindo do Html abaixo
lthtmlgtltbodygt
ltform method=POST action=httplocalhostu_TstPostapwgt
Teste ltinput type=text name=CODIGO size=10gt
lthrgt
ltinput type=submitgt
ltformgt
ltbodygtlthtmlgt
Para recuperarmos em Advpl o conteuacutedo do campo CODIGO utilizamos
cCodigo = HttpPOST-gtCodigo
Existe tambeacutem uma propriedade do alias virtual chamada aPost onde podemos recuperar um array de strings contendo a lista com os nomes dos paracircmetros enviados pelo browser solicitante Por exemplo
aInfo = HttpPost-gtaPost
For nI = 1 to len(aInfo)
conout(POST +str(nI3)+ = +aInfo[nI])
Next
05 Alias virtual HttpHeadIn
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpHeadIn podemos consultar os paracircmetros enviados pelo Browser solicitante enviados atraveacutes do Header HTTP ao realizar uma requisiccedilatildeo ao Protheus Server
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos consultar o header http User-Agent
enviado pelo Browser solicitante contendo uma String identiificando o modelo de Browser utilizado
cUserAgent = Httpheadin-gtUser_Agent
Devemos obter como retorno uma string parecida com a mostra abaixo
Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)
Observaccedilatildeo Importante Qualquer paracircmetro no Header HTTP que contenha um ou mais caracteres invaacutelidos para a nomenclatura de variaacuteveis Advpl ( como por exemplo o User-Agent que conteacutem um hiacutefen ) satildeo trocados pelo caractere _
underline para ser possiacutevel a leitura da propriedade
Propriedades especiais
HttpHeadIn-gtaHeaders
Retorna um Array de Strings contendo todas as linhas do Header HTTP da requisiccedilatildeo
HttpHeadIn-gtmain
Retorna o nome da funccedilatildeo chamda atraveacutes da URL sem a extensatildeo e sem o host Por exemplo ao chamar o link httplocalhostu_tstHEaderapw o conteuacutedo de HttpHeadin-gtmain seraacute u_tstHEader
9
HttpHeadIn-gtREMOTE_ADDR
Retorna uma string no formato nnnnnnnnnnnn o IP da estaccedilatildeo que realizou a requisiccedilatildeo
httpHeadIn-gtREMOTE_PORT
Retorna um valor Advpl numeacuterico informando a porta utilizada para realizar a requisiccedilatildeo
06 Alias virtual HttpHeadOut
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 LIB WEBEX
Atraveacutes deste alias virtual de retorno podemos alterar ou criar um paracircmetro no Header de retorno HTTP do Protheus a ser devolvido agraveo Browser solicitante de uma requisiccedilatildeo de processamento
Trata-se portanto de uma propriedade de retorno disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
A criaccedilatildeo de uma linha no Header HTTP merece uma atenccedilatildeo especial pois para que a operaccedilatildeo realizada com sucesso o header deve ser criado antes de haver qualquer processamento de APH AHU pois neste caso
o Header de Retorno HTTP jaacute teria sido enviado agraveo browser solicitante
07 Alias virtual HttpSession
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual httpSession podemos criar e consultar variaacuteveis do tipo session relacionadas agraveo usuaacuterio que realizou a requisiccedilatildeo atraveacutes do Browser
Para diferenciar os usuaacuterios que estatildeo navegando num site o Protheus busca por um cookie identificador de usuaacuterio retornado para o browser a cada requisiccedilatildeo de link APW chamado SESSIONID Caso o Protheus
receba este cookie ele identifica quais sessions pertencem a este usuaacuterio
Quando um usuaacuterio realiza a primeira requisiccedilatildeo http ao Protheus o Protheus natildeo recebe o cookie identificador e automaticamente inicializa um identificador de sessions para o mesmo retornando o identificador ao
Browser via Header HTTP Este identificador pode ser recuperado em uma funccedilatildeo advpl atraveacutes de httpSession-gtSESSIONID
Quando criamos uma variaacutevel de session ela pode ser acessada nas proacuteximas requisiccedilotildees provenientes deste mesmo usuaacuterio Caso uma variaacutevel de session consultada natildeo exista ela retorna o valor NIL (nulo)
Vejamos os exemplos abaixo
Criando variaacuteveis Session HttpSession-gtUserId = 123
HttpSession-gtUserName = U_GetUserName()
Nas linhas acima criamos uma session para o usuaacuterio atual chamada UserId com o conteuacutedo do tipo String e criamos outra session chamada UserName com o retorno da funccedilatildeo U_GetUserName()
Consultando variaacuteveis Session Ao consultar uma variaacutevel session sempre devemos prever que a mesma natildeo pode ter sido criada de modo que a consulta pode retornar NIL ou caso a session jaacute exista retornaraacute o valor do tipo que foi atribuiacutedo `a
mesma
If HttpSession-gtUserId = NIL
Session ainda natildeo foi criada Usuaacuterio natildeo estaacute logado
conout(Usuario natildeo estaacute logado)
Else
Session jaacute criada o usuaacuterio estaacute logado
conout(Usuario estaacute logado ID = + HttpSession-gtUserId )
Endif
Exemplo de Funcionamento de Session No exemplo abaixo criamos uma session para identificar quantas vezes o usuaacuterio chamou esta funccedilatildeo especiacutefica Damos o nome da session de MyCounter que iraacute conter um nuacutemero No primeiro acesso do usuaacuterio a
session natildeo existe ( = NIL ) e eacute criada com o valor numeacuterico 1 (um) A partir das proacuteximas requisiccedilotildees realizadas ao Protheus atraveacutes desta paacutegina ( atraveacutes do botatildeo Refresh do Browser por exemplo ) a session jaacute
existe sendo somado o valor 1 agraveo conteuacutedo jaacute existente e devolvido agraveo browser solicitante um Html informando quantas chamadas jaacute foram realizadas por este usuaacuterio
include rwmakech
include apwebexch
User Function TstSession()
Local cHtml = cEcho =
WEB EXTENDED INIT cHtml
If httpSession-gtmycounter = NIL
cEcho = Inicializando contador
Conout(cEcho)
cHtml += cEcho
httpSession-gtmycounter = 1
Else
httpSession-gtmycounter++
cEcho = contador em +str(httpSession-gtmycounter3)
conout(cEcho)
Endif
cHtml += cEcho + lthrgt
WEB EXTENDED END
Return cHtml
Apoacutes compilado o fonte acima e o Server Protheus configurado e iniciado com HTTP habilitado e as working Threads configuradas abra um Web Browser e solicite a url httplocalhostu_tstsessionapw Seraacute
mostrado no Browse a mensagem Inicializando Contador Agora peccedila um Refresh desta tela ao Browser Seraacute devolvida a mensagem Contador em 2 e a cada refresh deste Browser o contador seraacute
incrementado
Uso de Sessions e Paralelismo - Comportamento do Protheus Server
O Protheus Server trata agraves requisiccedilotildees simultacircneas de links APW em paralelo desde que estejam disponiacuteveis o numero de Working Threads necessaacuterio para tal Por exemplo em uma estrutura de Frames onde cada
um deles aponta o SRC (source) para um link apw o Browser envia as trecircs requisiccedilotildees de apw para o Protheus Server e caso extistam 3 working threads disponiacuteveis naquele momento as trecircs requisiccedilotildees satildeo
atendidas em paralelo
Por outro lado se em duas destas trecircs requisiccedilotildees faz-se necessaacuteria a atualizaccedilatildeo eou consulta a uma variaacutevel de Session ( httpsession ) este processamento em paralelo caso natildeo fosse tratado poderia gerar perdas
no conteuacutedo da session caso a mesma session fosse atualizada simultaneamente
Para resolver esta questatildeo de maneira a natildeo sobrecarregar o Servidor com solicitaccedilotildees de Processamento Sequencial ( Critical Sessions ) foi montado um esquema de Lock de Session de Usuaacuterio automaacutetico com
liberaccedilatildeo automaacutetica apoacutes o processamento do APW ou liberaccedilatildeo manual atraveacutes da chamada da funccedilatildeo HttpLeaveSession() antes do processamento ser terminado
Exemplificando a aplicaccedilatildeo praacutetica e funcionamento deste conceito partimos de um ambiente hipoteacutetico utilizando 3 frames onde um usuaacuterio realiza uma requisiccedilatildeo agrave funccedilatildeo que retornaraacute o source HTML da paacutegina
de frames e a mesma ao chegar no Browser faz o mesmo realizar as trecircs requisiccedilotildees simultaneamente todas elas referentes ao mesmo usuaacuterio Poreacutem o primeiro e o segundo frames realizam uma operaccedilatildeo qualquer
com uma ou mais variaacuteveis da Session do usuaacuterio e o terceiro frame realiza um outro processamento que natildeo depende da consulta de nenhuma variaacutevel da Session As trecircs requisiccedilotildees referente a este usuario seratildeo
processadas simultaneamente por working Threads diferentes ( vamos supor que naquele momento haviam trecircs Working Threads disponiacuteveis) poreacutem quando uma das duas working Threads que tentarem acesso agrave uma
variaacutevel de Session daquele usuaacuterio o Servidor verifica se alguma outra Thread estaacute com o flag de acesso agraves sessions deste usuario Se nenhuma outra thread em uso por este usuaacuterio estaacute com a bandeira entatildeo a
thread atual pega a bandeira para ela senatildeo o processamento da Thread eacute congelado no aguardo da liberaccedilatildeo da bandeira
A liberaccedilatildeo da bandeira ocorre automaticamente no retorno da Working Thread para o Browser antes da chamada do ponto de entrada para Reset do Ambiente atraveacutes da chamada na KlibEx da funccedilatildeo
HttpLeaveSession() Caso seja viaacutevel para o usuaacuterio liberar as sessions antes do retorno da funccedilatildeo ele pode utilizar-se da funccedilatildeo httpLeaveSession() no seu fonte sem necessariamente aguardar pelo encerramento
efetivo e reset de ambiente da Working Thread
Logo retornando ao exemplo acima os Frames 1 e 2 iratildeo concorrer pela banceira de atualizaccedilatildeo de conteuacutedo de sessions onde o primeiro frame que a ser executado pegaraacute a bandeira para ele e atualizaraacute a session e
o segundo frame iraacute esperar o primeiro liberar a bandeira para continuar a ser processado e o terceiro frame como natildeo utiliza nenhuma variaacutevel da session seraacute processado sem depender de nenhum dos outros dois
frames anteriores
Quando utilizamos ASP ( Microsoft Active Server Pages ) o mesmo realiza uma serializaccedilatildeo de requisiccedilotildees de paacuteginas ASP por usuaacuterio de modo que caso o mesmo usuaacuterio solicite trecircs frames asp as requisiccedilotildees
de processamento chegaratildeo ao Servidor ASP simultaneamente mas a bandeira de processamento eacute unica por paacutegina asp sendo liberada apenas apos o teacutermino do processamento da paacutegina de modo que mesmo que
nenhuma das paacuteginas faccedila uso de sessions todas as paacuteginas deste usuaacuterio seratildeo processadas em sequecircncia
08 Envio simultacircneo de HTML ao Browser
Revisatildeo 30042004
Abrangecircncia
10
Versatildeo 710 Versatildeo 811 LIB WEBEX
As aplicaccedilotildees web desenhadas para utilizar a Infra-Estrutura APWEBEX contam com o recurso de Envio simultacircneo de Html ao Browser durante o processamento de uma paacutegina Advpl-ASP ( APH eou AHU )
Este recurso eacute habilitado atraveacutes do Protheus IDE nas opccedilotildees de configuraccedilatildeo de compilaccedilatildeo do ambiente em questatildeo mais especificamente habilitado atraveacutes do CheckBox [ ] Exibir conteuacutedo do Advpl ASP
progressivamente no Browser
Ao habilitamos esta configuraccedilatildeo todos os arquivos APH e AHU satildeo parseados fazendo internamente o uso da funccedilatildeo HttpSend() de modo que mesmo antes do processamento estar concluiacutedo o Html gerado jaacute estaacute
sendo enviado agraveo Browser qoe o solicitou
A utilizaccedilatildeo deste recurso provecirc um ganho de performance subtancial na aplicaccedilatildeo final Todos os projetos desenvolvidos com esta tecnologia ( Infra-Estrutura APWEBEX ) devem ter esta configuraccedilatildeo de compilaccedilatildeo
habilitada no IDE Vale lembrar que caso este recurso natildeo esteja habilitado ao habilitaacute-lo os arquivos aph e ahu do projeto necessitam ser recompilados para que esta configuraccedilatildeo tenha o efeito desejado
Pode existir a necessidade de um processamento de um APH ou AHU natildeo enviar o script Html gerado diretamente ao Browser Para tal situaccedilatildeo podemos desabilitar temporariamente este recurso de envio de html
progressivo em tempo de execuccedilatildeo permitindo assim por exemplo uma funccedilatildeo chamar em sequecircncia dois arquivos APH um para gerar um conteuacutedo Html a ser enviado via e-mail armazenado em uma variaacutevel
Advpl e outro APH para a montagem de uma tela de status que seraacute enviada agraveo Browser solicitante
Para habilitar eou desabilitar o envio simultacircneo do Script HTML agraveo browser em tempo de execuccedilatildeo utilize a funccedilatildeo HttpSetPart()
09 Configuraccedilotildees especiacuteficas APWEBEX
Revisatildeo 26042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Ao utilizarmos as funccedilotildees de Infra-estrutura APWEBEX existem recursos da lib que exigem uma configuraccedilatildeo adicional para serem utilizados
Envio de e-mail automaacutetico atraveacutes da Rotina de Tratamento de Erro do Site
Em caso de erro fatal na aplicaccedilatildeo Web a proacutepria rotina de tratamento de erro pode ser configurada para enviar um e-mail agraveo Administrador do sistema Para tal eacute necessaacuterio inserir as chaves abaixo na seccedilatildeo
do ambiente em uso para o site
ErrorSMTP= (endereccedilo do servidor SMTP a ser usado para o envio do e-mail )
ErrorMail= ( um ou mais endereccedilos de e-mail a receber op e-mail de erro separados por virgula )
ErrorFrom= ( um e apenas um endereccedilo de e-mail a ser usado como remetente do aviso de erro )
ErrorLogin = ( nome de usuario de login no servidor de SMTP caso necessaacuterio )
ErrorPassword= ( senha do usuario de login no servidor de SMTP caso necessaacuterio )
WebAdmin - Login alternativo
A infra-estrutura APWEBEX exige um usuaacuterio e senha para entrar no moacutedulo de administraccedilatildeo WebAdmin Para validar o login eacute utilizado o arquivo de senhas do ERP O usuaacuterio deve ser o Administrador ou
pertencer ao grupo de administradores para ter acesso agraveo WebAdmin Caso natildeo seja viaacutevel usar este arquivo de senhas para validar o login podemos inserir uma chave adicional ( AdmLogin ) no Environment em uso
pela aplicaccedilatildeo Web e configurar nela a senha do usuaacuterio Administrador para login no WebAdmin Caso esta chave seja configurada o arquivo de senhas do ERP natildeo seraacute utilizado para validar o login no WebAdmin
AdmLogin= ( senha do Administrador para logar no WebAdmin )
Pasta alternativa para upload de Rpo via WebAdmin No WebAdmin eacute possiacutevel utilizar uma configuraccedilatildeo especiacutefica para a troca do repositoacuterio de objetos em uso no site sem que seja necessaacuterio parar o servidor para isso Por default a pasta de upload chama-se
SwapRPO e deve existir na estrutura de diretoacuterio do ambiente utilizado a partir do diretoacuterio raiz do ambiente ( RootPath )
RpoUpload= ( pasta de upload alternativa a partir do RootPath do ambiente )
10 Recomendaccedilotildees finais
Revisatildeo 17122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Para todo o desenvolvimento de soluccedilotildees temos em matildeos uma diversidade de recursos desenhados para melhor atender agraves necessidades e adequar-se agraves caracteristicas da aplicaccedilatildeo Dada a flexibilidade dos recursos
recomenda-se aos desenvolvedores adotarem um padratildeo de desenvolvimento e ter em foco a eficiecircncia da aplicaccedilatildeo final tanto no aspecto funcional como na codificaccedilatildeo
Lanccedilando matildeo da experiecircncia em desenvolvimento de aplicaccedilotildees web adquiridas nos uacuteltimos anos nos toacutepicos abaixo estatildeo relacionadas algumas medidas tomadas no desenvolvimento de aplicaccedilotildees que nos satildeo muito
uacuteteis no decorrer de um projeto
Nomenclatura de Funccedilotildees
Para o desenvolvimento de aplicaccedilotildees web foi criado o Statement WEB FUNCTION para a declaraccedilatildeo de funccedilotildees referentes agrave projetos web Este comando na praacutetica apenas prefixa a declaraccedilatildeo da funccedilatildeo com
W_ poreacutem a sua utilizaccedilatildeo identifica que a funccedilatildeo em questatildeo foi construiacuteda uacutenica e exclusivamente para ser chamada a partir de uma requisiccedilatildeo HTTP Em adendo agrave este devemos utilizar os comandos WEB
EXTENDED INIT END disponivels no Include apwebexch para proteger a funccedilatildeo de ser chamada em um ambiente que natildeo o APWEBEX
Separando a Interface do Processamento
Ao desenvolver utilizando Advpl ASP paacuteginas APH AHU recomenda-se separar o processamento da Interface do seguinte modo Criar uma Web Function para a chamdada de umna paacutegina com conteuacutedo
dinacircmico via link apw e um arquivo APH ou AHU de mesmo nome que seraacute chamado internamente de modo que o coacutedigo-fonte escrito na Web Function seja responsaacutevel para gerar as informaccedilotildees a serem
disponibilizadas para o usuaacuterio e o APH contenha apenas a maacutescara destas informaccedilotildees e o miacutenimo de instruccedilotildees Advpl possiacutevel para a montagem da paacutegina Este processo facilita a manutenccedilatildeo de amobos
os coacutedigos pois o Web Designer que iraacute realizar um ajuste no APH natildeo teraacute que desviar do fonte Advpl inserido na paacutegina e o Analista Programador que faraacute a manutenccedilatildeo no coacutedigo Advpl preocupar-se-aacute apenas
com o coacutedigo responsaacutevel para a geraccedilatildeo dos dados que seratildeo mascarados
Utilizaccedilatildeo das Funccedilotildees de Infra-Estrutura
Atraveacutes dos comandos e funccedilotildees disponibilizadas na Infra-Estrutura APWEBEX natildeo tecircmos a necessidade de recriar partes comuns de coacutedigo para todos os projetos que se utilizem desta tecnologia aleacutem de permitir
atraveacutes de pontos de entrada estrategicamente colocados na ferramenta um niacutevel altiacutessimo de customizaccedilatildeo para os projetos desenvolvidos com esta tecnologia de maneira praacutetica e objetiva
11 Monitoramento de Sites em WEBEX
Revisatildeo 17122003
Abrangecircncia
LIB WEBEX
O Objetivo de uma funccedilatildeo de Monitoramento de Sites eacute testar as funcionalidades baacutesicas de um site retornando uma mensagem HTML preacute-definida indicando que estaacute tudo certo e em caso de erro uma
mensagem que procure identificar o que estaacute de errado
Para sites desenvolvidos em Protheus utilizando a tecnologia WEBEX devemos criar uma funccedilatildeo especiacutefica para o site que iraacute determinar se o mesmo estaacute operacional Esta funccedilatildeo seraacute chamada atraveacutes de link
apw
Vejamos o exemplo abaixo escrito para um site cujas bases de dados estatildeo num SQL acessadas via TopConnect Neste exemplo a funccedilatildeo chamada seraacute httpservidorU_SiteMonitorapw e caso esteja tudo certo
ela retornaraacute a string (SITE OK) seguido da data e horaacuterio da execuccedilatildeo da rotina Qualquer retorno diferente disto poderaacute indicar uma anomalia no funcionamento do site
Quando hospedado um site utilizando esta tecnologia no DataCenter da Makira esta informaccedilatildeo gerada pela rotina deve ser passada agraveo depto de infra-estrutura que configuraraacute um software Monitor de Sites que iraacute
realizar a cada um minuto uma requisiccedilatildeo agrave url especificada e iraacute emitir um alerta ao Departamento para que seja verificado o site caso haja alguma falha na resposta include protheusch
include apwebexch
User Function SiteMonitor()
Local cQuery nQtdRec
Verifica se a working Thread estaacute conectada com o TOP
If TCIsConnected()
Return Working Thread perdeu a conexatildeo com o TOP
Endif
Verifica se as tabelas principais estatildeo abertas
If select(SA1)=0
Return Tabela SA1 natildeo estaacute aberta
Endif
If select(SC5)=0
Return Tabela SC5 natildeo estaacute aberta
Endif
Executa uma query de contagem de registros de uma tabela do sistema
cQuery = SELECT count() as QTDREC from SA1010
OPEN QUERY cQuery ALIAS TMPCOUNT
nQtdRec = TMPCOUNT-gtQTDREC
CLOSE QUERY TMPCOUNT
If nQtdRec=0
11
Return Falha na Contagem de registros Query SA1
Endif
Se estaacute tudo certo retorna um HTML informando que estaacute tudo OK
Return (SITE OK) +dtos(date())+ +time()
Comandos - CLOSE QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CLOSE QUERY cAlias
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAlias Caracter Alias sob o qual o cursor da Query foi aberto Caso o alias passado como paracircmetro natildeo se encontre aberto a funccedilatildeo natildeo gera nenhuma ocorrecircncia de
erro
Descriccedilatildeo
Atraveacutes do comando Close Query realizamos o fechamento de uma query aberta atraveacutes do comando OPEN QUERY
ATENCcedilAtildeO Uma query aberta pelo comando OPEN QUERY deve ser fechada pelo comando CLOSE QUERY Poderiacuteamos fechar o alias aberto atraveacutes de uma Query simplesmente com a funccedilatildeo
DbCloseArea() poreacutem isto deixaria em aberto elementos internos de controle criados pelo comando OPEN QUERY
Comandos - OPEN QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
OPEN QUERY ltcQuerygt ALIAS ltcAliasgt [ [NOCHANGE] ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcQuerygt Caracter cQuery corresponde agrave String contendo a Query a ser executada no banco de dados
ALIAS ltcAliasgt Caracter cAlias corresponde ao nome do alias sob o qual o cursor de retorno dos dados pesquisados seraacute aberto no ambiente Advpl Natildeo pode ser especificado
um nome de alias jaacute em uso senatildeo a aplicaccedilatildeo seraacute finalizada com a ocorrecircncia de erro Alias already in Use
[NOCHANGE] Caracter Caso especificada a claacuteusola NOCHANGE na abertura da query a string em cQuery natildeo seraacute submetida agrave funccedilatildeo ChangeQuery()
Descriccedilatildeo
Atraveacutes do comando OPEN QUERY realizamos a abertura de uma Query de busca no Banco de Dados atraveacutes do RDD TOPCONN retornando os dados consultados atraveacutes de um ALIAS Advpl
Caso a Query nao possa ser aberta por erro de sintaxe devido agrave thread atual natildeo estar conectada com o TopConnect ou outro erro seraacute gerado um log de erro informando o Alias o Stack ( Pilha de Chamadas ) de
execucatildeo e o conteuacutedo da Query para Debug
OBSERVACcedilOtildeES IMPORTANTES
Na montagem da string da Query devemos especificar os comandos SQL alias e nomes de campos em letras maiuacutesculas
Quando utilizamos o comando OPEN QUERY natildeo precisamos passar a expressatildeo da Query atraveacutes da funccedilatildeo ChangeQuery() Este proceduimento jaacute eacute realizado internamente pelo comando OPEN
QUERY Para que a query natildeo seja submetida agrave funccedilatildeo ChangeQuery() devemos utilizar o paracircmetro NOCHANGE
A utilizaccedilatildeo deste comando eacute impliacutecita agrave LIB APWEBEX e necessita da utilizaccedilatildeo do include Apwebexch
Comandos - WEB EXTENDED END
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED END ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando para fechar uma seccedilatildeo aberta pelo comando WEB EXTENDED INIT Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do
comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
Comandos - WEB EXTENDED INIT
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED INIT ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando juntamente com o comando WEB EXTENDED END quando montamos uma funcatildeo ( Web Function ) que foi construiacuteda para ser chamada a partir de um Web Browser quando nos
utilizamos das funccedilotildees de Infra-Estrutura APWEBEX
Atraveacutes dele eacute realizada uma preacute-validaccedilatildeo que certifica que a execuccedilatildeo da funccedilatildeo somente seraacute realizada caso a thread atual seja realmente uma Thread montada no ambiente WEBEX aleacutem de podermos inserir uma
preacute-validaccedilatildeo (START) de execuccedilatildeo especiacutefica para esta funccedilatildeo
Caso seja especificada uma funccedilatildeo na claacuteusula START a mesma deveraacute retornar uma String Retornando uma String em branco o processamento da funccedilatildeo original seraacute efetuado normalmente Caso a funccedilatildeo retorne
uma string natildeo-vazia esta string seraacute retornada para a variaacutevel cHtml e o processamento do programa seraacute desviado para a linha do coacutedigo-fonte imediatamente posterior agraveo comando WEB EXTENDED END
Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
12
Infra-Estrutura APWEBEX - EnvUserAPL - Exemplo de Uso com ERP
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo praacutetico abaixo utilizamos em um coacutedigo fonte Advpl os pontos de entrada disponibilizados na Infra-Estrutura APWEBEX para realizar a preparaccedilatildeo de um ambiente ERP Reset de Ambiente
finalizaccedilatildeo de Thread finalizaccedilatildeo de sessions por time-out e customizaccedilatildeo de mensagem de erro para o desenvolvimento de um projeto de Web Site integrado com o ERP Microsiga
Devemos adotar como padratildeo para projetos que utilizam APWEBEX a criaccedilatildeo do arquivo EnvUserapl especificamente para a definiccedilatildeo dos pontos de entrada utilizados pela Infra-Estrutura
APWEBEX e devemos apenas compilar os fontes dos pontos de entrada realmente necessaacuterios agraveo projeto INCLUDE PROTHEUSCH
INCLUDE APWEBEXCH
====================================================================================
Exemplo de Arquivo de Lib de Projeto APWEBEX utilizando os pontos de entrada
da lib para preparaccedilatildeo de ambiente reset de ambiente e tratamento de erro
utilizando APWEBEX em conjunto com o ERP Microsiga
====================================================================================
----------------------------------------------------------------------------
Ponto de Entrada StartWebEx( NIL ) =gt T ou F
Ponto de entrada executado na inicializaccedilatildeo de cada Working Thread ( ONSTART )
Eacute a responsaacutevel por preparar o ambiente para atender agraves requisiccedilotildees WEB de links apw
Natildeo recebe paracircmetro algum da lib e deve retornar T caso tenha inicialziado com sucesso
ou F em caso de falha de inicializaccedilatildeo
----------------------------------------------------------------------------
USER Function StartWebEx()
Prepara o Ambiente ERP
PREPARE ENVIRONMENT
EMPRESA 01
FILIAL 01
TABLES ZX1ZX2ZX3ZX4ZZ1ZZ2ZZ3ZZ4ZZ5
Return T
-------------------------------------------------------------------------------
Ponto de Entrada ConnectWebEx(cFnName) =gt cHtml ou
Ponto de entrada executado imediatamente antes do processamento de uma requisiccedilatildeo de um link APW
Recebe como paracircmetro o nome da funccedilatildeo a ser executada passada no link
Deve retornar uma String que seraacute retornada ao ao Browser solicitante Caso retorne uma string
em branco (vazia) a funccedilatildeo originalmente solicitada eacute executada pela lib
Caso contraacuterio a funccedilatildeo original natildeo eacute executada e a string retornada eacute enviada ao Browser
-------------------------------------------------------------------------------
USER Function ConnectWebEx(cFnName)
Local cHtmlConn =
conout(Vou executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada ResetWebEx(cFnName) =gt cHtml ou
Funccedilatildeo chamada imediatamente Apos a execuccedilatildeo de uma requisiccedilatildeo APW
Recebe como paracircmetro o nome da funccedilatildeo executada e permite tambeacutem que seja acrescentado
algo a mais no Html a ser retornado ao Browser
-------------------------------------------------------------------------------
USER Function ResetWebEx(cFnName)
Local cHtmlConn =
conout(Terminei de executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada FINISHWEBEX()
Funccedilatildeo chamada no fechamendo do ambiente de uma working Thread Apos a execuccedilatildeo deste
a Thread utilizada eacute eliminada da memoacuteria
-------------------------------------------------------------------------------
USER Function FINISHWEBEX()
conout(Finalizando a Working Thread)
Return
-------------------------------------------------------------------------------
Ponto de Entrada ENDSESSION(cSessionId) =gt NIL
Ponto de entrada chamado em uma working Thread quando a session de um usuaacuterio seraacute
eliminada da memoacuteria por time-out Recebe como parametro o Id de sessions de usuario
que estaacute sendo finalizado
-------------------------------------------------------------------------------
USER Function ENDSESSION(cSessionId)
Conout(Sesssion +cSessionId+ limpa da memoacuteria)
Return
----------------------------------------------------------------------------
Ponto de Entrada WebExError(ecErrorLogcHtml) =gt cCustomHtml ou
Esta funcao eacute chamada pela rotina de tratamento de erro WEBEX quando ocorre um erro fatal
e permite que seja retornado um Html de tratamento de erro diferenciado Ela recebe como
parametro o objeto do erro a mensagem ASCII que foi acrescentada ao arquivo errorlog
e o Html original montado pela rotina de tratamento de erro default
IMPORTANTE Por sem um ponto de entrada executado em um momento criacutetico (tratamento
de erro ) esta funccedilatildeo deve ser o mais suscinta e simples possiacutevel natildeo utilizando
sessions banco de dados etc
----------------------------------------------------------------------------
USER Function WebExError(oErrorcErrorLogcHtml)
Local cCustomHtml =
Monta mensagem de erro mais amigavel
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
13
Ocorreu um erro inesperado no
cCustomHtml += processamento desta paacutegina O Administrador do sistema seraacute notificado desta
cCustomHtml += ocorrecircncia Recomendamos fortemente que esta janela do navegador seja cCustomHtml += fechada e uma nova janela seja aberta para retornar agrave navegaccedilatildeo do site
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
Return cCustomHtml
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Nos exemplo abaixo utilizamos a funccedilatildeo escape() para formatar paracircmetros para inserir em uma URL cUrl = httplocalhostwebinfoapw
cPAram1 = Teste de Parametro 01-02
cPAram2 = reserva
cPAram3 = 1+2+3
cUrl += Par01= + escape(cPAram1) + ampPAr02= + escape(cPAram2) + ampPar03= + escape(cPAram3)
O conteudo de cUrl deveraacute ser httplocalhostwebinfoapwPar01=Teste20de20Parametro2001-02ampPAr02=23reserva23ampPar03=12B22B3
proacuteprio para a monyahem de um link
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETJOBPROFSTRING
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
O exemplo abaixo executado em uma thread iniciada a partir de um JOB WEBEX recupera algumas configuraccedilotildees atuais em uso para este JOB cJobType = GetJobProfString(type(empty) )
cInstances = GetJobProfString(Instances(empty) )
cInacTime = GetJobProfString(InactiveTimeout(default) )
cExpTime = GetJobProfString(ExpirationTime(default) )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETPARVALUE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo satildeo montados dois arrays multi-dimensionais com 2 dimensotildees e satildeo realizadas buscas nos mesmos explorando todas as possibilidades de uso da funccedilatildeo GetParValue() Local aTeste1 =
Local aTeste2 =
Aadd(aTeste1AliasTMP1)
Aadd(aTeste1Relacao2x3)
Aadd(aTeste2AliasTMP2)
Aadd(aTeste2Info---Informaccedilatildeo adicional---)
Busca apenas no array ateste1
cAlias = GetParValue(ALIASaTeste1)
cRelacao = GetParValue(RELACAOaTeste1)
cInfo = GetParValue(INFOaTeste1)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) (nao encontrado)
Busca apenas no array ateste2
cAlias = GetParValue(ALIASaTeste2)
cRelacao = GetParValue(RELACAOaTeste2)
cInfo = GetParValue(INFOaTeste2)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP2
conout(cRelacao) (nao encontrado)
conout(cInfo) ---Informaccedilatildeo Adicional---
Busca em ambos os Arrays
Primeiro no aTeste1 e depois no aTeste2
cAlias = GetParValue(ALIASaTeste1aTeste2)
cRelacao = GetParValue(RELACAOaTeste1aTeste2)
cInfo = GetParValue(INFOaTeste1aTeste2)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) ---Informaccedilatildeo Adicional---
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo abaixo geramos a string com o DUMP de um arquivo HTML salvo na pasta WEB a partir do RootPath do Environment O Dump do arquivo seraacute mostrado no Console do servidor e no Web
Browser que solicitou a funccedilatildeo U_DumpTestapw
include protheusch
include apwebexch
User Function DumpTest()
Local cHtml =
Local cTXTFile =
Local cDump =
WEB EXTENDED INIT cHtml
14
Le o arquivo
cTTXFile = memoread(WebDefaulthtm)
Gera a string com o Dump do arquivo
cDump = HExStrDump(cTTXFile)
Mostra o Dump no console
conout(cDump)
Gera HTML para a visualizaccedilatildeo do DUMP
cHtml = VarInfo(DUMPHtmlnotags(cDump)tf)
WEB EXTENDED END
Return cHtml
Exemplo do Texto mostrado no Console
HexSTRDump ( String 237 Start 1 Length 237 )
-------------------------------------------------------------------------------
3C 48 54 4D 4C 3E 3C 48 45 41 44 3E 0D 0A 3C 4D | ltHTMLgtltHEADgt__ltM
45 54 41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 | ETA HTTP-EQUIV=
43 6F 6E 74 65 6E 74 2D 54 79 70 65 22 20 63 6F | Content-Type co
6E 74 65 6E 74 3D 22 74 65 78 74 2F 68 74 6D 6C | ntent=texthtml
22 0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 | __ltMETA HTTP-EQ
55 49 56 3D 22 70 72 61 67 6D 61 22 20 63 6F 6E | UIV=pragma con
74 65 6E 74 3D 22 6E 6F 2D 63 61 63 68 65 22 3E | tent=no-cachegt
0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 55 | __ltMETA HTTP-EQU
49 56 3D 22 45 78 70 69 72 65 73 22 20 63 6F 6E | IV=Expires con
74 65 6E 74 3D 22 2D 31 22 3E 0D 0A 3C 4D 45 54 | tent=-1gt__ltMET
41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 52 65 | A HTTP-EQUIV=Re
66 72 65 73 68 22 20 63 6F 6E 74 65 6E 74 3D 22 | fresh content=
30 3B 20 75 72 6C 3D 2F 77 5F 77 45 78 30 30 30 | 0 url=w_wEx000
2E 61 70 77 22 3E 3C 2F 48 45 41 44 3E 0D 0A 3C | apwgtltHEADgt__lt
2F 48 45 41 44 3E 3C 2F 48 54 4D 4C 3E | HEADgtltHTMLgt
-------------------------------------------------------------------------------
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HTMLNOTAGS
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo a funccedilatildeo HtmlNoTags eacute utilizada para permitir a utilizaccedilatildeo de caracteres especiais no conteuacutedo de um input para um formulaacuterio Html Local cHtml =
Local cInput =
Conteudo do campo com tags HTML intepretaacuteveis
cInput =
Ao montar o Input aplicar a HtmlNoTags() ao conteudo do mesmo
cHtml +=
+HtmlNoTags(cIn
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
15
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos a funccedilatildeo RetSqlAce para montar uma query de busca por tiacutetulo de uma determinada informaccedilatildeo considerando todas as possibilidades de acentuaccedilatildeo independentemente de como o
banco foi alimentado eou a string de busca foi digitada
IMPORTANTE Na expressatildeo da Query o campo da tabela deve ser passado pela funccedilatildeo LOWER do BAnco pois a funccedilatildeo retsqlace monta a string para busca com letras minuacutesculas cFind = acentuaccedilatildeo
cQuery = SELECT FROM + RetSqlTab(ZZ1)
cQuery += WHERE LOWER(ZZ1_TITULO) LIKE +RetSqlAce(cFind)+
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VALTOSQL
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = + ValToSql(02)
cQuery += AND FA2_DTINC lt= + ValToSql(date())
O exemplo acima caso escrito de forma a realizar as conversotildees especiacuteficas para cada tipo de conteuacutedo seria o equivalemte ao coacutedigo abaixo
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = 02
cQuery += AND FA2_DTINC lt= + DTOS( date() )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VARINFO
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo eacute gerada uma string HTML com as informaccedilotildees do retorno da chamada de duas funccedilotildees baacutesicas da Linguagem Advpl User Function InfoTeste()
Local cHtml =
cHtml += VarInfo(lsquoDatersquodate())
cHtml += VarInfo(lsquoTimelsquotime())
Return cHtml
Deve ser gerado um echo no Console do Servidor parecido com este abaixo
Date -gt D ( 10) [08122003]
Time -gt C ( 8) [201748]
Infra-Estrutura APWEBEX - Exemplo das funccedilotildees de acentuaccedilatildeo ApWebEX
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo vemos a diferenccedila de comportamento entre as funccedilotildees baacutesicas da Linguagem Advpl Upper() e Lower() e a funccedilatildeo de Infra-estrutura Capital() em relaccedilatildeo agraves funccedilotildees da Infra-estrutura
APWEBEX UpperAce() LowerAce() e CApitalAce() quando utilizamos caracteres acentuados cRetorno =
cFrase = natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
cRetorno += Original + cFrase + CRLF
cRetorno += Upper() + upper(cFrase) + CRLF
cRetorno += Lower() + lower(cFrase) + CRLF
cRetorno += Capital() + capital(cFrase) + CRLF
cRetorno += UPPERACE() + UPPERACE(cFrase) + CRLF
cRetorno += LOWERACE() + LOWERACE(cFrase) + CRLF
cRetorno += CAPITALACE() + CAPITALACE(cFrase) + CRLF
Neste ponto a variaacutevel cRetorno deveraacute conter
Original natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
Upper() NatildeO Haacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSotildeES PARA O INEXPLICaacuteVEL
Lower() natildeo haacute explicaCcedilOtildees considerando excessotildees para o inexplicaacutevel
Capital() Natildeo Haacute ExplicaCcedilOtildees Considerando Excessotildees Para O Inexplicaacutevel
UPPERACE() NAtildeO HAacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSOtildeES PARA O INEXPLICAacuteVEL
LOWERACE() natildeo haacute explicaccedilotildees considerando excessotildees para o inexplicaacutevel
CAPITALACE() Natildeo Haacute Explicaccedilotildees Considerando Excessotildees Para O Inexplicaacutevel
Infra-Estrutura APWEBEX - Exemplos das funccedilotildees NTOC e CTON
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos as funccedilotildees cton e ntoc para realizar conversotildees de nuacutemeros em base decimal para outras bases numeacutericas e vice-versa
16
nNum1 = CTON(011010012) Converte binaacuterio para decimal
nNum2 = CTON(00DA25FE16) Converte Hexadecimal para decimal
nNum1++ Soma 1 ao numero em nNum1
nNum2++ Soma 1 ao numero em nNum2
cNum1 = NtoC(nNum128) Converte para binaacuterio novamente
cNum2 = NtoC(nNum2168) Converte para Hexa novamente
-------------------------------------------------------------------------
Ao final do programa cNum1 seraacute 01101010 e cNum2 seraacute 00DA25FF
-------------------------------------------------------------------------
APWEXADDERR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
APWEXADDERR ( [ cTitulo ] [ cInfo ] ) --gt T
Paracircmetros
Argumento Tipo Descriccedilatildeo
cTitulo Caracter cTitulo corresponde a um tiacutetulo identificador da informaccedilatildeo Deve ter no maacuteximo 20 caracteres Os caracteres acima da vigeacutesima posiccedilatildeo seratildeo
ignorados
cInfo Caracter cInfo corresponde agrave Informaccedilatildeo a ser acrescentada ao ERRORLOG em caso de erro
Retorno
Tipo Descriccedilatildeo
Loacutegico Esta funccedilatildeo sempre retorna T
Descriccedilatildeo
Atraveacutes da funccedilatildeo ApWExAddErr() podemos acrescentar uma string de informaccedilotildees adicionais em um buffer em memoacuteria descarregado na geraccedilatildeo do ERRORLOG no caso de uma ocorrecircncia de erro fatal na
working thread atual
Caso a funccedilatildeo seja chamada sem nenhum paracircmetro a uacuteltima ocorrecircncia acrescentada pela funccedilatildeo eacute eliminada da pilha interna de informaccedilotildees
ATENCcedilAtildeO Esta funccedilatildeo deve ser apenas utilizada em casos de necessidade de obtenccedilatildeo de informaccedilotildees especiacuteficas acerca de uma ocorrecircncia de erro natildeo reproduzida em ambiente de testes eou natildeo depuraacutevel pois
seu uso desnecessaacuterio prejudica a performance da aplicaccedilatildeo final
CAPITALACE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CAPITALACE ( lt cString gt ) --gt cStrCapital
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida
Retorno
Tipo Descriccedilatildeo
Caracter String resultante convertida para munuacutesculo com as primeiras letras das palavras significantes em maiuacutesculo
Descriccedilatildeo
Semelhante agrave funccedilatildeo de Infra-estrutura Capital() poreacutem converte tambeacutem caracteres acentuados
A funccedilatildeo CapitalAce() converte todos os caracteres de uma String para minuacutesculo e a primeira letra das palavras significantes para maiuacutesculo semelhante agrave funccedilatildeo Capital() poreacutem considera e converte tambeacutem
caracteres acentuados em OEM eou ANSI
CTON
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CTON ( lt cString gt lt nBase gt ) --gt nNumero
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave representaccedilatildeo de um nuacutemero em outra base numeacuterica compreendida entre 2 e 36
nBase Numeacuterico nBase corresponde agrave base numeacuterica utilizada pelo numero representado em cString
Retorno
Tipo Descriccedilatildeo
Numeacuterico Nuacutemero recebido como paracircmetro em notaccedilatildeo decimal ( Base 10 )
Descriccedilatildeo
Converte um nuacutemero representado em String de base 2 a 36 para um nuacutemero em base decimal (10)
Observaccedilatildeo Importante
Satildeo considerados caracteres vaacutelidos para compor um nuacutemero de base 36 os 10 algarismos numeacutericos de 0 a 9 e os 26 caracteres alfabeacuteticos maiuacutesculos compreendidos entre A e Z Quaisquer caractetes presentes na
String de paracircmetro fora desta faixa de dados eou fora da base ( por exemplo uma conversatildeo de string base 2 - binaacuterio - da string 01001020 ) retornaraacute -1 ( menos um )
ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
ESCAPE ( lt cString gt ) --gt cEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute uma sequecircncia de caracteres a ser processada
Retorno
Tipo Descriccedilatildeo
Caracter cEscaped corresponde agrave string original com os caracteres reservados utilizando a notaccedilatildeo HH
Descriccedilatildeo
A funccedilatildeo Escape() deve ser utilizada para realizar conversotildees de caracteres especiais e reservados quando da necessidade de passagem de paracircmetros via URL
A sintaxe de uma requisiccedilatildeo via URL para a passagem de paracircmetros eacute
(link)param=conteudoampparam2=conteudo2amp
Quando passamos paracircmetros via url devemos tomar o cuidado de natildeo utilizar caracteres reservados e especiais nos nomes e conteuacutedos de paracircmetros Para realizar estas conversotildees utilizamos a funccedilatildeo Escape()
17
EXECINPAGE
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXECINPAGE ( lt cAPHPage gt ) --gt cHTMLPage
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAPHPage Caracter Corresponde agraveo nome do APH que deve ser executado sem a extensatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cHtmlPage corresponde agrave string HTML gerada pela paacutegina APH AHU
Descriccedilatildeo
Atraveacutes da funccedilatildeo ExecInPage() executamos uma paacutegina APH passada como paracircmetro A funccedilatildeo deveraacute retornar a String HTML correspondente agrave paacutegina processada
Poreacutem a funccedilatildeo ExecInPage() realiza tratamentos adicionais padratildeo relacionaodo agraveo comportamento dos Projetos WEB referentes agrave customizaccedilotildees da segunte maneira
1 Primeiro eacute verificado se existe uma paacutegina AHU compilada com o nome cAPHPage Caso exista a mesma seraacute executada pela execinpage
2 Caso natildeo exista AHU com este nome eacute procurado pelo APH Caso o APH exista o mesmo seraacute executado pela ExecInPage
3 Caso natildeo existam no RPO atual o APH nem o AHU com o nome especificado no paracircmetro cAPHFile o processamento eacute abortado com a ocorrecircncia de erro [APWEXERR_0007] APH page
[ltcAPHPagegt] not found in RPO 4 Antes de executar o APH ou AHU identificado nos passos anteriores eacute verificado se existe um ponto de entrada ( User Function ) compilado com o mesmo nome do APH Caso exista o ponto de
entrada eacute executado Ele deveraacute retornar uma String HTML Se for retornada alguma string a funccedilatildeo retorna a tring retornada e natildeo processa o APH AHU Observaccedilatildeo A funccedilatildeo ExecInPage natildeo iraacute executar este
tratamento da User Function com o nome de cAPHPage caso a funccedilatildeo ExecInPage() esteja sendo executada atraveacutes de uma USER FUNCTION
Observaccedilatildeo Importante - Envio parcial de HTML agraveo Browser A funccedilatildeo ExecInpage() juntamente com o APH compilado ao serem processados iratildeo tentar enviar o conteuacutedo HTML para o Browser solicitante durante o processamento de modo que a funccedilatildeo normalmente iraacute
retornar uma String vazia
Caso seja necessaacuteria a execuccedilatildeo de uma paacutegina APH ou AHU e o natildeo-envio da mesma para o Browse por exemplo para a geraccedilatildeo de um coacutedigo HTML a ser enviado via e-mail revemos utilizar a funccedilatildeo
HttpSetPart() realizando uma chamada da mesma antes da ExecInPage() passando o paracircmetro F para desabilitar temporariamente o envio de HTML simultacircneo ao Browser e apoacutes a execuccedilatildeo da ExecInPage()
devemos re-habilitar o envio simultacircneo atraveacutes da chamada da funccedilatildeo HttpSetPart() com o paracircmetro T
EXISTPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTPAGE ( lt cAphFile gt ) --gt lFound
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAphFile Caracter Nome do arquivo APH sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Caracter Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistPage() para identificarmos no ambiente atual se um determinado arquivo APH encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistPage(teste)
conout(testeaph compilado neste RPO)
Else
conout(testeaph NAO compilado neste RPO)
Endif
EXISTUSRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTUSRPAGE ( lt cAhuFile gt ) --gt lExist
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAhuFile Caracter Nome do arquivo AHU sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Loacutegico Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistUSRPage() para identificarmos no ambiente atual se um determinado arquivo AHU encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistUSRPage(teste)
conout(testeahu compilado neste RPO)
Else
conout(testeahu NAO compilado neste RPO)
Endif
GETJOBPROFSTRING
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETJOBPROFSTRING ( lt cKey gt lt cDefault gt ) --gt cKeyValue
Paracircmetros
Argumento Tipo Descriccedilatildeo
cKey Caracter cKey corresponde agrave chave da seccedilatildeo de configuraccedilatildeo da Working Thread atual a ser retornada
cDefault Caracter Valor default (string) a ser retornado pela funccedilatildeo caso a chave especificada natildeo sehja encontrada no INI
Retorno
Tipo Descriccedilatildeo
Caracter Conteudo da Chave solicitada Caso a chave natildeo seja encontrada eacute retornado o conteudo de cDefault Caso esta funccedilatildeo natildeo seja executada a partir de uma Working Thread ela
18
retornaraacute uma string em branco ()
Descriccedilatildeo
Atraveacutes desta funccedilatildeo podemos recuperar as configuraccedilotildees do Job da Working Thread atual
GETWEXVERSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETWEXVERSION ( ) --gt cBuildId
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave String Identificadora da versatildeo no formato ltLIBgt VAAMMDDHHmm Vide Tabela A
Descriccedilatildeo
Esta funccedilatildeo natildeo requer argumentos e retorna o Identificador do build versatildeo de Release das funccedilotildees de Infra-Estrutura APWEBEX
Observaccedilatildeo A data informada pela versatildeo natildeo corresponde agrave ultima compilaccedilatildeo do RPO de um determinado Projeto WEB mas sim agrave data de release da LIB de Infra-Estrutura APWEBEX
Tabela A
Simbolo Descriccedilatildeo
AA Ano de geraccedilatildeo da Lib
MM Mecircs da geraccedilatildeo da Lib
DD Dia da geraccedilatildeo da Lib
HH Horaacuterio da geraccedilatildeo da Lib
mm Minutos do Horaacuterio de Geraccedilatildeo da Lib
(HTTP) Indica que a versatildeo foi compilada com a configuracatildeo de envio progressivo de HTML simultacircneo para o Browse Esta opccedilatildeo eacute imprescindiacutevel para projetos que se utilizam desta LIB
Por exemplo
APWEBEX Version 30312021900 (HTTP)
HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HEXSTRDUMP ( lt cString gt [ nStart ] [ nLength ] ) --gt cHExDump
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser lida para a geraccedilatildeo do Dump
nStart Numeacuterico Corresponde agrave posiccedilatildeo inicial de cString a ser considerada para a geraccedilatildeo do Dump a partir da posiccedilatildeo 1 Caso este paracircmetro natildeo seja informado o
Default eacute a posiccedilatildeo 1 da string
nLength Numeacuterico nLength corresponde agraveo tamanho a ser considerado para a geraccedilatildeo do DUMP a partir da posiccedilatildeo inicial recebida em nStart Caso este paracircmetro natildeo
seja informado eacute considerado o tamanho ateacute o final da String
Retorno
Tipo Descriccedilatildeo
Caracter O retorno da funccedilatildeo corresponde agrave uma string Advpl formatadas em 16 bytes em hexadecimal por linha mais o separador pipe (|) mais os 16 caracteres em Ansi Os caracteres de
controle ( codigo ascii menor que 32 ) satildeo convertidos para visualizaccedilatildeo para o caractere underline (_)
Descriccedilatildeo
Atraveacutes da funccedilatildeo HexStrDump() podemos gerar uma string em Advpl em formato de Dump Hexadecimal a partir da string informada como paracircmetro a partir de uma determinada posiccedilatildeo da string considerando um
nuacutemero de bytes informado
Caso os paracircmetros nPosIni e nTamString natildeo sejam informados o dump gerado corresponde a string recebida como paracircmetro em sua totalidade
Observaccedilatildeo
Natildeo devemos pasar para a funccedilatildeo HexStrDump uma string maior que 240 Kb pois a geraccedilatildeo da String de dump eacute realizada em memoacuteria sendo a string final gerada em meacutedia 42 vezes maior que a string passada
como paracircmetro Caso a string passada como paracircmetro seja maior que 240 Kb a execuccedilatildeo seraacute abortada com a ocorrecircncia de erro fatal string size overflow
HTMLNOTAGS
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HTMLNOTAGS ( lt cStrHtml gt ) --gt cStrNoTags
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrHtml Caracter cStrHtml corresponde a uma String que natildeo pode conter caracteres Html interpretaacuteveis
Retorno
Tipo Descriccedilatildeo
Caracter String original com os caracteres interpretaacuteveis Html lt gt amp convertidos para caracteres natildeo-interpretaacuteveis
Descriccedilatildeo
A Funccedilatildeo HTMLNOTAGS converte as Tags interpretaacuteveis de uma String HTML para TAGS natildeo interpretaacuteveis Este recurso eacute normalmente utilizado quando precisamos montar um input Html com um conteudo que
nao pode ser interpretado pelo browser como uma Tag Esta funccedilatildeo apenas converte os caracteres lt ( menor que ) gt ( maior que ) amp ( e comercial ) e ldquo ( aspas duplas )
Recomenda-se fortemente que na montagem do value de um input html o conteuacutedo do mesmo seja colocado entre aspas duplas pois caso o conteuacutedo do value inicial do campo contenha aspas simples (
natildeo convertidas pela funccedilatildeo HtmlNoTags) isto poderaacute ocasionar perda de dados e erro de sintaxe no formulaacuterio Html
HTTPISWEBEX
Revisatildeo 12122003
Sintaxe
HTTPISWEBEX ( ) --gt lIsApWEBEX
Retorno
Tipo Descriccedilatildeo
Loacutegico A funccedilatildeo retornaraacute T caso o ambiente de execuccedilatildeo atual seja uma Working Thread WEBEX inicializada pela funccedilatildeo de infra-estrutura STARTWEBEX
Descriccedilatildeo
Atraveacutes da funccedilatildeo HttpIsWebEx() eacute possiacutevel identificarmos se o programa atual estaacute sendo executado atraveacutes de uma Working Thread inicializada utilizando-se as funccedilotildees de Infra-Estrutura APWEBEX
ISEMAIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
19
Sintaxe
ISEMAIL ( lt cEMail gt ) --gt lEmailOk
Paracircmetros
Argumento Tipo Descriccedilatildeo
cEMail Caracter cEmail corresponde a string a ser analizada contendo um e apenas um endereccedilo de e-mail
Retorno
Tipo Descriccedilatildeo
Caracter Retorna T caso a sring recebida como paracircmetro atenda agraves definiccedilotildees de nomenclatura vaacutelidos para um endereccedilo de e-mail
Descriccedilatildeo
Utilizada para validar e-mails em Advpl a funccedilatildeo ISEMAIL recebe como paracircmetro uma string contendo um e-mail retornando T caso a string esteja em um formaacuteto vaacutelido respeitando a regra para nomenclatura de
endereccedilos de e-mail
Regra Um e-mail eacute considerado vaacutelido caso seja iniciado por um caracter apenas contenha caracteres asc de a a z e 0 a 9 e os caracteres (arroba) (ponto) - ( hiacutefen) ou _ (underline) e deve conter uma e
apenas uma arroba e no minimo um ponto apos a arroba intercalado por um caracter
LOWERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
LOWERACE ( lt cString gt ) --gt cStrLower
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a sequecircncia de caracteres a ser convertida para letras minuacutesculas
Retorno
Tipo Descriccedilatildeo
Caracter String original em letras minuacutesculas
Descriccedilatildeo
A Funccedilatildeo LOWERACE converte todos os caracteres de uma String para ldquominusculordquo semelhante agrave funccedilatildeo LOWER() poreacutem considera e converte tambeacutem caracteres acentuados em ANSI
NTOC
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
NTOC ( lt nNumero gt lt nBase gt lt nTamStr gt ) --gt cString
Paracircmetros
Argumento Tipo Descriccedilatildeo
nNumero Numeacuterico nNumero eacute o valor numeacuterico em base devimal a ser convertido
nBase Numeacuterico nBase corresponde agrave base binaacuteria a ser utilizada para converter nNumero
nTamStr Numeacuterico nTamStr corresponde ao tamanho da string representando o numero na base desejada
Retorno
Tipo Descriccedilatildeo
Caracter cString corresponde ao numero convertido para a base numeacuterica especificada como paracircmetro
Descriccedilatildeo
A Funccedilatildeo NTOC converte um nuacutemero em notaccedilatildeo decimal para um nuacutemero representado por String utilizando uma base numeacuterica entre 2 e 36 preenchendo-o com ldquo0rdquo (zeros) agrave esquerda do tamanho especificado
Observaccedilatildeo O Paracircmetro nBase deve ser especificado com um nuacutemero entre 2 e 36 Caso seja passado como paracircmetro um nuacutemero base fora desta faixa o processamento eacute abortado com a ocorrecircncia de erro
[APWEXERR_0022] INVALID NTOC BASE [X] onde ltXgt foi a base passada como argumento
REDIRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
REDIRPAGE ( lt cUrl gt [ cTarget ] [ nTime ] ) --gt cScript
Paracircmetros
Argumento Tipo Descriccedilatildeo
cUrl Caracter Link para onde o script deve apontar o redirecionamento
cTarget Caracter Destino do redirecionamento Caso natildeo especificado o default eacute _self
nTime Numeacuterico Tempo (em segundos) de delay antes do redirecionamento ser executado
Retorno
Tipo Descriccedilatildeo
Caracter Script Html JavaScript que ao ser executado no Browser (client) chama a paacuteginaobjeto chamado no Link
Descriccedilatildeo
A funccedilatildeo RedirPage eacute utilizada quando desejamos devolver ao Browser um script que ao ser executado redirecionaraacute o Browser agrave abertura de um link passado como paracircmetro
RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLACE ( lt cStrFind gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrFind Caracter cStrFind corresponde agrave sequecircncia de caracteres a ser procurada podendo conter caracteres maiuacutesculos e minuacutesculos com ou sem acentuaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cStrQuery corresponde agrave string de busca a ser utilizada na query utilizando caracteres em minuacutesculo
Descriccedilatildeo
A funccedilatildeo RetSqlAce eacute utilizada para auxiliar de montagem de querys de busca de caracteres acentuados em bases de dados A funccedilatildeo automaticamente trata a string original removendo os acentos convertendo todos
os caracteres para minuacutesculas e trocando todas as vogais e cedilhas da string original por uma sequecircncia de caracteres acentuados em munuacutescilas para busca posicional
20
RETSQLCOND
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLCOND ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlCond() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga e o Makira Hypersite utilizando aliases de 3
caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar a filial atual ( xFilial ) de acordo com o modo do arquivo ( X2_MODO ) e para sempre desconsiderar
registros deletados
Observaccedilotildees
Esta funccedilatildeo foi mantida apenas por compatibilidade pois a ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do
banco para efeitos de performance Para ganharmos performance nas Querys devemos ao inveacutes de utilizar a funccedilatildeo RetSqlCond() utilizar como primeira clauacutesula WHERE o retorno da funccedilatildeo RetSqlFil() (
comparaccedilatildeo dos campos _FILIAL os primeiros do(s) iacutendice(s) do ERP ) que retorna apenas as comparaccedilotildees de Filial e por uacuteltimo a funccedilatildeo RetSqlDel que retorna o script para verificaccedilatildeo dos campos deletados (
que eacute o uacuteltimo campo das chaves de iacutendice do ERP utilizando TopConnect )
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlCond() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de
modo que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute
retorna os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLDEL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLDEL ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlDel() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo D_E_L_E_T_ da(s) tabela(s) passada(s) como paracircmetro
Observaccedilotildees
A ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do banco para efeitos de performance Para ganharmos performance
nas Querys devemos utilizar a funccedilatildeo RetSqlDEl() na montagem das ultimas consistecircncias da claacuteusula WHERE de uma Query
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlDel() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo
que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna
os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLFIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLFIL ( lt cAliases gt [ cCompFil ] ) --gt cSQlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
cCompFil Caracter
Atraveacutes de cCompFil eacute possiacutevel especificar uma Filial FIXA a ser comparada com os campos FILIAL do(s) alias(es) passados no paracircmetro cAliases
Caso natildeo informado os campos _FILIAL da(s) tabela(s) passadas como paracircmetro em cAliases seratildeo comparados com o retorno da funccedilatildeo xFilial() de
cada alias respectivamente
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo filial atual ( xFilial ) de acordo com o modo de abertura do arquivo no ERP ( X2_MODO )
Observaccedilatildeo
Devemos atentar ao fato que a funccedilatildeo RetSqlFil() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo que estes
alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna os
nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLTAB
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLTAB ( lt cAliasList gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliasList Caracter String contendo um ou mais alias separados por virgula a terem seus nomes fiacutesicos determinados
Retorno
Tipo Descriccedilatildeo
Caracter String contendo nomes fisicos e alias identificadores dos aliases recebidos como paracircmetro
Descriccedilatildeo
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
6
06 Configurando o Server Protheus para HTTP
Revisatildeo 28042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
As configuraccedilotildees de http do Server Protheus permitem a configuraccedilatildeo de sites estaacuteticos e dinacircmicos com a criaccedilatildeo de um ou mais hosts de acesso criaccedilatildeo de pastas virtuais e dites dinacircmicos com resposta para links
apl e apw simultaneamente Neste documento abrangeremos um resumo exemplificado das configuraccedilotildees HTTP do Server Protheus As seccedilotildees abaixo devem ser inseridas no arquivo de configuraccedilotildees do servidor
Protheus ( mp8srvini )
Configuraccedilatildeo Miacutenima [http]
Enable=1
Path=cAp_Datahttp
Observaccedilatildeo Vale lembrar que apoacutes ter inserido a configuraccedilatildeo do [http] no INI do Protheus eacute importante baixar o Server e subir novamente
Com esta configuraccedilatildeo habilitamos o Server Protheus como um servidor de arquivos e paacuteginas estaacuteticas com o HTTP na porta padratildeo (80) e utilizando o diretorio em cAp_dataHttp como diretoacuterio raiz de
publicaccedilotildees WEB Como natildeo haacute configuraccedilatildeo de host especiacutefica um arquivo nesta pasta poseraacute ser acessado atraveacutes dos hosts httplocalhost ( desde que o browse seja aberto na estaccedilatildeo servidora )
httpnnnnnnnnnnnn ( IP da estaccedilatildeo servidora ) ou httpxxxxxxxxxx ( nome da estaccedilatildeo servidora ) Por exemplo Dentro da pasta configurada na chave PATH do HTTP crie um arquivo chamado defaulthtm
com o seguinte conteuacutedo ( pode ser criado inclusove com o notepad )
lthrgt
Ola Mundo HTTP
lthrgt
Agora abra um Web Browser no mesmo equipamento e digite na url httplocalhost Ao acessar esta url deveraacute ser mostrado na tela do Browse huas barras horizontais e o texto Ola Mundo HTTP entre elas
Atendendo agrave requisiccedilotildees apl
Agora vamos habilitar este host para atender agrave requisiccedilotildees de funccedilotildees atraveacutes de link apl Para tal precisamos apenas do nome de um Environment (ambiente) configurado no INI Podemos usar o proacuteprio ambinete
do ERP Basta acrescentarmos na seccedilatildeo http a chave Environment=ltnome_do_ambientegt para que este ambiente passe a atender agraveo processamento de funccedilotildees Advpl atraveacutes de links apl Por exemlo caso o
ambiente configurado para o ERP chame-se EnvADS710 basta acrescentar na seccedilatildeo http a chave Environment=EnvADS710 O INI ficaria conforme abaixo
[http]
Enable=1
Path=cAp_Datahttp
Environment=EnvADS710
Para testar a execuccedilatildeo de funccedilotildees abra um Web Browse na estaccedilatildeo servidora e acesse o link httplocalhosttimeapl IStoacuteiraacute executar a funccedilatildeo Advpl TIME() que retornaraacute ao Browse uma string contendo o
horaacuterio atual no servidor no formato HHMMSS
Atendendo agrave requisiccedilotildees apw
A configuraccedilatildeo para atendimento de requisiccedilotildees de processamento http atraveacutes de links apw envolve a criaccedilatildeo de uma nova seccedilatildeo no INI com um nome natildeo-especiacutefico para configurar o tipo de job que iraacute executar o
processamento ( WEB ou WEBEX ) juntamente com as funccedilotildees responsaacuteveis pela inicializaccedilatildeo e conexatildeo das Threads Advpl e na seccedilatildeo http configuramos uma chave chamada ResponseJob apontando para a seccedilatildeo
de configuraccedilatildeo do JOB
Por exemplo para configurarmos o atendimento de requisiccedilotildees apw em um ambiente ERP utilizando a infra-estrutura APWEBEX vamos criar uma seccedilatildeo chamada ERP_APWEBEX apontando para as funccedilotildees da
Infra-Estrutura APWEBEX correspondentes
[ERP_APWEBEX]
type=WEBEX
onstart=STARTWEBEX
onconnect=CONNECTWEBEX
Environment=EnvADS710
Instances=13
SigaWeb=MAK
Atraveacutes desta configuraccedilatildeo especificamos um Job do tipo WEBEX onde a funccedilatildeo de inicializaccedilatildeo utilizada seraacute a STARTWEBEX a funccedilatildeo de conexatildeo seraacute a CONNECTWEBEX ( ambas da Infra-estrutura
APWEBEX ) que utilizaratildeo o ambiente AnvADS710 para processamento e seratildeo colocadas no ar apenas uma Working Thread para atendimento de processamento ateacute o maacuteximo de 3 Threads As threads colocadas
no ar acima do nuacutemero miacutenimo ( no exemplo apenas 1 ) satildeo colocadas on-demand caso sejam realizadas requisiccedilotildees apw ao Servidor e natildeo hajam Working Threads dispoviacuteveis no momento e o nuacutemero de Working
Threads no ar ainda natildeo tenha atingido o maacuteximo definido Atraveacutes da configuraccedilatildeo SigaWeb=MAK informamos ao sistema que a mesma estaacute sendo utilizada para o desenvolvimento de um moacutedulo especiacutefico e natildeo
estamos utilizando um moacutedulo Web da ferramenta Protheus 8 Caso a configuraccedilatildeo SigaWeb natildeo seja informada o valor MAK eacute assumido como default
Agora para que esta seccedilatildeo de Jobs seja utilizada para o atendimento efetivo de requisiccedilotildees apw devemos estecificaacute-la na seccedilatildeo http atraveacutes da chave REsponseJob No caso inserimos a chave
ResponseJob=ERP_APWEBEX fincando a seccedilatildeo HTTP conforme abaixo
[http]
Enable=1
Path=cAp_Datahttp
Environment=EnvADS710
ResponseJob=ERP_APWEBEX
Como as requisiccedilotildees via apl e via apw satildeo independentes eacute possiacutevel configurar a seccedilatildeo http para que Environments diferentes respondam agrave requisiccedilotildees apl e apw ou que natildeo sejam atendidas requisiccedilotildees apl
apenas apw
Configurando a seccedilatildeo http para multi-host Todas as configuraccedilotildees acima vistas pertencem agrave seccedilatildeo default do HTTP De modo que tanto faz acessarmos o servidor pelo nome como pelo IP que o resultado serraacute o mesmo Poreacutem para a utilizaccedilatildeo de demais
recursos como diretoacuterios virtuais e mais de um site no mesmo servidor precisamos configurar um host de acesso
Por exemplo vamos criar uma configuraccedilatildeo de HOST para que o servidor caso seja acessado pelo NOME da maquia via HTTP seja visualizado um outro site e apenas sejam atendidos agrave links apl Para isso
devemos criar uma nova seccedilatildeo no INI cujo nome deve ser exatamente o host que seraacute acessado ( como o exemplo vamos supor que o servidor de testes chama-se srvteste ) logo devemos criar uma seccedilatildeo com este
nome
Nesta seccedilatildeo do INI devemos no miacutenimo especificar um Path de acesso agraveos arquivos e as demais configuraccedilotildees vistas ateacute agora da seccedilatildeo http satildeo opcionais A configuraccedilatildeo PORT do HTTP em um host natildeo eacute
suportada Natildeo eacute possiacutevel subir um server protheus em mais de uma porta HTTP
[srvteste]
Path=cAp_DataTestes
Environment=EnvTOP710
Deste modo caso o servidor seja acessado via http atraveacutes de LOCALHOST ou do IP do Server seraacute permitido o acesso agraves funcionalidades configuradas na seccedilatildeo HTTP Caso seja acessado via nome do servidor (
httpsrvteste ) seratildeo acessados os arquivos de outra pasta e as requisiccedilotildees apl seratildeo atendidas pelo Ambiente EnvTOP710
Utilizando este tipo de configuraccedilatildeo podemos subir vaacuterios sites diferentes na mesma aplicaccedilatildeo servidor Protheus cada qual com o seu diretoacuterio raiz de publicaccedilotildees seus ambientes independentes atendendo ou nacirco agrave
requisiccedilotildees apl eou apw
Configurando diretoacuterios virtuais
Ao configurar um host especiacutefico podemos acrescentar ao mesmo uma barra seguido de um nome para acesso agrave um diretoacuterio virtual criando desse modo um endereccedilo de acesso composto por um host e um
diretoacuterio que pode se comportar como um outro site com os arquivos publicados em um path especiacutefico que poderaacute atender requisiccedilotildees de links apl eou apw sob um outro ambiente e configuraccedilatildeo distinta
Utilizando diretoacuterios virtuais eacute possiacutevel dentro do mesmo host instalar vaacuterias aplicaccedilotildees web independentes todas acessiacuteveis sob o mesmo endereccedilotilde base alterando apenas o diretoacuterio de acesso Por exemplo
utilizando como host principal o nome do equipamento servertst podemos instalar o moacutedulo Web Portal Protheus sob o host servertstportal o moacutedulo TCF sob o host servertstrhonline e no host servertst
podemos configurar um site estaacutetico em Html com uma apresentaccedilatildeo institucional e links para os demais moacutedulos
Observaccedilotildees Importantes
Ao configurarmos um Host ele herda as configuraccedilotildees de atendimento de requisiccedilotildees apl e apw especificados na seccedilatildeo HTTP De modo que o host do exemplo continuaraacute a atender requisiccedilotildees apw poreacutem no
ambiente EnvADS710
Visto desta forma recomendamos fortemente que a seccedilatildeo [http] possua apenas especificado um Path em disco que esteja vazio e seja criada uma ou mais configuraccedilotildees de host com as suas devidas propriedades
especificas
Todas as demais chaves relacionadas agrave configuraccedilatildeo HTTP e aos Jobs WEB e WEBEX satildeo opcionais para atender agrave necessiades especiacuteficas Estas chaves estatildeo explicadas em maiores detalhes no DEM na seccedilatildeo
XXX
Configurando diretoacuterios virtuais Da mesma forma que a criaccedilatildeo de hosts podemos criar um novo host utilizando a barra de divisatildeo para especiicar uma pasta virtual quue permite a flexibilidade de termos uma pasta dentro de um mesmo host que
se comporte como um outro host Ainda baseando-se no INI montado nestes exemplos para o servidor de testes vamos supor que exista uma pasta no disco ( por exemplo cAp_dataDocs ) que contenha arquivos
HTML de uma documentaccedilatildeo que deve estar disponccedilivel na web utilizando tambeacutem o host httpsrvteste Poreacutem o host srvteste jaacute aponta para o diretoacuterio cAp_dataTestes
Com o recurso de criaccedilatildeo de diretorio virtual no HTTP criamos apenas uma nova entrada do mesmo host colocando no nome do mesmo uma barra de divisatildeo seguido do nome de uma pasta a ser acessada via
HTTP ( que natildeo precisa necessariamente existir no disco) e dentro desta seccedilatildeo acrescentar a chave path apontando para o diretoacuterio desejado da mesma maneira utilizada para configurar um host
No exemplo abaixo criamos a pasta virtual info dentro do host srvteste apontando para o path do disco cAp_DataDocs De modo que ao ser acessado via url o endereccedilo httpsrvtesteinfo a partir dele seratildeo
acessados os arquivos da pasta cAp_DataDocs
[srvtesteinfo]
Path=cAp_DataDocs
Vejamos agora como ficou o nosso arquivo INI com todas as configuraccedilotildees acima exemplificadas
Configuiracao de Working Threads usando a infra-estrutura APWEBEX
[ERP_APWEBEX]
type=WEBEX
onstart=STARTWEBEX
onconnect=CONNECTWEBEX
Environment=EnvADS710
Instances=13
Configuraccedilatildeo da seccedilatildeo httpo default para atender agrave requisiccedilotildees de apl e apw
[http]
7
Enable=1
Path=cAp_Datahttp
Environment=EnvADS710
ResponseJob=ERP_APWEBEX
SigaWeb=MAK
Configuraccedilatildeo do host srvteste para atender requisiccedilotildees via apl atraveacutes do environment EnvTOP710
[srvteste]
Path=cAp_DataTestes
Environment=EnvTOP710
Configuraccedilatildeo da pasta virtual info no host srvteste para apontar para um path no disco com documentos
[srvtesteinfo]
Path=cAp_DataDocs
Infra-Estrutura APWEBEX
Revisatildeo 27042004
Abrangecircncia
Versatildeo 811
A Infra-Estrutura APWEBEX Visando o melhor aproveitamento da tecnologia de working threads implementada no servidor Protheus para o processamento de requisiccedilotildees de uma aplicaccedilatildeo web foram desenvolvidas funccedilotildees de apoio miscelacircnea
e infra-estrutura compiladas no repositoacuterio padratildeo de Infra-Estrutura do ERP Microsiga visando simplificar e auxiliar o desenvolvimento de uma soluccedilatildeo web A este conjunto de funccedilotildees demos o nome de Lib de
Infra-Estrutura APWEBEX que engloba atualmente os tratamentos comuns agraves funccedilotildees de inicializaccedilatildeo de ambiente e conexatildeo ( atendimento de requisiccedilotildees http via link apw ) com seus respectivos pontos de
entrada comandos e funccedilotildees de miscelacircnea comuns agraveos projetos de soluccedilotildees web integradas com o ERP
Como utilizar este recurso no desenvolvimento de soluccedilotildees
As funccedilotildees pertinentes agrave Infra-Estrutura APWEBEX jaacute estatildeo implementadas no repositoacuterio padratildeo da ferramenta Protheus 8 e os comandos especiacuteficos que envolvem este recurso encontram-se no arquivo header
apwebexch disponibilizado tambeacutem jonto com a ferramenta Protheus 8
A utilizaccedilatildeo destes recursos para integraccedilatildeo de aplicaccedilotildees envolve a leitura desta documentaccedilatildeo onde seraacute visto com maiores detalhes as possibilidades de uso da ferramenta como a integraccedilatildeo de uma aplicaccedilatildeo Web
com um ambiente e funcionalidades do ERP Microsiga
Como usufruir desta documentaccedilatildeo Todos os toacutepicos pertencentes agrave este grupo satildeo direcionados agraveo desenvolvimento de soluccedilotildees web utilizando as funccedilotildees de Infra-Estrutura APWEBEX aleacutem de ser explicado com detalhes o funcionamento da
tecnologia WEBEX do Protheus e dos recursos nativos da ferramenta englobando os comandos e funccedilotildees publicados exemplos de coacutedigos Advpl utilizando estes recursos configuraccedilatildeo da ferramenta e mensagens de
ocorrecircncias de erro das funccedilotildees e comandos com possiacuteveis causas e soluccedilotildees
Eacute fortemente recomendado que os documentos constantes neste grupo fossem apreciados antes de aprofundar-se nas informaccedilotildees dos proacuteximos toacutepicos
01 Recepccedilatildeo de paracircmetros por Alias Virtuais
Revisatildeo 30042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
A recepccedilatildeo de paracircmetros vindos do Web Browser quando utilizamos Working Threads do tipo WEBEX atraveacutes de links apw eacute realizada atraveacutes de Alias Virtuais especiacuteficos ao inveacutes de receber as informaccedilotildees
GET POST e HEADER em array quando executamos a chamada atraveacutes de link apl A nomenclatura de Alias Virtual foi adotada pois a sintaxe do coacutedigo-fonte eacute exatamente a mesma utilizada quando desejamos
acessar um campo de uma tabela aberta atraveacutes de um alias
Em um ambiente montado para atender agrave requisiccedilotildees via link apw utilizando Working Threads WEBEX podemos nos utilizar dos seguintes alias virtuais
HttpCookies
HttpGet
HttpPost
HttpHeadIn
HttpHeadOut
HttpSession
HttpCookies Atraveacutes do alias virtual HttpCookies eacute possiacutevel consultar os Cookies do Header Http enviados pelo Browser e criar ou alterar o conteuacutedo de um cookie a ser devolvido agraveo Browser Um cookie visto de forma geral eacute
um paracircmetro ao qual atribuiacutemos um nome que uma vez devolvido agraveo Browse solicitante eacute re-enviado ao Protheus a partir da proacutexima requisiccedilatildeo realizada pelo Browser
HttpGet
Para receber os paracircmetros enviados atraveacutes da URL (meacutetodo GET do HTTP) jaacute devidamente convertidos e tratados utilizamos o alias virtual HttpGet onde acessamos pelo nome a propriedade desejada e caso a
mesma tenha sido enviada pelo Browser a mesma eacute retornada como uma String
HttpPost Para receber os paracircmetros submetidos (enviados) pelo Browser atraveacutes do meacutetodo POST jaacute devidamente convertidos e tratados utilizamos o alias virtual HttpPost onde acessamos pelo nome a propriedade desejada
e caso a mesma tenha sido enviada pelo Browser a mesma eacute retornada como uma String
HttpHeadIn
Para a recepccedilatildeo e tratamento das informaccedilotildees recebidas atraveacutes do Header do pacote HTTP foi criado o alias virtual HttpHeadIn que aleacutem de consultar as informaccedilotildees constantes no Header HTTP proveinente da
requisiccedilatildeo do usuaacuterio permite tambeacutem acesso agrave propriedades da conexatildeo atual do usuaacuterio como o IP do usuaacuterio solicitante por exemplo
HttpHeadOut Atraveacutes deste alias virtual de retorno podemos alterar ou criar um paracircmetro no Header de retorno HTTP do Protheus a ser devolvido agraveo Browser solicitante de uma requisiccedilatildeo de processamento
HttpSession O alias virtual HttpSession foi criado para possibilitar a criaccedilatildeo de variaacuteveis session por usuaacuterio do site com controle de identificaccedilatildeo nativa da ferramenta atraveacutes de um cookie de identificaccedilatildeo chamado
SESSIONID No toacutepico Alias Virtual HttpSession eacute explicado em detalhes o funcionamento deste mecanismo
Este recurso nos permite criar atricuir conteuacutedo e consultar conteuacutedo de uma variaacutevel relacionada agraveo usuaacuterio que estaacute realizando uma requisiccedilatildeo http Podemos armazenar em uma variaacutevel de Session os seguintes
tipos de variaacuteveis A (array) C (character) D (data) L (loacutegica) e N (numeacuterica) Natildeo satildeo suportados O (Objetos) eou B (Code Blocks)
Limitaccedilotildees de uso dos alias virtuais para recebimento de paratildemetros
Dadas as caracteriacutesticas operacionais e de acesso agraveos alias virtuais devemos estar atentos agrave nomenclatura de campos de um formulaacuterio HTML para serem recuperados com sucesso pelos alias virtuais correspondentes
A nomenclatura de campos do formulaacuterio deve obedecer agrave regra de criaccedilatildeo de variaacuteveis em Advpl O campo do formulaacuterio deve sempre ser iniciado com um caracter alfabeacutetico pode conter letras ou algarismos no
nome e o caracter _ ( underline ) Natildeo satildeo permititos espaccedilotildes hiacutefen ou caracteres acentuados como nome de um campo Caso utilizado um nome de campo fora do padratildeo suportado o conteuacutedo do mesmo natildeo seraacute
recuperaacutevel em Advpl
8
02 Alias virtual HttpCookies
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpCookies eacute possiacutevel consultar os Cookies do Header Http enviados pelo Browser e criar ou alterar o conteuacutedo de um cookie a ser devolvido agraveo Browser Uma variaacutevel de Cookie retorna um
tipo Advpl String e apenas aceita uma atruibuiccedilatildeo de String Vale lembrar tambeacutem que um cookie eacute um recurso do Browser que estaacute realizando a requisiccedilatildeo e existe um limite de tamanho para o total de Cookies
utilizados Este limite costuma ser proacuteximo a 1024 Bytes
Trata-se portanto de uma propriedade de leitura e gravaccedilatildeo dispniacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Utilizaccedilatildeo de Cookies
A utilizaccedilatildeo de Cookies tecircm objetivo praacutetico restrito agrave aplicaccedilotildees onde haja a necessidade impliacutecita de termos uma informaccedilatildeo relacionada agraveo browser utilizado pelo usuaacuterio atual que devam ser interpretadas
independente do usuaacuterio estar logado ou natildeo ( isto eacute independam diretamente de sessions )
Um exemplo praacutetico disto eacute o desenvolvimento de um site onde o conteuacutedo dinacircmico eacute retornado ao usuaacuterio em mais de um idioma Na entrada do site apresentamos um formulaacuterio ao usuaacuterio onde o mesmo iraacute
escolher o idioma de sua preferecircncia Mesmo que a session de login deste usuaacuterio expire no servidor o cookie com o idioma selecionado ainda estaacute no Browser de modo que a proacutexima requisiccedilatildeo do usuaacuterio pode ser
codificada para direcionaacute-lo para a paacutegina de login do site com as mensagens no idioma que o mesmo jaacute estava navegando
Lendo o valor de um Cookie
Atraveacutes dos exemplos abaixo lemos o valor do Cookie de identificaccedilatildeo do uacutesuaacuterio e um cookie de usuaacuterio criado para identificar no Browse qual eacute o idioma utilizado pelo usuaacuterio atual
cUserId = HttpCookies-gtUSERID Retorna o Cookie identificador do usuaacuterio do Protheus
cIdioma = HttpCookies-gtSiteLang Retorna o conteuacutedo do cookie SiteLang criado
Lendo todos os Cookies recebidos
O alias virtual HttpCookie possui uma propriedade chamada aCookies criada apenas para consulta (read-only) que retorna um Array Advpl de Strings contendo os nomes dos Cookies enviados pelo Browser agraveo
Protheus Por exemplo
aInfo = HttpCookies-gtaCookies
For nI = 1 to len(aInfo)
Mostra no console do Server todos os cookies recebidos
conout(Cookie +str(nI3)+ = + aInfo[nI])
Next
Criando um Cookie
A criaccedilatildeo de um Cookie eacute realizada atraveacutes da atrubuiccedilatildeo de um valor diretamente agraveo cookie desejado Por exemplo
HttpCookies-gtMeuCookie = TESTE
A criaccedilatildeo de um Cookie merece uma atenccedilatildeo especial pois um Cookie eacute retornado agraveo browser atraveacutes do Header de Retorno HTTP De modo que para que a criaccedilatildeo de um cookie seja realizada com sucesso o
mesmo deve ser criado antes de haver qualquer processamento de APH AHU caso este que natildeo seria mais possiacutevel a criaccedilatildeo do Cookie pois o Header de Retorno HTTP jaacute teria sido enviado agraveo browser solicitante
03 Alias virtual HttpGet
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpGet podemos consultar se uma determinada propriedade nos foi enviada atraveacutes da URL ( meacutetodo GET )
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos realizar uma requisiccedilatildeo a um link apw
passando pela URL o paracircmetro IMAGEM com o conteacuteuacutedo TESTE
httplocalhostu_TesteGetapwimagem=testeampcor=azul
Para recuperarmos em Advpl o conteuacutedo dos paracircmetros imagem e cor utilizamos
cImagem = HttpGet-gtimagem
cCor = HttpGet-gtcor
Podemos inserir tambeacutem um tratamento default Caso algum paracircmetro natildeo seja enviado ( resulte NIL ) assumimos um valor para o mesmo
DEFAULT cImagem = LogoAp8
DEFAULT cCor = amarelo
Existe tambeacutem uma propriedade do alias virtual HttpGet chamada aGets onde podemos recuperar um array de strings contendo a lista com os nomes dos paracircmetros enviados pelo browser solicitante Por exemplo
aInfo = HttpGet-gtaGets
For nI = 1 to len(aInfo)
conout(GET +str(nI3)+ = +aInfo[nI])
Next
04 Alias virtual HttpPost
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpPost podemos consultar os campos submetidos agraveo servidor atraveacutes do meacutetodo POST
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro
O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos realizar uma requisiccedilatildeo a um link apw
atraveacutes de um formulaacuterio html com meacutetodo POST partindo do Html abaixo
lthtmlgtltbodygt
ltform method=POST action=httplocalhostu_TstPostapwgt
Teste ltinput type=text name=CODIGO size=10gt
lthrgt
ltinput type=submitgt
ltformgt
ltbodygtlthtmlgt
Para recuperarmos em Advpl o conteuacutedo do campo CODIGO utilizamos
cCodigo = HttpPOST-gtCodigo
Existe tambeacutem uma propriedade do alias virtual chamada aPost onde podemos recuperar um array de strings contendo a lista com os nomes dos paracircmetros enviados pelo browser solicitante Por exemplo
aInfo = HttpPost-gtaPost
For nI = 1 to len(aInfo)
conout(POST +str(nI3)+ = +aInfo[nI])
Next
05 Alias virtual HttpHeadIn
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpHeadIn podemos consultar os paracircmetros enviados pelo Browser solicitante enviados atraveacutes do Header HTTP ao realizar uma requisiccedilatildeo ao Protheus Server
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos consultar o header http User-Agent
enviado pelo Browser solicitante contendo uma String identiificando o modelo de Browser utilizado
cUserAgent = Httpheadin-gtUser_Agent
Devemos obter como retorno uma string parecida com a mostra abaixo
Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)
Observaccedilatildeo Importante Qualquer paracircmetro no Header HTTP que contenha um ou mais caracteres invaacutelidos para a nomenclatura de variaacuteveis Advpl ( como por exemplo o User-Agent que conteacutem um hiacutefen ) satildeo trocados pelo caractere _
underline para ser possiacutevel a leitura da propriedade
Propriedades especiais
HttpHeadIn-gtaHeaders
Retorna um Array de Strings contendo todas as linhas do Header HTTP da requisiccedilatildeo
HttpHeadIn-gtmain
Retorna o nome da funccedilatildeo chamda atraveacutes da URL sem a extensatildeo e sem o host Por exemplo ao chamar o link httplocalhostu_tstHEaderapw o conteuacutedo de HttpHeadin-gtmain seraacute u_tstHEader
9
HttpHeadIn-gtREMOTE_ADDR
Retorna uma string no formato nnnnnnnnnnnn o IP da estaccedilatildeo que realizou a requisiccedilatildeo
httpHeadIn-gtREMOTE_PORT
Retorna um valor Advpl numeacuterico informando a porta utilizada para realizar a requisiccedilatildeo
06 Alias virtual HttpHeadOut
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 LIB WEBEX
Atraveacutes deste alias virtual de retorno podemos alterar ou criar um paracircmetro no Header de retorno HTTP do Protheus a ser devolvido agraveo Browser solicitante de uma requisiccedilatildeo de processamento
Trata-se portanto de uma propriedade de retorno disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
A criaccedilatildeo de uma linha no Header HTTP merece uma atenccedilatildeo especial pois para que a operaccedilatildeo realizada com sucesso o header deve ser criado antes de haver qualquer processamento de APH AHU pois neste caso
o Header de Retorno HTTP jaacute teria sido enviado agraveo browser solicitante
07 Alias virtual HttpSession
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual httpSession podemos criar e consultar variaacuteveis do tipo session relacionadas agraveo usuaacuterio que realizou a requisiccedilatildeo atraveacutes do Browser
Para diferenciar os usuaacuterios que estatildeo navegando num site o Protheus busca por um cookie identificador de usuaacuterio retornado para o browser a cada requisiccedilatildeo de link APW chamado SESSIONID Caso o Protheus
receba este cookie ele identifica quais sessions pertencem a este usuaacuterio
Quando um usuaacuterio realiza a primeira requisiccedilatildeo http ao Protheus o Protheus natildeo recebe o cookie identificador e automaticamente inicializa um identificador de sessions para o mesmo retornando o identificador ao
Browser via Header HTTP Este identificador pode ser recuperado em uma funccedilatildeo advpl atraveacutes de httpSession-gtSESSIONID
Quando criamos uma variaacutevel de session ela pode ser acessada nas proacuteximas requisiccedilotildees provenientes deste mesmo usuaacuterio Caso uma variaacutevel de session consultada natildeo exista ela retorna o valor NIL (nulo)
Vejamos os exemplos abaixo
Criando variaacuteveis Session HttpSession-gtUserId = 123
HttpSession-gtUserName = U_GetUserName()
Nas linhas acima criamos uma session para o usuaacuterio atual chamada UserId com o conteuacutedo do tipo String e criamos outra session chamada UserName com o retorno da funccedilatildeo U_GetUserName()
Consultando variaacuteveis Session Ao consultar uma variaacutevel session sempre devemos prever que a mesma natildeo pode ter sido criada de modo que a consulta pode retornar NIL ou caso a session jaacute exista retornaraacute o valor do tipo que foi atribuiacutedo `a
mesma
If HttpSession-gtUserId = NIL
Session ainda natildeo foi criada Usuaacuterio natildeo estaacute logado
conout(Usuario natildeo estaacute logado)
Else
Session jaacute criada o usuaacuterio estaacute logado
conout(Usuario estaacute logado ID = + HttpSession-gtUserId )
Endif
Exemplo de Funcionamento de Session No exemplo abaixo criamos uma session para identificar quantas vezes o usuaacuterio chamou esta funccedilatildeo especiacutefica Damos o nome da session de MyCounter que iraacute conter um nuacutemero No primeiro acesso do usuaacuterio a
session natildeo existe ( = NIL ) e eacute criada com o valor numeacuterico 1 (um) A partir das proacuteximas requisiccedilotildees realizadas ao Protheus atraveacutes desta paacutegina ( atraveacutes do botatildeo Refresh do Browser por exemplo ) a session jaacute
existe sendo somado o valor 1 agraveo conteuacutedo jaacute existente e devolvido agraveo browser solicitante um Html informando quantas chamadas jaacute foram realizadas por este usuaacuterio
include rwmakech
include apwebexch
User Function TstSession()
Local cHtml = cEcho =
WEB EXTENDED INIT cHtml
If httpSession-gtmycounter = NIL
cEcho = Inicializando contador
Conout(cEcho)
cHtml += cEcho
httpSession-gtmycounter = 1
Else
httpSession-gtmycounter++
cEcho = contador em +str(httpSession-gtmycounter3)
conout(cEcho)
Endif
cHtml += cEcho + lthrgt
WEB EXTENDED END
Return cHtml
Apoacutes compilado o fonte acima e o Server Protheus configurado e iniciado com HTTP habilitado e as working Threads configuradas abra um Web Browser e solicite a url httplocalhostu_tstsessionapw Seraacute
mostrado no Browse a mensagem Inicializando Contador Agora peccedila um Refresh desta tela ao Browser Seraacute devolvida a mensagem Contador em 2 e a cada refresh deste Browser o contador seraacute
incrementado
Uso de Sessions e Paralelismo - Comportamento do Protheus Server
O Protheus Server trata agraves requisiccedilotildees simultacircneas de links APW em paralelo desde que estejam disponiacuteveis o numero de Working Threads necessaacuterio para tal Por exemplo em uma estrutura de Frames onde cada
um deles aponta o SRC (source) para um link apw o Browser envia as trecircs requisiccedilotildees de apw para o Protheus Server e caso extistam 3 working threads disponiacuteveis naquele momento as trecircs requisiccedilotildees satildeo
atendidas em paralelo
Por outro lado se em duas destas trecircs requisiccedilotildees faz-se necessaacuteria a atualizaccedilatildeo eou consulta a uma variaacutevel de Session ( httpsession ) este processamento em paralelo caso natildeo fosse tratado poderia gerar perdas
no conteuacutedo da session caso a mesma session fosse atualizada simultaneamente
Para resolver esta questatildeo de maneira a natildeo sobrecarregar o Servidor com solicitaccedilotildees de Processamento Sequencial ( Critical Sessions ) foi montado um esquema de Lock de Session de Usuaacuterio automaacutetico com
liberaccedilatildeo automaacutetica apoacutes o processamento do APW ou liberaccedilatildeo manual atraveacutes da chamada da funccedilatildeo HttpLeaveSession() antes do processamento ser terminado
Exemplificando a aplicaccedilatildeo praacutetica e funcionamento deste conceito partimos de um ambiente hipoteacutetico utilizando 3 frames onde um usuaacuterio realiza uma requisiccedilatildeo agrave funccedilatildeo que retornaraacute o source HTML da paacutegina
de frames e a mesma ao chegar no Browser faz o mesmo realizar as trecircs requisiccedilotildees simultaneamente todas elas referentes ao mesmo usuaacuterio Poreacutem o primeiro e o segundo frames realizam uma operaccedilatildeo qualquer
com uma ou mais variaacuteveis da Session do usuaacuterio e o terceiro frame realiza um outro processamento que natildeo depende da consulta de nenhuma variaacutevel da Session As trecircs requisiccedilotildees referente a este usuario seratildeo
processadas simultaneamente por working Threads diferentes ( vamos supor que naquele momento haviam trecircs Working Threads disponiacuteveis) poreacutem quando uma das duas working Threads que tentarem acesso agrave uma
variaacutevel de Session daquele usuaacuterio o Servidor verifica se alguma outra Thread estaacute com o flag de acesso agraves sessions deste usuario Se nenhuma outra thread em uso por este usuaacuterio estaacute com a bandeira entatildeo a
thread atual pega a bandeira para ela senatildeo o processamento da Thread eacute congelado no aguardo da liberaccedilatildeo da bandeira
A liberaccedilatildeo da bandeira ocorre automaticamente no retorno da Working Thread para o Browser antes da chamada do ponto de entrada para Reset do Ambiente atraveacutes da chamada na KlibEx da funccedilatildeo
HttpLeaveSession() Caso seja viaacutevel para o usuaacuterio liberar as sessions antes do retorno da funccedilatildeo ele pode utilizar-se da funccedilatildeo httpLeaveSession() no seu fonte sem necessariamente aguardar pelo encerramento
efetivo e reset de ambiente da Working Thread
Logo retornando ao exemplo acima os Frames 1 e 2 iratildeo concorrer pela banceira de atualizaccedilatildeo de conteuacutedo de sessions onde o primeiro frame que a ser executado pegaraacute a bandeira para ele e atualizaraacute a session e
o segundo frame iraacute esperar o primeiro liberar a bandeira para continuar a ser processado e o terceiro frame como natildeo utiliza nenhuma variaacutevel da session seraacute processado sem depender de nenhum dos outros dois
frames anteriores
Quando utilizamos ASP ( Microsoft Active Server Pages ) o mesmo realiza uma serializaccedilatildeo de requisiccedilotildees de paacuteginas ASP por usuaacuterio de modo que caso o mesmo usuaacuterio solicite trecircs frames asp as requisiccedilotildees
de processamento chegaratildeo ao Servidor ASP simultaneamente mas a bandeira de processamento eacute unica por paacutegina asp sendo liberada apenas apos o teacutermino do processamento da paacutegina de modo que mesmo que
nenhuma das paacuteginas faccedila uso de sessions todas as paacuteginas deste usuaacuterio seratildeo processadas em sequecircncia
08 Envio simultacircneo de HTML ao Browser
Revisatildeo 30042004
Abrangecircncia
10
Versatildeo 710 Versatildeo 811 LIB WEBEX
As aplicaccedilotildees web desenhadas para utilizar a Infra-Estrutura APWEBEX contam com o recurso de Envio simultacircneo de Html ao Browser durante o processamento de uma paacutegina Advpl-ASP ( APH eou AHU )
Este recurso eacute habilitado atraveacutes do Protheus IDE nas opccedilotildees de configuraccedilatildeo de compilaccedilatildeo do ambiente em questatildeo mais especificamente habilitado atraveacutes do CheckBox [ ] Exibir conteuacutedo do Advpl ASP
progressivamente no Browser
Ao habilitamos esta configuraccedilatildeo todos os arquivos APH e AHU satildeo parseados fazendo internamente o uso da funccedilatildeo HttpSend() de modo que mesmo antes do processamento estar concluiacutedo o Html gerado jaacute estaacute
sendo enviado agraveo Browser qoe o solicitou
A utilizaccedilatildeo deste recurso provecirc um ganho de performance subtancial na aplicaccedilatildeo final Todos os projetos desenvolvidos com esta tecnologia ( Infra-Estrutura APWEBEX ) devem ter esta configuraccedilatildeo de compilaccedilatildeo
habilitada no IDE Vale lembrar que caso este recurso natildeo esteja habilitado ao habilitaacute-lo os arquivos aph e ahu do projeto necessitam ser recompilados para que esta configuraccedilatildeo tenha o efeito desejado
Pode existir a necessidade de um processamento de um APH ou AHU natildeo enviar o script Html gerado diretamente ao Browser Para tal situaccedilatildeo podemos desabilitar temporariamente este recurso de envio de html
progressivo em tempo de execuccedilatildeo permitindo assim por exemplo uma funccedilatildeo chamar em sequecircncia dois arquivos APH um para gerar um conteuacutedo Html a ser enviado via e-mail armazenado em uma variaacutevel
Advpl e outro APH para a montagem de uma tela de status que seraacute enviada agraveo Browser solicitante
Para habilitar eou desabilitar o envio simultacircneo do Script HTML agraveo browser em tempo de execuccedilatildeo utilize a funccedilatildeo HttpSetPart()
09 Configuraccedilotildees especiacuteficas APWEBEX
Revisatildeo 26042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Ao utilizarmos as funccedilotildees de Infra-estrutura APWEBEX existem recursos da lib que exigem uma configuraccedilatildeo adicional para serem utilizados
Envio de e-mail automaacutetico atraveacutes da Rotina de Tratamento de Erro do Site
Em caso de erro fatal na aplicaccedilatildeo Web a proacutepria rotina de tratamento de erro pode ser configurada para enviar um e-mail agraveo Administrador do sistema Para tal eacute necessaacuterio inserir as chaves abaixo na seccedilatildeo
do ambiente em uso para o site
ErrorSMTP= (endereccedilo do servidor SMTP a ser usado para o envio do e-mail )
ErrorMail= ( um ou mais endereccedilos de e-mail a receber op e-mail de erro separados por virgula )
ErrorFrom= ( um e apenas um endereccedilo de e-mail a ser usado como remetente do aviso de erro )
ErrorLogin = ( nome de usuario de login no servidor de SMTP caso necessaacuterio )
ErrorPassword= ( senha do usuario de login no servidor de SMTP caso necessaacuterio )
WebAdmin - Login alternativo
A infra-estrutura APWEBEX exige um usuaacuterio e senha para entrar no moacutedulo de administraccedilatildeo WebAdmin Para validar o login eacute utilizado o arquivo de senhas do ERP O usuaacuterio deve ser o Administrador ou
pertencer ao grupo de administradores para ter acesso agraveo WebAdmin Caso natildeo seja viaacutevel usar este arquivo de senhas para validar o login podemos inserir uma chave adicional ( AdmLogin ) no Environment em uso
pela aplicaccedilatildeo Web e configurar nela a senha do usuaacuterio Administrador para login no WebAdmin Caso esta chave seja configurada o arquivo de senhas do ERP natildeo seraacute utilizado para validar o login no WebAdmin
AdmLogin= ( senha do Administrador para logar no WebAdmin )
Pasta alternativa para upload de Rpo via WebAdmin No WebAdmin eacute possiacutevel utilizar uma configuraccedilatildeo especiacutefica para a troca do repositoacuterio de objetos em uso no site sem que seja necessaacuterio parar o servidor para isso Por default a pasta de upload chama-se
SwapRPO e deve existir na estrutura de diretoacuterio do ambiente utilizado a partir do diretoacuterio raiz do ambiente ( RootPath )
RpoUpload= ( pasta de upload alternativa a partir do RootPath do ambiente )
10 Recomendaccedilotildees finais
Revisatildeo 17122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Para todo o desenvolvimento de soluccedilotildees temos em matildeos uma diversidade de recursos desenhados para melhor atender agraves necessidades e adequar-se agraves caracteristicas da aplicaccedilatildeo Dada a flexibilidade dos recursos
recomenda-se aos desenvolvedores adotarem um padratildeo de desenvolvimento e ter em foco a eficiecircncia da aplicaccedilatildeo final tanto no aspecto funcional como na codificaccedilatildeo
Lanccedilando matildeo da experiecircncia em desenvolvimento de aplicaccedilotildees web adquiridas nos uacuteltimos anos nos toacutepicos abaixo estatildeo relacionadas algumas medidas tomadas no desenvolvimento de aplicaccedilotildees que nos satildeo muito
uacuteteis no decorrer de um projeto
Nomenclatura de Funccedilotildees
Para o desenvolvimento de aplicaccedilotildees web foi criado o Statement WEB FUNCTION para a declaraccedilatildeo de funccedilotildees referentes agrave projetos web Este comando na praacutetica apenas prefixa a declaraccedilatildeo da funccedilatildeo com
W_ poreacutem a sua utilizaccedilatildeo identifica que a funccedilatildeo em questatildeo foi construiacuteda uacutenica e exclusivamente para ser chamada a partir de uma requisiccedilatildeo HTTP Em adendo agrave este devemos utilizar os comandos WEB
EXTENDED INIT END disponivels no Include apwebexch para proteger a funccedilatildeo de ser chamada em um ambiente que natildeo o APWEBEX
Separando a Interface do Processamento
Ao desenvolver utilizando Advpl ASP paacuteginas APH AHU recomenda-se separar o processamento da Interface do seguinte modo Criar uma Web Function para a chamdada de umna paacutegina com conteuacutedo
dinacircmico via link apw e um arquivo APH ou AHU de mesmo nome que seraacute chamado internamente de modo que o coacutedigo-fonte escrito na Web Function seja responsaacutevel para gerar as informaccedilotildees a serem
disponibilizadas para o usuaacuterio e o APH contenha apenas a maacutescara destas informaccedilotildees e o miacutenimo de instruccedilotildees Advpl possiacutevel para a montagem da paacutegina Este processo facilita a manutenccedilatildeo de amobos
os coacutedigos pois o Web Designer que iraacute realizar um ajuste no APH natildeo teraacute que desviar do fonte Advpl inserido na paacutegina e o Analista Programador que faraacute a manutenccedilatildeo no coacutedigo Advpl preocupar-se-aacute apenas
com o coacutedigo responsaacutevel para a geraccedilatildeo dos dados que seratildeo mascarados
Utilizaccedilatildeo das Funccedilotildees de Infra-Estrutura
Atraveacutes dos comandos e funccedilotildees disponibilizadas na Infra-Estrutura APWEBEX natildeo tecircmos a necessidade de recriar partes comuns de coacutedigo para todos os projetos que se utilizem desta tecnologia aleacutem de permitir
atraveacutes de pontos de entrada estrategicamente colocados na ferramenta um niacutevel altiacutessimo de customizaccedilatildeo para os projetos desenvolvidos com esta tecnologia de maneira praacutetica e objetiva
11 Monitoramento de Sites em WEBEX
Revisatildeo 17122003
Abrangecircncia
LIB WEBEX
O Objetivo de uma funccedilatildeo de Monitoramento de Sites eacute testar as funcionalidades baacutesicas de um site retornando uma mensagem HTML preacute-definida indicando que estaacute tudo certo e em caso de erro uma
mensagem que procure identificar o que estaacute de errado
Para sites desenvolvidos em Protheus utilizando a tecnologia WEBEX devemos criar uma funccedilatildeo especiacutefica para o site que iraacute determinar se o mesmo estaacute operacional Esta funccedilatildeo seraacute chamada atraveacutes de link
apw
Vejamos o exemplo abaixo escrito para um site cujas bases de dados estatildeo num SQL acessadas via TopConnect Neste exemplo a funccedilatildeo chamada seraacute httpservidorU_SiteMonitorapw e caso esteja tudo certo
ela retornaraacute a string (SITE OK) seguido da data e horaacuterio da execuccedilatildeo da rotina Qualquer retorno diferente disto poderaacute indicar uma anomalia no funcionamento do site
Quando hospedado um site utilizando esta tecnologia no DataCenter da Makira esta informaccedilatildeo gerada pela rotina deve ser passada agraveo depto de infra-estrutura que configuraraacute um software Monitor de Sites que iraacute
realizar a cada um minuto uma requisiccedilatildeo agrave url especificada e iraacute emitir um alerta ao Departamento para que seja verificado o site caso haja alguma falha na resposta include protheusch
include apwebexch
User Function SiteMonitor()
Local cQuery nQtdRec
Verifica se a working Thread estaacute conectada com o TOP
If TCIsConnected()
Return Working Thread perdeu a conexatildeo com o TOP
Endif
Verifica se as tabelas principais estatildeo abertas
If select(SA1)=0
Return Tabela SA1 natildeo estaacute aberta
Endif
If select(SC5)=0
Return Tabela SC5 natildeo estaacute aberta
Endif
Executa uma query de contagem de registros de uma tabela do sistema
cQuery = SELECT count() as QTDREC from SA1010
OPEN QUERY cQuery ALIAS TMPCOUNT
nQtdRec = TMPCOUNT-gtQTDREC
CLOSE QUERY TMPCOUNT
If nQtdRec=0
11
Return Falha na Contagem de registros Query SA1
Endif
Se estaacute tudo certo retorna um HTML informando que estaacute tudo OK
Return (SITE OK) +dtos(date())+ +time()
Comandos - CLOSE QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CLOSE QUERY cAlias
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAlias Caracter Alias sob o qual o cursor da Query foi aberto Caso o alias passado como paracircmetro natildeo se encontre aberto a funccedilatildeo natildeo gera nenhuma ocorrecircncia de
erro
Descriccedilatildeo
Atraveacutes do comando Close Query realizamos o fechamento de uma query aberta atraveacutes do comando OPEN QUERY
ATENCcedilAtildeO Uma query aberta pelo comando OPEN QUERY deve ser fechada pelo comando CLOSE QUERY Poderiacuteamos fechar o alias aberto atraveacutes de uma Query simplesmente com a funccedilatildeo
DbCloseArea() poreacutem isto deixaria em aberto elementos internos de controle criados pelo comando OPEN QUERY
Comandos - OPEN QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
OPEN QUERY ltcQuerygt ALIAS ltcAliasgt [ [NOCHANGE] ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcQuerygt Caracter cQuery corresponde agrave String contendo a Query a ser executada no banco de dados
ALIAS ltcAliasgt Caracter cAlias corresponde ao nome do alias sob o qual o cursor de retorno dos dados pesquisados seraacute aberto no ambiente Advpl Natildeo pode ser especificado
um nome de alias jaacute em uso senatildeo a aplicaccedilatildeo seraacute finalizada com a ocorrecircncia de erro Alias already in Use
[NOCHANGE] Caracter Caso especificada a claacuteusola NOCHANGE na abertura da query a string em cQuery natildeo seraacute submetida agrave funccedilatildeo ChangeQuery()
Descriccedilatildeo
Atraveacutes do comando OPEN QUERY realizamos a abertura de uma Query de busca no Banco de Dados atraveacutes do RDD TOPCONN retornando os dados consultados atraveacutes de um ALIAS Advpl
Caso a Query nao possa ser aberta por erro de sintaxe devido agrave thread atual natildeo estar conectada com o TopConnect ou outro erro seraacute gerado um log de erro informando o Alias o Stack ( Pilha de Chamadas ) de
execucatildeo e o conteuacutedo da Query para Debug
OBSERVACcedilOtildeES IMPORTANTES
Na montagem da string da Query devemos especificar os comandos SQL alias e nomes de campos em letras maiuacutesculas
Quando utilizamos o comando OPEN QUERY natildeo precisamos passar a expressatildeo da Query atraveacutes da funccedilatildeo ChangeQuery() Este proceduimento jaacute eacute realizado internamente pelo comando OPEN
QUERY Para que a query natildeo seja submetida agrave funccedilatildeo ChangeQuery() devemos utilizar o paracircmetro NOCHANGE
A utilizaccedilatildeo deste comando eacute impliacutecita agrave LIB APWEBEX e necessita da utilizaccedilatildeo do include Apwebexch
Comandos - WEB EXTENDED END
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED END ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando para fechar uma seccedilatildeo aberta pelo comando WEB EXTENDED INIT Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do
comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
Comandos - WEB EXTENDED INIT
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED INIT ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando juntamente com o comando WEB EXTENDED END quando montamos uma funcatildeo ( Web Function ) que foi construiacuteda para ser chamada a partir de um Web Browser quando nos
utilizamos das funccedilotildees de Infra-Estrutura APWEBEX
Atraveacutes dele eacute realizada uma preacute-validaccedilatildeo que certifica que a execuccedilatildeo da funccedilatildeo somente seraacute realizada caso a thread atual seja realmente uma Thread montada no ambiente WEBEX aleacutem de podermos inserir uma
preacute-validaccedilatildeo (START) de execuccedilatildeo especiacutefica para esta funccedilatildeo
Caso seja especificada uma funccedilatildeo na claacuteusula START a mesma deveraacute retornar uma String Retornando uma String em branco o processamento da funccedilatildeo original seraacute efetuado normalmente Caso a funccedilatildeo retorne
uma string natildeo-vazia esta string seraacute retornada para a variaacutevel cHtml e o processamento do programa seraacute desviado para a linha do coacutedigo-fonte imediatamente posterior agraveo comando WEB EXTENDED END
Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
12
Infra-Estrutura APWEBEX - EnvUserAPL - Exemplo de Uso com ERP
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo praacutetico abaixo utilizamos em um coacutedigo fonte Advpl os pontos de entrada disponibilizados na Infra-Estrutura APWEBEX para realizar a preparaccedilatildeo de um ambiente ERP Reset de Ambiente
finalizaccedilatildeo de Thread finalizaccedilatildeo de sessions por time-out e customizaccedilatildeo de mensagem de erro para o desenvolvimento de um projeto de Web Site integrado com o ERP Microsiga
Devemos adotar como padratildeo para projetos que utilizam APWEBEX a criaccedilatildeo do arquivo EnvUserapl especificamente para a definiccedilatildeo dos pontos de entrada utilizados pela Infra-Estrutura
APWEBEX e devemos apenas compilar os fontes dos pontos de entrada realmente necessaacuterios agraveo projeto INCLUDE PROTHEUSCH
INCLUDE APWEBEXCH
====================================================================================
Exemplo de Arquivo de Lib de Projeto APWEBEX utilizando os pontos de entrada
da lib para preparaccedilatildeo de ambiente reset de ambiente e tratamento de erro
utilizando APWEBEX em conjunto com o ERP Microsiga
====================================================================================
----------------------------------------------------------------------------
Ponto de Entrada StartWebEx( NIL ) =gt T ou F
Ponto de entrada executado na inicializaccedilatildeo de cada Working Thread ( ONSTART )
Eacute a responsaacutevel por preparar o ambiente para atender agraves requisiccedilotildees WEB de links apw
Natildeo recebe paracircmetro algum da lib e deve retornar T caso tenha inicialziado com sucesso
ou F em caso de falha de inicializaccedilatildeo
----------------------------------------------------------------------------
USER Function StartWebEx()
Prepara o Ambiente ERP
PREPARE ENVIRONMENT
EMPRESA 01
FILIAL 01
TABLES ZX1ZX2ZX3ZX4ZZ1ZZ2ZZ3ZZ4ZZ5
Return T
-------------------------------------------------------------------------------
Ponto de Entrada ConnectWebEx(cFnName) =gt cHtml ou
Ponto de entrada executado imediatamente antes do processamento de uma requisiccedilatildeo de um link APW
Recebe como paracircmetro o nome da funccedilatildeo a ser executada passada no link
Deve retornar uma String que seraacute retornada ao ao Browser solicitante Caso retorne uma string
em branco (vazia) a funccedilatildeo originalmente solicitada eacute executada pela lib
Caso contraacuterio a funccedilatildeo original natildeo eacute executada e a string retornada eacute enviada ao Browser
-------------------------------------------------------------------------------
USER Function ConnectWebEx(cFnName)
Local cHtmlConn =
conout(Vou executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada ResetWebEx(cFnName) =gt cHtml ou
Funccedilatildeo chamada imediatamente Apos a execuccedilatildeo de uma requisiccedilatildeo APW
Recebe como paracircmetro o nome da funccedilatildeo executada e permite tambeacutem que seja acrescentado
algo a mais no Html a ser retornado ao Browser
-------------------------------------------------------------------------------
USER Function ResetWebEx(cFnName)
Local cHtmlConn =
conout(Terminei de executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada FINISHWEBEX()
Funccedilatildeo chamada no fechamendo do ambiente de uma working Thread Apos a execuccedilatildeo deste
a Thread utilizada eacute eliminada da memoacuteria
-------------------------------------------------------------------------------
USER Function FINISHWEBEX()
conout(Finalizando a Working Thread)
Return
-------------------------------------------------------------------------------
Ponto de Entrada ENDSESSION(cSessionId) =gt NIL
Ponto de entrada chamado em uma working Thread quando a session de um usuaacuterio seraacute
eliminada da memoacuteria por time-out Recebe como parametro o Id de sessions de usuario
que estaacute sendo finalizado
-------------------------------------------------------------------------------
USER Function ENDSESSION(cSessionId)
Conout(Sesssion +cSessionId+ limpa da memoacuteria)
Return
----------------------------------------------------------------------------
Ponto de Entrada WebExError(ecErrorLogcHtml) =gt cCustomHtml ou
Esta funcao eacute chamada pela rotina de tratamento de erro WEBEX quando ocorre um erro fatal
e permite que seja retornado um Html de tratamento de erro diferenciado Ela recebe como
parametro o objeto do erro a mensagem ASCII que foi acrescentada ao arquivo errorlog
e o Html original montado pela rotina de tratamento de erro default
IMPORTANTE Por sem um ponto de entrada executado em um momento criacutetico (tratamento
de erro ) esta funccedilatildeo deve ser o mais suscinta e simples possiacutevel natildeo utilizando
sessions banco de dados etc
----------------------------------------------------------------------------
USER Function WebExError(oErrorcErrorLogcHtml)
Local cCustomHtml =
Monta mensagem de erro mais amigavel
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
13
Ocorreu um erro inesperado no
cCustomHtml += processamento desta paacutegina O Administrador do sistema seraacute notificado desta
cCustomHtml += ocorrecircncia Recomendamos fortemente que esta janela do navegador seja cCustomHtml += fechada e uma nova janela seja aberta para retornar agrave navegaccedilatildeo do site
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
Return cCustomHtml
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Nos exemplo abaixo utilizamos a funccedilatildeo escape() para formatar paracircmetros para inserir em uma URL cUrl = httplocalhostwebinfoapw
cPAram1 = Teste de Parametro 01-02
cPAram2 = reserva
cPAram3 = 1+2+3
cUrl += Par01= + escape(cPAram1) + ampPAr02= + escape(cPAram2) + ampPar03= + escape(cPAram3)
O conteudo de cUrl deveraacute ser httplocalhostwebinfoapwPar01=Teste20de20Parametro2001-02ampPAr02=23reserva23ampPar03=12B22B3
proacuteprio para a monyahem de um link
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETJOBPROFSTRING
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
O exemplo abaixo executado em uma thread iniciada a partir de um JOB WEBEX recupera algumas configuraccedilotildees atuais em uso para este JOB cJobType = GetJobProfString(type(empty) )
cInstances = GetJobProfString(Instances(empty) )
cInacTime = GetJobProfString(InactiveTimeout(default) )
cExpTime = GetJobProfString(ExpirationTime(default) )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETPARVALUE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo satildeo montados dois arrays multi-dimensionais com 2 dimensotildees e satildeo realizadas buscas nos mesmos explorando todas as possibilidades de uso da funccedilatildeo GetParValue() Local aTeste1 =
Local aTeste2 =
Aadd(aTeste1AliasTMP1)
Aadd(aTeste1Relacao2x3)
Aadd(aTeste2AliasTMP2)
Aadd(aTeste2Info---Informaccedilatildeo adicional---)
Busca apenas no array ateste1
cAlias = GetParValue(ALIASaTeste1)
cRelacao = GetParValue(RELACAOaTeste1)
cInfo = GetParValue(INFOaTeste1)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) (nao encontrado)
Busca apenas no array ateste2
cAlias = GetParValue(ALIASaTeste2)
cRelacao = GetParValue(RELACAOaTeste2)
cInfo = GetParValue(INFOaTeste2)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP2
conout(cRelacao) (nao encontrado)
conout(cInfo) ---Informaccedilatildeo Adicional---
Busca em ambos os Arrays
Primeiro no aTeste1 e depois no aTeste2
cAlias = GetParValue(ALIASaTeste1aTeste2)
cRelacao = GetParValue(RELACAOaTeste1aTeste2)
cInfo = GetParValue(INFOaTeste1aTeste2)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) ---Informaccedilatildeo Adicional---
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo abaixo geramos a string com o DUMP de um arquivo HTML salvo na pasta WEB a partir do RootPath do Environment O Dump do arquivo seraacute mostrado no Console do servidor e no Web
Browser que solicitou a funccedilatildeo U_DumpTestapw
include protheusch
include apwebexch
User Function DumpTest()
Local cHtml =
Local cTXTFile =
Local cDump =
WEB EXTENDED INIT cHtml
14
Le o arquivo
cTTXFile = memoread(WebDefaulthtm)
Gera a string com o Dump do arquivo
cDump = HExStrDump(cTTXFile)
Mostra o Dump no console
conout(cDump)
Gera HTML para a visualizaccedilatildeo do DUMP
cHtml = VarInfo(DUMPHtmlnotags(cDump)tf)
WEB EXTENDED END
Return cHtml
Exemplo do Texto mostrado no Console
HexSTRDump ( String 237 Start 1 Length 237 )
-------------------------------------------------------------------------------
3C 48 54 4D 4C 3E 3C 48 45 41 44 3E 0D 0A 3C 4D | ltHTMLgtltHEADgt__ltM
45 54 41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 | ETA HTTP-EQUIV=
43 6F 6E 74 65 6E 74 2D 54 79 70 65 22 20 63 6F | Content-Type co
6E 74 65 6E 74 3D 22 74 65 78 74 2F 68 74 6D 6C | ntent=texthtml
22 0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 | __ltMETA HTTP-EQ
55 49 56 3D 22 70 72 61 67 6D 61 22 20 63 6F 6E | UIV=pragma con
74 65 6E 74 3D 22 6E 6F 2D 63 61 63 68 65 22 3E | tent=no-cachegt
0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 55 | __ltMETA HTTP-EQU
49 56 3D 22 45 78 70 69 72 65 73 22 20 63 6F 6E | IV=Expires con
74 65 6E 74 3D 22 2D 31 22 3E 0D 0A 3C 4D 45 54 | tent=-1gt__ltMET
41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 52 65 | A HTTP-EQUIV=Re
66 72 65 73 68 22 20 63 6F 6E 74 65 6E 74 3D 22 | fresh content=
30 3B 20 75 72 6C 3D 2F 77 5F 77 45 78 30 30 30 | 0 url=w_wEx000
2E 61 70 77 22 3E 3C 2F 48 45 41 44 3E 0D 0A 3C | apwgtltHEADgt__lt
2F 48 45 41 44 3E 3C 2F 48 54 4D 4C 3E | HEADgtltHTMLgt
-------------------------------------------------------------------------------
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HTMLNOTAGS
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo a funccedilatildeo HtmlNoTags eacute utilizada para permitir a utilizaccedilatildeo de caracteres especiais no conteuacutedo de um input para um formulaacuterio Html Local cHtml =
Local cInput =
Conteudo do campo com tags HTML intepretaacuteveis
cInput =
Ao montar o Input aplicar a HtmlNoTags() ao conteudo do mesmo
cHtml +=
+HtmlNoTags(cIn
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
15
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos a funccedilatildeo RetSqlAce para montar uma query de busca por tiacutetulo de uma determinada informaccedilatildeo considerando todas as possibilidades de acentuaccedilatildeo independentemente de como o
banco foi alimentado eou a string de busca foi digitada
IMPORTANTE Na expressatildeo da Query o campo da tabela deve ser passado pela funccedilatildeo LOWER do BAnco pois a funccedilatildeo retsqlace monta a string para busca com letras minuacutesculas cFind = acentuaccedilatildeo
cQuery = SELECT FROM + RetSqlTab(ZZ1)
cQuery += WHERE LOWER(ZZ1_TITULO) LIKE +RetSqlAce(cFind)+
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VALTOSQL
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = + ValToSql(02)
cQuery += AND FA2_DTINC lt= + ValToSql(date())
O exemplo acima caso escrito de forma a realizar as conversotildees especiacuteficas para cada tipo de conteuacutedo seria o equivalemte ao coacutedigo abaixo
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = 02
cQuery += AND FA2_DTINC lt= + DTOS( date() )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VARINFO
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo eacute gerada uma string HTML com as informaccedilotildees do retorno da chamada de duas funccedilotildees baacutesicas da Linguagem Advpl User Function InfoTeste()
Local cHtml =
cHtml += VarInfo(lsquoDatersquodate())
cHtml += VarInfo(lsquoTimelsquotime())
Return cHtml
Deve ser gerado um echo no Console do Servidor parecido com este abaixo
Date -gt D ( 10) [08122003]
Time -gt C ( 8) [201748]
Infra-Estrutura APWEBEX - Exemplo das funccedilotildees de acentuaccedilatildeo ApWebEX
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo vemos a diferenccedila de comportamento entre as funccedilotildees baacutesicas da Linguagem Advpl Upper() e Lower() e a funccedilatildeo de Infra-estrutura Capital() em relaccedilatildeo agraves funccedilotildees da Infra-estrutura
APWEBEX UpperAce() LowerAce() e CApitalAce() quando utilizamos caracteres acentuados cRetorno =
cFrase = natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
cRetorno += Original + cFrase + CRLF
cRetorno += Upper() + upper(cFrase) + CRLF
cRetorno += Lower() + lower(cFrase) + CRLF
cRetorno += Capital() + capital(cFrase) + CRLF
cRetorno += UPPERACE() + UPPERACE(cFrase) + CRLF
cRetorno += LOWERACE() + LOWERACE(cFrase) + CRLF
cRetorno += CAPITALACE() + CAPITALACE(cFrase) + CRLF
Neste ponto a variaacutevel cRetorno deveraacute conter
Original natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
Upper() NatildeO Haacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSotildeES PARA O INEXPLICaacuteVEL
Lower() natildeo haacute explicaCcedilOtildees considerando excessotildees para o inexplicaacutevel
Capital() Natildeo Haacute ExplicaCcedilOtildees Considerando Excessotildees Para O Inexplicaacutevel
UPPERACE() NAtildeO HAacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSOtildeES PARA O INEXPLICAacuteVEL
LOWERACE() natildeo haacute explicaccedilotildees considerando excessotildees para o inexplicaacutevel
CAPITALACE() Natildeo Haacute Explicaccedilotildees Considerando Excessotildees Para O Inexplicaacutevel
Infra-Estrutura APWEBEX - Exemplos das funccedilotildees NTOC e CTON
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos as funccedilotildees cton e ntoc para realizar conversotildees de nuacutemeros em base decimal para outras bases numeacutericas e vice-versa
16
nNum1 = CTON(011010012) Converte binaacuterio para decimal
nNum2 = CTON(00DA25FE16) Converte Hexadecimal para decimal
nNum1++ Soma 1 ao numero em nNum1
nNum2++ Soma 1 ao numero em nNum2
cNum1 = NtoC(nNum128) Converte para binaacuterio novamente
cNum2 = NtoC(nNum2168) Converte para Hexa novamente
-------------------------------------------------------------------------
Ao final do programa cNum1 seraacute 01101010 e cNum2 seraacute 00DA25FF
-------------------------------------------------------------------------
APWEXADDERR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
APWEXADDERR ( [ cTitulo ] [ cInfo ] ) --gt T
Paracircmetros
Argumento Tipo Descriccedilatildeo
cTitulo Caracter cTitulo corresponde a um tiacutetulo identificador da informaccedilatildeo Deve ter no maacuteximo 20 caracteres Os caracteres acima da vigeacutesima posiccedilatildeo seratildeo
ignorados
cInfo Caracter cInfo corresponde agrave Informaccedilatildeo a ser acrescentada ao ERRORLOG em caso de erro
Retorno
Tipo Descriccedilatildeo
Loacutegico Esta funccedilatildeo sempre retorna T
Descriccedilatildeo
Atraveacutes da funccedilatildeo ApWExAddErr() podemos acrescentar uma string de informaccedilotildees adicionais em um buffer em memoacuteria descarregado na geraccedilatildeo do ERRORLOG no caso de uma ocorrecircncia de erro fatal na
working thread atual
Caso a funccedilatildeo seja chamada sem nenhum paracircmetro a uacuteltima ocorrecircncia acrescentada pela funccedilatildeo eacute eliminada da pilha interna de informaccedilotildees
ATENCcedilAtildeO Esta funccedilatildeo deve ser apenas utilizada em casos de necessidade de obtenccedilatildeo de informaccedilotildees especiacuteficas acerca de uma ocorrecircncia de erro natildeo reproduzida em ambiente de testes eou natildeo depuraacutevel pois
seu uso desnecessaacuterio prejudica a performance da aplicaccedilatildeo final
CAPITALACE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CAPITALACE ( lt cString gt ) --gt cStrCapital
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida
Retorno
Tipo Descriccedilatildeo
Caracter String resultante convertida para munuacutesculo com as primeiras letras das palavras significantes em maiuacutesculo
Descriccedilatildeo
Semelhante agrave funccedilatildeo de Infra-estrutura Capital() poreacutem converte tambeacutem caracteres acentuados
A funccedilatildeo CapitalAce() converte todos os caracteres de uma String para minuacutesculo e a primeira letra das palavras significantes para maiuacutesculo semelhante agrave funccedilatildeo Capital() poreacutem considera e converte tambeacutem
caracteres acentuados em OEM eou ANSI
CTON
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CTON ( lt cString gt lt nBase gt ) --gt nNumero
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave representaccedilatildeo de um nuacutemero em outra base numeacuterica compreendida entre 2 e 36
nBase Numeacuterico nBase corresponde agrave base numeacuterica utilizada pelo numero representado em cString
Retorno
Tipo Descriccedilatildeo
Numeacuterico Nuacutemero recebido como paracircmetro em notaccedilatildeo decimal ( Base 10 )
Descriccedilatildeo
Converte um nuacutemero representado em String de base 2 a 36 para um nuacutemero em base decimal (10)
Observaccedilatildeo Importante
Satildeo considerados caracteres vaacutelidos para compor um nuacutemero de base 36 os 10 algarismos numeacutericos de 0 a 9 e os 26 caracteres alfabeacuteticos maiuacutesculos compreendidos entre A e Z Quaisquer caractetes presentes na
String de paracircmetro fora desta faixa de dados eou fora da base ( por exemplo uma conversatildeo de string base 2 - binaacuterio - da string 01001020 ) retornaraacute -1 ( menos um )
ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
ESCAPE ( lt cString gt ) --gt cEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute uma sequecircncia de caracteres a ser processada
Retorno
Tipo Descriccedilatildeo
Caracter cEscaped corresponde agrave string original com os caracteres reservados utilizando a notaccedilatildeo HH
Descriccedilatildeo
A funccedilatildeo Escape() deve ser utilizada para realizar conversotildees de caracteres especiais e reservados quando da necessidade de passagem de paracircmetros via URL
A sintaxe de uma requisiccedilatildeo via URL para a passagem de paracircmetros eacute
(link)param=conteudoampparam2=conteudo2amp
Quando passamos paracircmetros via url devemos tomar o cuidado de natildeo utilizar caracteres reservados e especiais nos nomes e conteuacutedos de paracircmetros Para realizar estas conversotildees utilizamos a funccedilatildeo Escape()
17
EXECINPAGE
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXECINPAGE ( lt cAPHPage gt ) --gt cHTMLPage
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAPHPage Caracter Corresponde agraveo nome do APH que deve ser executado sem a extensatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cHtmlPage corresponde agrave string HTML gerada pela paacutegina APH AHU
Descriccedilatildeo
Atraveacutes da funccedilatildeo ExecInPage() executamos uma paacutegina APH passada como paracircmetro A funccedilatildeo deveraacute retornar a String HTML correspondente agrave paacutegina processada
Poreacutem a funccedilatildeo ExecInPage() realiza tratamentos adicionais padratildeo relacionaodo agraveo comportamento dos Projetos WEB referentes agrave customizaccedilotildees da segunte maneira
1 Primeiro eacute verificado se existe uma paacutegina AHU compilada com o nome cAPHPage Caso exista a mesma seraacute executada pela execinpage
2 Caso natildeo exista AHU com este nome eacute procurado pelo APH Caso o APH exista o mesmo seraacute executado pela ExecInPage
3 Caso natildeo existam no RPO atual o APH nem o AHU com o nome especificado no paracircmetro cAPHFile o processamento eacute abortado com a ocorrecircncia de erro [APWEXERR_0007] APH page
[ltcAPHPagegt] not found in RPO 4 Antes de executar o APH ou AHU identificado nos passos anteriores eacute verificado se existe um ponto de entrada ( User Function ) compilado com o mesmo nome do APH Caso exista o ponto de
entrada eacute executado Ele deveraacute retornar uma String HTML Se for retornada alguma string a funccedilatildeo retorna a tring retornada e natildeo processa o APH AHU Observaccedilatildeo A funccedilatildeo ExecInPage natildeo iraacute executar este
tratamento da User Function com o nome de cAPHPage caso a funccedilatildeo ExecInPage() esteja sendo executada atraveacutes de uma USER FUNCTION
Observaccedilatildeo Importante - Envio parcial de HTML agraveo Browser A funccedilatildeo ExecInpage() juntamente com o APH compilado ao serem processados iratildeo tentar enviar o conteuacutedo HTML para o Browser solicitante durante o processamento de modo que a funccedilatildeo normalmente iraacute
retornar uma String vazia
Caso seja necessaacuteria a execuccedilatildeo de uma paacutegina APH ou AHU e o natildeo-envio da mesma para o Browse por exemplo para a geraccedilatildeo de um coacutedigo HTML a ser enviado via e-mail revemos utilizar a funccedilatildeo
HttpSetPart() realizando uma chamada da mesma antes da ExecInPage() passando o paracircmetro F para desabilitar temporariamente o envio de HTML simultacircneo ao Browser e apoacutes a execuccedilatildeo da ExecInPage()
devemos re-habilitar o envio simultacircneo atraveacutes da chamada da funccedilatildeo HttpSetPart() com o paracircmetro T
EXISTPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTPAGE ( lt cAphFile gt ) --gt lFound
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAphFile Caracter Nome do arquivo APH sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Caracter Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistPage() para identificarmos no ambiente atual se um determinado arquivo APH encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistPage(teste)
conout(testeaph compilado neste RPO)
Else
conout(testeaph NAO compilado neste RPO)
Endif
EXISTUSRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTUSRPAGE ( lt cAhuFile gt ) --gt lExist
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAhuFile Caracter Nome do arquivo AHU sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Loacutegico Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistUSRPage() para identificarmos no ambiente atual se um determinado arquivo AHU encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistUSRPage(teste)
conout(testeahu compilado neste RPO)
Else
conout(testeahu NAO compilado neste RPO)
Endif
GETJOBPROFSTRING
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETJOBPROFSTRING ( lt cKey gt lt cDefault gt ) --gt cKeyValue
Paracircmetros
Argumento Tipo Descriccedilatildeo
cKey Caracter cKey corresponde agrave chave da seccedilatildeo de configuraccedilatildeo da Working Thread atual a ser retornada
cDefault Caracter Valor default (string) a ser retornado pela funccedilatildeo caso a chave especificada natildeo sehja encontrada no INI
Retorno
Tipo Descriccedilatildeo
Caracter Conteudo da Chave solicitada Caso a chave natildeo seja encontrada eacute retornado o conteudo de cDefault Caso esta funccedilatildeo natildeo seja executada a partir de uma Working Thread ela
18
retornaraacute uma string em branco ()
Descriccedilatildeo
Atraveacutes desta funccedilatildeo podemos recuperar as configuraccedilotildees do Job da Working Thread atual
GETWEXVERSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETWEXVERSION ( ) --gt cBuildId
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave String Identificadora da versatildeo no formato ltLIBgt VAAMMDDHHmm Vide Tabela A
Descriccedilatildeo
Esta funccedilatildeo natildeo requer argumentos e retorna o Identificador do build versatildeo de Release das funccedilotildees de Infra-Estrutura APWEBEX
Observaccedilatildeo A data informada pela versatildeo natildeo corresponde agrave ultima compilaccedilatildeo do RPO de um determinado Projeto WEB mas sim agrave data de release da LIB de Infra-Estrutura APWEBEX
Tabela A
Simbolo Descriccedilatildeo
AA Ano de geraccedilatildeo da Lib
MM Mecircs da geraccedilatildeo da Lib
DD Dia da geraccedilatildeo da Lib
HH Horaacuterio da geraccedilatildeo da Lib
mm Minutos do Horaacuterio de Geraccedilatildeo da Lib
(HTTP) Indica que a versatildeo foi compilada com a configuracatildeo de envio progressivo de HTML simultacircneo para o Browse Esta opccedilatildeo eacute imprescindiacutevel para projetos que se utilizam desta LIB
Por exemplo
APWEBEX Version 30312021900 (HTTP)
HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HEXSTRDUMP ( lt cString gt [ nStart ] [ nLength ] ) --gt cHExDump
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser lida para a geraccedilatildeo do Dump
nStart Numeacuterico Corresponde agrave posiccedilatildeo inicial de cString a ser considerada para a geraccedilatildeo do Dump a partir da posiccedilatildeo 1 Caso este paracircmetro natildeo seja informado o
Default eacute a posiccedilatildeo 1 da string
nLength Numeacuterico nLength corresponde agraveo tamanho a ser considerado para a geraccedilatildeo do DUMP a partir da posiccedilatildeo inicial recebida em nStart Caso este paracircmetro natildeo
seja informado eacute considerado o tamanho ateacute o final da String
Retorno
Tipo Descriccedilatildeo
Caracter O retorno da funccedilatildeo corresponde agrave uma string Advpl formatadas em 16 bytes em hexadecimal por linha mais o separador pipe (|) mais os 16 caracteres em Ansi Os caracteres de
controle ( codigo ascii menor que 32 ) satildeo convertidos para visualizaccedilatildeo para o caractere underline (_)
Descriccedilatildeo
Atraveacutes da funccedilatildeo HexStrDump() podemos gerar uma string em Advpl em formato de Dump Hexadecimal a partir da string informada como paracircmetro a partir de uma determinada posiccedilatildeo da string considerando um
nuacutemero de bytes informado
Caso os paracircmetros nPosIni e nTamString natildeo sejam informados o dump gerado corresponde a string recebida como paracircmetro em sua totalidade
Observaccedilatildeo
Natildeo devemos pasar para a funccedilatildeo HexStrDump uma string maior que 240 Kb pois a geraccedilatildeo da String de dump eacute realizada em memoacuteria sendo a string final gerada em meacutedia 42 vezes maior que a string passada
como paracircmetro Caso a string passada como paracircmetro seja maior que 240 Kb a execuccedilatildeo seraacute abortada com a ocorrecircncia de erro fatal string size overflow
HTMLNOTAGS
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HTMLNOTAGS ( lt cStrHtml gt ) --gt cStrNoTags
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrHtml Caracter cStrHtml corresponde a uma String que natildeo pode conter caracteres Html interpretaacuteveis
Retorno
Tipo Descriccedilatildeo
Caracter String original com os caracteres interpretaacuteveis Html lt gt amp convertidos para caracteres natildeo-interpretaacuteveis
Descriccedilatildeo
A Funccedilatildeo HTMLNOTAGS converte as Tags interpretaacuteveis de uma String HTML para TAGS natildeo interpretaacuteveis Este recurso eacute normalmente utilizado quando precisamos montar um input Html com um conteudo que
nao pode ser interpretado pelo browser como uma Tag Esta funccedilatildeo apenas converte os caracteres lt ( menor que ) gt ( maior que ) amp ( e comercial ) e ldquo ( aspas duplas )
Recomenda-se fortemente que na montagem do value de um input html o conteuacutedo do mesmo seja colocado entre aspas duplas pois caso o conteuacutedo do value inicial do campo contenha aspas simples (
natildeo convertidas pela funccedilatildeo HtmlNoTags) isto poderaacute ocasionar perda de dados e erro de sintaxe no formulaacuterio Html
HTTPISWEBEX
Revisatildeo 12122003
Sintaxe
HTTPISWEBEX ( ) --gt lIsApWEBEX
Retorno
Tipo Descriccedilatildeo
Loacutegico A funccedilatildeo retornaraacute T caso o ambiente de execuccedilatildeo atual seja uma Working Thread WEBEX inicializada pela funccedilatildeo de infra-estrutura STARTWEBEX
Descriccedilatildeo
Atraveacutes da funccedilatildeo HttpIsWebEx() eacute possiacutevel identificarmos se o programa atual estaacute sendo executado atraveacutes de uma Working Thread inicializada utilizando-se as funccedilotildees de Infra-Estrutura APWEBEX
ISEMAIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
19
Sintaxe
ISEMAIL ( lt cEMail gt ) --gt lEmailOk
Paracircmetros
Argumento Tipo Descriccedilatildeo
cEMail Caracter cEmail corresponde a string a ser analizada contendo um e apenas um endereccedilo de e-mail
Retorno
Tipo Descriccedilatildeo
Caracter Retorna T caso a sring recebida como paracircmetro atenda agraves definiccedilotildees de nomenclatura vaacutelidos para um endereccedilo de e-mail
Descriccedilatildeo
Utilizada para validar e-mails em Advpl a funccedilatildeo ISEMAIL recebe como paracircmetro uma string contendo um e-mail retornando T caso a string esteja em um formaacuteto vaacutelido respeitando a regra para nomenclatura de
endereccedilos de e-mail
Regra Um e-mail eacute considerado vaacutelido caso seja iniciado por um caracter apenas contenha caracteres asc de a a z e 0 a 9 e os caracteres (arroba) (ponto) - ( hiacutefen) ou _ (underline) e deve conter uma e
apenas uma arroba e no minimo um ponto apos a arroba intercalado por um caracter
LOWERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
LOWERACE ( lt cString gt ) --gt cStrLower
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a sequecircncia de caracteres a ser convertida para letras minuacutesculas
Retorno
Tipo Descriccedilatildeo
Caracter String original em letras minuacutesculas
Descriccedilatildeo
A Funccedilatildeo LOWERACE converte todos os caracteres de uma String para ldquominusculordquo semelhante agrave funccedilatildeo LOWER() poreacutem considera e converte tambeacutem caracteres acentuados em ANSI
NTOC
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
NTOC ( lt nNumero gt lt nBase gt lt nTamStr gt ) --gt cString
Paracircmetros
Argumento Tipo Descriccedilatildeo
nNumero Numeacuterico nNumero eacute o valor numeacuterico em base devimal a ser convertido
nBase Numeacuterico nBase corresponde agrave base binaacuteria a ser utilizada para converter nNumero
nTamStr Numeacuterico nTamStr corresponde ao tamanho da string representando o numero na base desejada
Retorno
Tipo Descriccedilatildeo
Caracter cString corresponde ao numero convertido para a base numeacuterica especificada como paracircmetro
Descriccedilatildeo
A Funccedilatildeo NTOC converte um nuacutemero em notaccedilatildeo decimal para um nuacutemero representado por String utilizando uma base numeacuterica entre 2 e 36 preenchendo-o com ldquo0rdquo (zeros) agrave esquerda do tamanho especificado
Observaccedilatildeo O Paracircmetro nBase deve ser especificado com um nuacutemero entre 2 e 36 Caso seja passado como paracircmetro um nuacutemero base fora desta faixa o processamento eacute abortado com a ocorrecircncia de erro
[APWEXERR_0022] INVALID NTOC BASE [X] onde ltXgt foi a base passada como argumento
REDIRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
REDIRPAGE ( lt cUrl gt [ cTarget ] [ nTime ] ) --gt cScript
Paracircmetros
Argumento Tipo Descriccedilatildeo
cUrl Caracter Link para onde o script deve apontar o redirecionamento
cTarget Caracter Destino do redirecionamento Caso natildeo especificado o default eacute _self
nTime Numeacuterico Tempo (em segundos) de delay antes do redirecionamento ser executado
Retorno
Tipo Descriccedilatildeo
Caracter Script Html JavaScript que ao ser executado no Browser (client) chama a paacuteginaobjeto chamado no Link
Descriccedilatildeo
A funccedilatildeo RedirPage eacute utilizada quando desejamos devolver ao Browser um script que ao ser executado redirecionaraacute o Browser agrave abertura de um link passado como paracircmetro
RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLACE ( lt cStrFind gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrFind Caracter cStrFind corresponde agrave sequecircncia de caracteres a ser procurada podendo conter caracteres maiuacutesculos e minuacutesculos com ou sem acentuaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cStrQuery corresponde agrave string de busca a ser utilizada na query utilizando caracteres em minuacutesculo
Descriccedilatildeo
A funccedilatildeo RetSqlAce eacute utilizada para auxiliar de montagem de querys de busca de caracteres acentuados em bases de dados A funccedilatildeo automaticamente trata a string original removendo os acentos convertendo todos
os caracteres para minuacutesculas e trocando todas as vogais e cedilhas da string original por uma sequecircncia de caracteres acentuados em munuacutescilas para busca posicional
20
RETSQLCOND
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLCOND ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlCond() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga e o Makira Hypersite utilizando aliases de 3
caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar a filial atual ( xFilial ) de acordo com o modo do arquivo ( X2_MODO ) e para sempre desconsiderar
registros deletados
Observaccedilotildees
Esta funccedilatildeo foi mantida apenas por compatibilidade pois a ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do
banco para efeitos de performance Para ganharmos performance nas Querys devemos ao inveacutes de utilizar a funccedilatildeo RetSqlCond() utilizar como primeira clauacutesula WHERE o retorno da funccedilatildeo RetSqlFil() (
comparaccedilatildeo dos campos _FILIAL os primeiros do(s) iacutendice(s) do ERP ) que retorna apenas as comparaccedilotildees de Filial e por uacuteltimo a funccedilatildeo RetSqlDel que retorna o script para verificaccedilatildeo dos campos deletados (
que eacute o uacuteltimo campo das chaves de iacutendice do ERP utilizando TopConnect )
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlCond() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de
modo que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute
retorna os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLDEL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLDEL ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlDel() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo D_E_L_E_T_ da(s) tabela(s) passada(s) como paracircmetro
Observaccedilotildees
A ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do banco para efeitos de performance Para ganharmos performance
nas Querys devemos utilizar a funccedilatildeo RetSqlDEl() na montagem das ultimas consistecircncias da claacuteusula WHERE de uma Query
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlDel() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo
que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna
os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLFIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLFIL ( lt cAliases gt [ cCompFil ] ) --gt cSQlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
cCompFil Caracter
Atraveacutes de cCompFil eacute possiacutevel especificar uma Filial FIXA a ser comparada com os campos FILIAL do(s) alias(es) passados no paracircmetro cAliases
Caso natildeo informado os campos _FILIAL da(s) tabela(s) passadas como paracircmetro em cAliases seratildeo comparados com o retorno da funccedilatildeo xFilial() de
cada alias respectivamente
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo filial atual ( xFilial ) de acordo com o modo de abertura do arquivo no ERP ( X2_MODO )
Observaccedilatildeo
Devemos atentar ao fato que a funccedilatildeo RetSqlFil() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo que estes
alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna os
nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLTAB
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLTAB ( lt cAliasList gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliasList Caracter String contendo um ou mais alias separados por virgula a terem seus nomes fiacutesicos determinados
Retorno
Tipo Descriccedilatildeo
Caracter String contendo nomes fisicos e alias identificadores dos aliases recebidos como paracircmetro
Descriccedilatildeo
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
7
Enable=1
Path=cAp_Datahttp
Environment=EnvADS710
ResponseJob=ERP_APWEBEX
SigaWeb=MAK
Configuraccedilatildeo do host srvteste para atender requisiccedilotildees via apl atraveacutes do environment EnvTOP710
[srvteste]
Path=cAp_DataTestes
Environment=EnvTOP710
Configuraccedilatildeo da pasta virtual info no host srvteste para apontar para um path no disco com documentos
[srvtesteinfo]
Path=cAp_DataDocs
Infra-Estrutura APWEBEX
Revisatildeo 27042004
Abrangecircncia
Versatildeo 811
A Infra-Estrutura APWEBEX Visando o melhor aproveitamento da tecnologia de working threads implementada no servidor Protheus para o processamento de requisiccedilotildees de uma aplicaccedilatildeo web foram desenvolvidas funccedilotildees de apoio miscelacircnea
e infra-estrutura compiladas no repositoacuterio padratildeo de Infra-Estrutura do ERP Microsiga visando simplificar e auxiliar o desenvolvimento de uma soluccedilatildeo web A este conjunto de funccedilotildees demos o nome de Lib de
Infra-Estrutura APWEBEX que engloba atualmente os tratamentos comuns agraves funccedilotildees de inicializaccedilatildeo de ambiente e conexatildeo ( atendimento de requisiccedilotildees http via link apw ) com seus respectivos pontos de
entrada comandos e funccedilotildees de miscelacircnea comuns agraveos projetos de soluccedilotildees web integradas com o ERP
Como utilizar este recurso no desenvolvimento de soluccedilotildees
As funccedilotildees pertinentes agrave Infra-Estrutura APWEBEX jaacute estatildeo implementadas no repositoacuterio padratildeo da ferramenta Protheus 8 e os comandos especiacuteficos que envolvem este recurso encontram-se no arquivo header
apwebexch disponibilizado tambeacutem jonto com a ferramenta Protheus 8
A utilizaccedilatildeo destes recursos para integraccedilatildeo de aplicaccedilotildees envolve a leitura desta documentaccedilatildeo onde seraacute visto com maiores detalhes as possibilidades de uso da ferramenta como a integraccedilatildeo de uma aplicaccedilatildeo Web
com um ambiente e funcionalidades do ERP Microsiga
Como usufruir desta documentaccedilatildeo Todos os toacutepicos pertencentes agrave este grupo satildeo direcionados agraveo desenvolvimento de soluccedilotildees web utilizando as funccedilotildees de Infra-Estrutura APWEBEX aleacutem de ser explicado com detalhes o funcionamento da
tecnologia WEBEX do Protheus e dos recursos nativos da ferramenta englobando os comandos e funccedilotildees publicados exemplos de coacutedigos Advpl utilizando estes recursos configuraccedilatildeo da ferramenta e mensagens de
ocorrecircncias de erro das funccedilotildees e comandos com possiacuteveis causas e soluccedilotildees
Eacute fortemente recomendado que os documentos constantes neste grupo fossem apreciados antes de aprofundar-se nas informaccedilotildees dos proacuteximos toacutepicos
01 Recepccedilatildeo de paracircmetros por Alias Virtuais
Revisatildeo 30042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
A recepccedilatildeo de paracircmetros vindos do Web Browser quando utilizamos Working Threads do tipo WEBEX atraveacutes de links apw eacute realizada atraveacutes de Alias Virtuais especiacuteficos ao inveacutes de receber as informaccedilotildees
GET POST e HEADER em array quando executamos a chamada atraveacutes de link apl A nomenclatura de Alias Virtual foi adotada pois a sintaxe do coacutedigo-fonte eacute exatamente a mesma utilizada quando desejamos
acessar um campo de uma tabela aberta atraveacutes de um alias
Em um ambiente montado para atender agrave requisiccedilotildees via link apw utilizando Working Threads WEBEX podemos nos utilizar dos seguintes alias virtuais
HttpCookies
HttpGet
HttpPost
HttpHeadIn
HttpHeadOut
HttpSession
HttpCookies Atraveacutes do alias virtual HttpCookies eacute possiacutevel consultar os Cookies do Header Http enviados pelo Browser e criar ou alterar o conteuacutedo de um cookie a ser devolvido agraveo Browser Um cookie visto de forma geral eacute
um paracircmetro ao qual atribuiacutemos um nome que uma vez devolvido agraveo Browse solicitante eacute re-enviado ao Protheus a partir da proacutexima requisiccedilatildeo realizada pelo Browser
HttpGet
Para receber os paracircmetros enviados atraveacutes da URL (meacutetodo GET do HTTP) jaacute devidamente convertidos e tratados utilizamos o alias virtual HttpGet onde acessamos pelo nome a propriedade desejada e caso a
mesma tenha sido enviada pelo Browser a mesma eacute retornada como uma String
HttpPost Para receber os paracircmetros submetidos (enviados) pelo Browser atraveacutes do meacutetodo POST jaacute devidamente convertidos e tratados utilizamos o alias virtual HttpPost onde acessamos pelo nome a propriedade desejada
e caso a mesma tenha sido enviada pelo Browser a mesma eacute retornada como uma String
HttpHeadIn
Para a recepccedilatildeo e tratamento das informaccedilotildees recebidas atraveacutes do Header do pacote HTTP foi criado o alias virtual HttpHeadIn que aleacutem de consultar as informaccedilotildees constantes no Header HTTP proveinente da
requisiccedilatildeo do usuaacuterio permite tambeacutem acesso agrave propriedades da conexatildeo atual do usuaacuterio como o IP do usuaacuterio solicitante por exemplo
HttpHeadOut Atraveacutes deste alias virtual de retorno podemos alterar ou criar um paracircmetro no Header de retorno HTTP do Protheus a ser devolvido agraveo Browser solicitante de uma requisiccedilatildeo de processamento
HttpSession O alias virtual HttpSession foi criado para possibilitar a criaccedilatildeo de variaacuteveis session por usuaacuterio do site com controle de identificaccedilatildeo nativa da ferramenta atraveacutes de um cookie de identificaccedilatildeo chamado
SESSIONID No toacutepico Alias Virtual HttpSession eacute explicado em detalhes o funcionamento deste mecanismo
Este recurso nos permite criar atricuir conteuacutedo e consultar conteuacutedo de uma variaacutevel relacionada agraveo usuaacuterio que estaacute realizando uma requisiccedilatildeo http Podemos armazenar em uma variaacutevel de Session os seguintes
tipos de variaacuteveis A (array) C (character) D (data) L (loacutegica) e N (numeacuterica) Natildeo satildeo suportados O (Objetos) eou B (Code Blocks)
Limitaccedilotildees de uso dos alias virtuais para recebimento de paratildemetros
Dadas as caracteriacutesticas operacionais e de acesso agraveos alias virtuais devemos estar atentos agrave nomenclatura de campos de um formulaacuterio HTML para serem recuperados com sucesso pelos alias virtuais correspondentes
A nomenclatura de campos do formulaacuterio deve obedecer agrave regra de criaccedilatildeo de variaacuteveis em Advpl O campo do formulaacuterio deve sempre ser iniciado com um caracter alfabeacutetico pode conter letras ou algarismos no
nome e o caracter _ ( underline ) Natildeo satildeo permititos espaccedilotildes hiacutefen ou caracteres acentuados como nome de um campo Caso utilizado um nome de campo fora do padratildeo suportado o conteuacutedo do mesmo natildeo seraacute
recuperaacutevel em Advpl
8
02 Alias virtual HttpCookies
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpCookies eacute possiacutevel consultar os Cookies do Header Http enviados pelo Browser e criar ou alterar o conteuacutedo de um cookie a ser devolvido agraveo Browser Uma variaacutevel de Cookie retorna um
tipo Advpl String e apenas aceita uma atruibuiccedilatildeo de String Vale lembrar tambeacutem que um cookie eacute um recurso do Browser que estaacute realizando a requisiccedilatildeo e existe um limite de tamanho para o total de Cookies
utilizados Este limite costuma ser proacuteximo a 1024 Bytes
Trata-se portanto de uma propriedade de leitura e gravaccedilatildeo dispniacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Utilizaccedilatildeo de Cookies
A utilizaccedilatildeo de Cookies tecircm objetivo praacutetico restrito agrave aplicaccedilotildees onde haja a necessidade impliacutecita de termos uma informaccedilatildeo relacionada agraveo browser utilizado pelo usuaacuterio atual que devam ser interpretadas
independente do usuaacuterio estar logado ou natildeo ( isto eacute independam diretamente de sessions )
Um exemplo praacutetico disto eacute o desenvolvimento de um site onde o conteuacutedo dinacircmico eacute retornado ao usuaacuterio em mais de um idioma Na entrada do site apresentamos um formulaacuterio ao usuaacuterio onde o mesmo iraacute
escolher o idioma de sua preferecircncia Mesmo que a session de login deste usuaacuterio expire no servidor o cookie com o idioma selecionado ainda estaacute no Browser de modo que a proacutexima requisiccedilatildeo do usuaacuterio pode ser
codificada para direcionaacute-lo para a paacutegina de login do site com as mensagens no idioma que o mesmo jaacute estava navegando
Lendo o valor de um Cookie
Atraveacutes dos exemplos abaixo lemos o valor do Cookie de identificaccedilatildeo do uacutesuaacuterio e um cookie de usuaacuterio criado para identificar no Browse qual eacute o idioma utilizado pelo usuaacuterio atual
cUserId = HttpCookies-gtUSERID Retorna o Cookie identificador do usuaacuterio do Protheus
cIdioma = HttpCookies-gtSiteLang Retorna o conteuacutedo do cookie SiteLang criado
Lendo todos os Cookies recebidos
O alias virtual HttpCookie possui uma propriedade chamada aCookies criada apenas para consulta (read-only) que retorna um Array Advpl de Strings contendo os nomes dos Cookies enviados pelo Browser agraveo
Protheus Por exemplo
aInfo = HttpCookies-gtaCookies
For nI = 1 to len(aInfo)
Mostra no console do Server todos os cookies recebidos
conout(Cookie +str(nI3)+ = + aInfo[nI])
Next
Criando um Cookie
A criaccedilatildeo de um Cookie eacute realizada atraveacutes da atrubuiccedilatildeo de um valor diretamente agraveo cookie desejado Por exemplo
HttpCookies-gtMeuCookie = TESTE
A criaccedilatildeo de um Cookie merece uma atenccedilatildeo especial pois um Cookie eacute retornado agraveo browser atraveacutes do Header de Retorno HTTP De modo que para que a criaccedilatildeo de um cookie seja realizada com sucesso o
mesmo deve ser criado antes de haver qualquer processamento de APH AHU caso este que natildeo seria mais possiacutevel a criaccedilatildeo do Cookie pois o Header de Retorno HTTP jaacute teria sido enviado agraveo browser solicitante
03 Alias virtual HttpGet
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpGet podemos consultar se uma determinada propriedade nos foi enviada atraveacutes da URL ( meacutetodo GET )
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos realizar uma requisiccedilatildeo a um link apw
passando pela URL o paracircmetro IMAGEM com o conteacuteuacutedo TESTE
httplocalhostu_TesteGetapwimagem=testeampcor=azul
Para recuperarmos em Advpl o conteuacutedo dos paracircmetros imagem e cor utilizamos
cImagem = HttpGet-gtimagem
cCor = HttpGet-gtcor
Podemos inserir tambeacutem um tratamento default Caso algum paracircmetro natildeo seja enviado ( resulte NIL ) assumimos um valor para o mesmo
DEFAULT cImagem = LogoAp8
DEFAULT cCor = amarelo
Existe tambeacutem uma propriedade do alias virtual HttpGet chamada aGets onde podemos recuperar um array de strings contendo a lista com os nomes dos paracircmetros enviados pelo browser solicitante Por exemplo
aInfo = HttpGet-gtaGets
For nI = 1 to len(aInfo)
conout(GET +str(nI3)+ = +aInfo[nI])
Next
04 Alias virtual HttpPost
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpPost podemos consultar os campos submetidos agraveo servidor atraveacutes do meacutetodo POST
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro
O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos realizar uma requisiccedilatildeo a um link apw
atraveacutes de um formulaacuterio html com meacutetodo POST partindo do Html abaixo
lthtmlgtltbodygt
ltform method=POST action=httplocalhostu_TstPostapwgt
Teste ltinput type=text name=CODIGO size=10gt
lthrgt
ltinput type=submitgt
ltformgt
ltbodygtlthtmlgt
Para recuperarmos em Advpl o conteuacutedo do campo CODIGO utilizamos
cCodigo = HttpPOST-gtCodigo
Existe tambeacutem uma propriedade do alias virtual chamada aPost onde podemos recuperar um array de strings contendo a lista com os nomes dos paracircmetros enviados pelo browser solicitante Por exemplo
aInfo = HttpPost-gtaPost
For nI = 1 to len(aInfo)
conout(POST +str(nI3)+ = +aInfo[nI])
Next
05 Alias virtual HttpHeadIn
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpHeadIn podemos consultar os paracircmetros enviados pelo Browser solicitante enviados atraveacutes do Header HTTP ao realizar uma requisiccedilatildeo ao Protheus Server
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos consultar o header http User-Agent
enviado pelo Browser solicitante contendo uma String identiificando o modelo de Browser utilizado
cUserAgent = Httpheadin-gtUser_Agent
Devemos obter como retorno uma string parecida com a mostra abaixo
Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)
Observaccedilatildeo Importante Qualquer paracircmetro no Header HTTP que contenha um ou mais caracteres invaacutelidos para a nomenclatura de variaacuteveis Advpl ( como por exemplo o User-Agent que conteacutem um hiacutefen ) satildeo trocados pelo caractere _
underline para ser possiacutevel a leitura da propriedade
Propriedades especiais
HttpHeadIn-gtaHeaders
Retorna um Array de Strings contendo todas as linhas do Header HTTP da requisiccedilatildeo
HttpHeadIn-gtmain
Retorna o nome da funccedilatildeo chamda atraveacutes da URL sem a extensatildeo e sem o host Por exemplo ao chamar o link httplocalhostu_tstHEaderapw o conteuacutedo de HttpHeadin-gtmain seraacute u_tstHEader
9
HttpHeadIn-gtREMOTE_ADDR
Retorna uma string no formato nnnnnnnnnnnn o IP da estaccedilatildeo que realizou a requisiccedilatildeo
httpHeadIn-gtREMOTE_PORT
Retorna um valor Advpl numeacuterico informando a porta utilizada para realizar a requisiccedilatildeo
06 Alias virtual HttpHeadOut
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 LIB WEBEX
Atraveacutes deste alias virtual de retorno podemos alterar ou criar um paracircmetro no Header de retorno HTTP do Protheus a ser devolvido agraveo Browser solicitante de uma requisiccedilatildeo de processamento
Trata-se portanto de uma propriedade de retorno disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
A criaccedilatildeo de uma linha no Header HTTP merece uma atenccedilatildeo especial pois para que a operaccedilatildeo realizada com sucesso o header deve ser criado antes de haver qualquer processamento de APH AHU pois neste caso
o Header de Retorno HTTP jaacute teria sido enviado agraveo browser solicitante
07 Alias virtual HttpSession
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual httpSession podemos criar e consultar variaacuteveis do tipo session relacionadas agraveo usuaacuterio que realizou a requisiccedilatildeo atraveacutes do Browser
Para diferenciar os usuaacuterios que estatildeo navegando num site o Protheus busca por um cookie identificador de usuaacuterio retornado para o browser a cada requisiccedilatildeo de link APW chamado SESSIONID Caso o Protheus
receba este cookie ele identifica quais sessions pertencem a este usuaacuterio
Quando um usuaacuterio realiza a primeira requisiccedilatildeo http ao Protheus o Protheus natildeo recebe o cookie identificador e automaticamente inicializa um identificador de sessions para o mesmo retornando o identificador ao
Browser via Header HTTP Este identificador pode ser recuperado em uma funccedilatildeo advpl atraveacutes de httpSession-gtSESSIONID
Quando criamos uma variaacutevel de session ela pode ser acessada nas proacuteximas requisiccedilotildees provenientes deste mesmo usuaacuterio Caso uma variaacutevel de session consultada natildeo exista ela retorna o valor NIL (nulo)
Vejamos os exemplos abaixo
Criando variaacuteveis Session HttpSession-gtUserId = 123
HttpSession-gtUserName = U_GetUserName()
Nas linhas acima criamos uma session para o usuaacuterio atual chamada UserId com o conteuacutedo do tipo String e criamos outra session chamada UserName com o retorno da funccedilatildeo U_GetUserName()
Consultando variaacuteveis Session Ao consultar uma variaacutevel session sempre devemos prever que a mesma natildeo pode ter sido criada de modo que a consulta pode retornar NIL ou caso a session jaacute exista retornaraacute o valor do tipo que foi atribuiacutedo `a
mesma
If HttpSession-gtUserId = NIL
Session ainda natildeo foi criada Usuaacuterio natildeo estaacute logado
conout(Usuario natildeo estaacute logado)
Else
Session jaacute criada o usuaacuterio estaacute logado
conout(Usuario estaacute logado ID = + HttpSession-gtUserId )
Endif
Exemplo de Funcionamento de Session No exemplo abaixo criamos uma session para identificar quantas vezes o usuaacuterio chamou esta funccedilatildeo especiacutefica Damos o nome da session de MyCounter que iraacute conter um nuacutemero No primeiro acesso do usuaacuterio a
session natildeo existe ( = NIL ) e eacute criada com o valor numeacuterico 1 (um) A partir das proacuteximas requisiccedilotildees realizadas ao Protheus atraveacutes desta paacutegina ( atraveacutes do botatildeo Refresh do Browser por exemplo ) a session jaacute
existe sendo somado o valor 1 agraveo conteuacutedo jaacute existente e devolvido agraveo browser solicitante um Html informando quantas chamadas jaacute foram realizadas por este usuaacuterio
include rwmakech
include apwebexch
User Function TstSession()
Local cHtml = cEcho =
WEB EXTENDED INIT cHtml
If httpSession-gtmycounter = NIL
cEcho = Inicializando contador
Conout(cEcho)
cHtml += cEcho
httpSession-gtmycounter = 1
Else
httpSession-gtmycounter++
cEcho = contador em +str(httpSession-gtmycounter3)
conout(cEcho)
Endif
cHtml += cEcho + lthrgt
WEB EXTENDED END
Return cHtml
Apoacutes compilado o fonte acima e o Server Protheus configurado e iniciado com HTTP habilitado e as working Threads configuradas abra um Web Browser e solicite a url httplocalhostu_tstsessionapw Seraacute
mostrado no Browse a mensagem Inicializando Contador Agora peccedila um Refresh desta tela ao Browser Seraacute devolvida a mensagem Contador em 2 e a cada refresh deste Browser o contador seraacute
incrementado
Uso de Sessions e Paralelismo - Comportamento do Protheus Server
O Protheus Server trata agraves requisiccedilotildees simultacircneas de links APW em paralelo desde que estejam disponiacuteveis o numero de Working Threads necessaacuterio para tal Por exemplo em uma estrutura de Frames onde cada
um deles aponta o SRC (source) para um link apw o Browser envia as trecircs requisiccedilotildees de apw para o Protheus Server e caso extistam 3 working threads disponiacuteveis naquele momento as trecircs requisiccedilotildees satildeo
atendidas em paralelo
Por outro lado se em duas destas trecircs requisiccedilotildees faz-se necessaacuteria a atualizaccedilatildeo eou consulta a uma variaacutevel de Session ( httpsession ) este processamento em paralelo caso natildeo fosse tratado poderia gerar perdas
no conteuacutedo da session caso a mesma session fosse atualizada simultaneamente
Para resolver esta questatildeo de maneira a natildeo sobrecarregar o Servidor com solicitaccedilotildees de Processamento Sequencial ( Critical Sessions ) foi montado um esquema de Lock de Session de Usuaacuterio automaacutetico com
liberaccedilatildeo automaacutetica apoacutes o processamento do APW ou liberaccedilatildeo manual atraveacutes da chamada da funccedilatildeo HttpLeaveSession() antes do processamento ser terminado
Exemplificando a aplicaccedilatildeo praacutetica e funcionamento deste conceito partimos de um ambiente hipoteacutetico utilizando 3 frames onde um usuaacuterio realiza uma requisiccedilatildeo agrave funccedilatildeo que retornaraacute o source HTML da paacutegina
de frames e a mesma ao chegar no Browser faz o mesmo realizar as trecircs requisiccedilotildees simultaneamente todas elas referentes ao mesmo usuaacuterio Poreacutem o primeiro e o segundo frames realizam uma operaccedilatildeo qualquer
com uma ou mais variaacuteveis da Session do usuaacuterio e o terceiro frame realiza um outro processamento que natildeo depende da consulta de nenhuma variaacutevel da Session As trecircs requisiccedilotildees referente a este usuario seratildeo
processadas simultaneamente por working Threads diferentes ( vamos supor que naquele momento haviam trecircs Working Threads disponiacuteveis) poreacutem quando uma das duas working Threads que tentarem acesso agrave uma
variaacutevel de Session daquele usuaacuterio o Servidor verifica se alguma outra Thread estaacute com o flag de acesso agraves sessions deste usuario Se nenhuma outra thread em uso por este usuaacuterio estaacute com a bandeira entatildeo a
thread atual pega a bandeira para ela senatildeo o processamento da Thread eacute congelado no aguardo da liberaccedilatildeo da bandeira
A liberaccedilatildeo da bandeira ocorre automaticamente no retorno da Working Thread para o Browser antes da chamada do ponto de entrada para Reset do Ambiente atraveacutes da chamada na KlibEx da funccedilatildeo
HttpLeaveSession() Caso seja viaacutevel para o usuaacuterio liberar as sessions antes do retorno da funccedilatildeo ele pode utilizar-se da funccedilatildeo httpLeaveSession() no seu fonte sem necessariamente aguardar pelo encerramento
efetivo e reset de ambiente da Working Thread
Logo retornando ao exemplo acima os Frames 1 e 2 iratildeo concorrer pela banceira de atualizaccedilatildeo de conteuacutedo de sessions onde o primeiro frame que a ser executado pegaraacute a bandeira para ele e atualizaraacute a session e
o segundo frame iraacute esperar o primeiro liberar a bandeira para continuar a ser processado e o terceiro frame como natildeo utiliza nenhuma variaacutevel da session seraacute processado sem depender de nenhum dos outros dois
frames anteriores
Quando utilizamos ASP ( Microsoft Active Server Pages ) o mesmo realiza uma serializaccedilatildeo de requisiccedilotildees de paacuteginas ASP por usuaacuterio de modo que caso o mesmo usuaacuterio solicite trecircs frames asp as requisiccedilotildees
de processamento chegaratildeo ao Servidor ASP simultaneamente mas a bandeira de processamento eacute unica por paacutegina asp sendo liberada apenas apos o teacutermino do processamento da paacutegina de modo que mesmo que
nenhuma das paacuteginas faccedila uso de sessions todas as paacuteginas deste usuaacuterio seratildeo processadas em sequecircncia
08 Envio simultacircneo de HTML ao Browser
Revisatildeo 30042004
Abrangecircncia
10
Versatildeo 710 Versatildeo 811 LIB WEBEX
As aplicaccedilotildees web desenhadas para utilizar a Infra-Estrutura APWEBEX contam com o recurso de Envio simultacircneo de Html ao Browser durante o processamento de uma paacutegina Advpl-ASP ( APH eou AHU )
Este recurso eacute habilitado atraveacutes do Protheus IDE nas opccedilotildees de configuraccedilatildeo de compilaccedilatildeo do ambiente em questatildeo mais especificamente habilitado atraveacutes do CheckBox [ ] Exibir conteuacutedo do Advpl ASP
progressivamente no Browser
Ao habilitamos esta configuraccedilatildeo todos os arquivos APH e AHU satildeo parseados fazendo internamente o uso da funccedilatildeo HttpSend() de modo que mesmo antes do processamento estar concluiacutedo o Html gerado jaacute estaacute
sendo enviado agraveo Browser qoe o solicitou
A utilizaccedilatildeo deste recurso provecirc um ganho de performance subtancial na aplicaccedilatildeo final Todos os projetos desenvolvidos com esta tecnologia ( Infra-Estrutura APWEBEX ) devem ter esta configuraccedilatildeo de compilaccedilatildeo
habilitada no IDE Vale lembrar que caso este recurso natildeo esteja habilitado ao habilitaacute-lo os arquivos aph e ahu do projeto necessitam ser recompilados para que esta configuraccedilatildeo tenha o efeito desejado
Pode existir a necessidade de um processamento de um APH ou AHU natildeo enviar o script Html gerado diretamente ao Browser Para tal situaccedilatildeo podemos desabilitar temporariamente este recurso de envio de html
progressivo em tempo de execuccedilatildeo permitindo assim por exemplo uma funccedilatildeo chamar em sequecircncia dois arquivos APH um para gerar um conteuacutedo Html a ser enviado via e-mail armazenado em uma variaacutevel
Advpl e outro APH para a montagem de uma tela de status que seraacute enviada agraveo Browser solicitante
Para habilitar eou desabilitar o envio simultacircneo do Script HTML agraveo browser em tempo de execuccedilatildeo utilize a funccedilatildeo HttpSetPart()
09 Configuraccedilotildees especiacuteficas APWEBEX
Revisatildeo 26042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Ao utilizarmos as funccedilotildees de Infra-estrutura APWEBEX existem recursos da lib que exigem uma configuraccedilatildeo adicional para serem utilizados
Envio de e-mail automaacutetico atraveacutes da Rotina de Tratamento de Erro do Site
Em caso de erro fatal na aplicaccedilatildeo Web a proacutepria rotina de tratamento de erro pode ser configurada para enviar um e-mail agraveo Administrador do sistema Para tal eacute necessaacuterio inserir as chaves abaixo na seccedilatildeo
do ambiente em uso para o site
ErrorSMTP= (endereccedilo do servidor SMTP a ser usado para o envio do e-mail )
ErrorMail= ( um ou mais endereccedilos de e-mail a receber op e-mail de erro separados por virgula )
ErrorFrom= ( um e apenas um endereccedilo de e-mail a ser usado como remetente do aviso de erro )
ErrorLogin = ( nome de usuario de login no servidor de SMTP caso necessaacuterio )
ErrorPassword= ( senha do usuario de login no servidor de SMTP caso necessaacuterio )
WebAdmin - Login alternativo
A infra-estrutura APWEBEX exige um usuaacuterio e senha para entrar no moacutedulo de administraccedilatildeo WebAdmin Para validar o login eacute utilizado o arquivo de senhas do ERP O usuaacuterio deve ser o Administrador ou
pertencer ao grupo de administradores para ter acesso agraveo WebAdmin Caso natildeo seja viaacutevel usar este arquivo de senhas para validar o login podemos inserir uma chave adicional ( AdmLogin ) no Environment em uso
pela aplicaccedilatildeo Web e configurar nela a senha do usuaacuterio Administrador para login no WebAdmin Caso esta chave seja configurada o arquivo de senhas do ERP natildeo seraacute utilizado para validar o login no WebAdmin
AdmLogin= ( senha do Administrador para logar no WebAdmin )
Pasta alternativa para upload de Rpo via WebAdmin No WebAdmin eacute possiacutevel utilizar uma configuraccedilatildeo especiacutefica para a troca do repositoacuterio de objetos em uso no site sem que seja necessaacuterio parar o servidor para isso Por default a pasta de upload chama-se
SwapRPO e deve existir na estrutura de diretoacuterio do ambiente utilizado a partir do diretoacuterio raiz do ambiente ( RootPath )
RpoUpload= ( pasta de upload alternativa a partir do RootPath do ambiente )
10 Recomendaccedilotildees finais
Revisatildeo 17122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Para todo o desenvolvimento de soluccedilotildees temos em matildeos uma diversidade de recursos desenhados para melhor atender agraves necessidades e adequar-se agraves caracteristicas da aplicaccedilatildeo Dada a flexibilidade dos recursos
recomenda-se aos desenvolvedores adotarem um padratildeo de desenvolvimento e ter em foco a eficiecircncia da aplicaccedilatildeo final tanto no aspecto funcional como na codificaccedilatildeo
Lanccedilando matildeo da experiecircncia em desenvolvimento de aplicaccedilotildees web adquiridas nos uacuteltimos anos nos toacutepicos abaixo estatildeo relacionadas algumas medidas tomadas no desenvolvimento de aplicaccedilotildees que nos satildeo muito
uacuteteis no decorrer de um projeto
Nomenclatura de Funccedilotildees
Para o desenvolvimento de aplicaccedilotildees web foi criado o Statement WEB FUNCTION para a declaraccedilatildeo de funccedilotildees referentes agrave projetos web Este comando na praacutetica apenas prefixa a declaraccedilatildeo da funccedilatildeo com
W_ poreacutem a sua utilizaccedilatildeo identifica que a funccedilatildeo em questatildeo foi construiacuteda uacutenica e exclusivamente para ser chamada a partir de uma requisiccedilatildeo HTTP Em adendo agrave este devemos utilizar os comandos WEB
EXTENDED INIT END disponivels no Include apwebexch para proteger a funccedilatildeo de ser chamada em um ambiente que natildeo o APWEBEX
Separando a Interface do Processamento
Ao desenvolver utilizando Advpl ASP paacuteginas APH AHU recomenda-se separar o processamento da Interface do seguinte modo Criar uma Web Function para a chamdada de umna paacutegina com conteuacutedo
dinacircmico via link apw e um arquivo APH ou AHU de mesmo nome que seraacute chamado internamente de modo que o coacutedigo-fonte escrito na Web Function seja responsaacutevel para gerar as informaccedilotildees a serem
disponibilizadas para o usuaacuterio e o APH contenha apenas a maacutescara destas informaccedilotildees e o miacutenimo de instruccedilotildees Advpl possiacutevel para a montagem da paacutegina Este processo facilita a manutenccedilatildeo de amobos
os coacutedigos pois o Web Designer que iraacute realizar um ajuste no APH natildeo teraacute que desviar do fonte Advpl inserido na paacutegina e o Analista Programador que faraacute a manutenccedilatildeo no coacutedigo Advpl preocupar-se-aacute apenas
com o coacutedigo responsaacutevel para a geraccedilatildeo dos dados que seratildeo mascarados
Utilizaccedilatildeo das Funccedilotildees de Infra-Estrutura
Atraveacutes dos comandos e funccedilotildees disponibilizadas na Infra-Estrutura APWEBEX natildeo tecircmos a necessidade de recriar partes comuns de coacutedigo para todos os projetos que se utilizem desta tecnologia aleacutem de permitir
atraveacutes de pontos de entrada estrategicamente colocados na ferramenta um niacutevel altiacutessimo de customizaccedilatildeo para os projetos desenvolvidos com esta tecnologia de maneira praacutetica e objetiva
11 Monitoramento de Sites em WEBEX
Revisatildeo 17122003
Abrangecircncia
LIB WEBEX
O Objetivo de uma funccedilatildeo de Monitoramento de Sites eacute testar as funcionalidades baacutesicas de um site retornando uma mensagem HTML preacute-definida indicando que estaacute tudo certo e em caso de erro uma
mensagem que procure identificar o que estaacute de errado
Para sites desenvolvidos em Protheus utilizando a tecnologia WEBEX devemos criar uma funccedilatildeo especiacutefica para o site que iraacute determinar se o mesmo estaacute operacional Esta funccedilatildeo seraacute chamada atraveacutes de link
apw
Vejamos o exemplo abaixo escrito para um site cujas bases de dados estatildeo num SQL acessadas via TopConnect Neste exemplo a funccedilatildeo chamada seraacute httpservidorU_SiteMonitorapw e caso esteja tudo certo
ela retornaraacute a string (SITE OK) seguido da data e horaacuterio da execuccedilatildeo da rotina Qualquer retorno diferente disto poderaacute indicar uma anomalia no funcionamento do site
Quando hospedado um site utilizando esta tecnologia no DataCenter da Makira esta informaccedilatildeo gerada pela rotina deve ser passada agraveo depto de infra-estrutura que configuraraacute um software Monitor de Sites que iraacute
realizar a cada um minuto uma requisiccedilatildeo agrave url especificada e iraacute emitir um alerta ao Departamento para que seja verificado o site caso haja alguma falha na resposta include protheusch
include apwebexch
User Function SiteMonitor()
Local cQuery nQtdRec
Verifica se a working Thread estaacute conectada com o TOP
If TCIsConnected()
Return Working Thread perdeu a conexatildeo com o TOP
Endif
Verifica se as tabelas principais estatildeo abertas
If select(SA1)=0
Return Tabela SA1 natildeo estaacute aberta
Endif
If select(SC5)=0
Return Tabela SC5 natildeo estaacute aberta
Endif
Executa uma query de contagem de registros de uma tabela do sistema
cQuery = SELECT count() as QTDREC from SA1010
OPEN QUERY cQuery ALIAS TMPCOUNT
nQtdRec = TMPCOUNT-gtQTDREC
CLOSE QUERY TMPCOUNT
If nQtdRec=0
11
Return Falha na Contagem de registros Query SA1
Endif
Se estaacute tudo certo retorna um HTML informando que estaacute tudo OK
Return (SITE OK) +dtos(date())+ +time()
Comandos - CLOSE QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CLOSE QUERY cAlias
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAlias Caracter Alias sob o qual o cursor da Query foi aberto Caso o alias passado como paracircmetro natildeo se encontre aberto a funccedilatildeo natildeo gera nenhuma ocorrecircncia de
erro
Descriccedilatildeo
Atraveacutes do comando Close Query realizamos o fechamento de uma query aberta atraveacutes do comando OPEN QUERY
ATENCcedilAtildeO Uma query aberta pelo comando OPEN QUERY deve ser fechada pelo comando CLOSE QUERY Poderiacuteamos fechar o alias aberto atraveacutes de uma Query simplesmente com a funccedilatildeo
DbCloseArea() poreacutem isto deixaria em aberto elementos internos de controle criados pelo comando OPEN QUERY
Comandos - OPEN QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
OPEN QUERY ltcQuerygt ALIAS ltcAliasgt [ [NOCHANGE] ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcQuerygt Caracter cQuery corresponde agrave String contendo a Query a ser executada no banco de dados
ALIAS ltcAliasgt Caracter cAlias corresponde ao nome do alias sob o qual o cursor de retorno dos dados pesquisados seraacute aberto no ambiente Advpl Natildeo pode ser especificado
um nome de alias jaacute em uso senatildeo a aplicaccedilatildeo seraacute finalizada com a ocorrecircncia de erro Alias already in Use
[NOCHANGE] Caracter Caso especificada a claacuteusola NOCHANGE na abertura da query a string em cQuery natildeo seraacute submetida agrave funccedilatildeo ChangeQuery()
Descriccedilatildeo
Atraveacutes do comando OPEN QUERY realizamos a abertura de uma Query de busca no Banco de Dados atraveacutes do RDD TOPCONN retornando os dados consultados atraveacutes de um ALIAS Advpl
Caso a Query nao possa ser aberta por erro de sintaxe devido agrave thread atual natildeo estar conectada com o TopConnect ou outro erro seraacute gerado um log de erro informando o Alias o Stack ( Pilha de Chamadas ) de
execucatildeo e o conteuacutedo da Query para Debug
OBSERVACcedilOtildeES IMPORTANTES
Na montagem da string da Query devemos especificar os comandos SQL alias e nomes de campos em letras maiuacutesculas
Quando utilizamos o comando OPEN QUERY natildeo precisamos passar a expressatildeo da Query atraveacutes da funccedilatildeo ChangeQuery() Este proceduimento jaacute eacute realizado internamente pelo comando OPEN
QUERY Para que a query natildeo seja submetida agrave funccedilatildeo ChangeQuery() devemos utilizar o paracircmetro NOCHANGE
A utilizaccedilatildeo deste comando eacute impliacutecita agrave LIB APWEBEX e necessita da utilizaccedilatildeo do include Apwebexch
Comandos - WEB EXTENDED END
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED END ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando para fechar uma seccedilatildeo aberta pelo comando WEB EXTENDED INIT Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do
comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
Comandos - WEB EXTENDED INIT
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED INIT ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando juntamente com o comando WEB EXTENDED END quando montamos uma funcatildeo ( Web Function ) que foi construiacuteda para ser chamada a partir de um Web Browser quando nos
utilizamos das funccedilotildees de Infra-Estrutura APWEBEX
Atraveacutes dele eacute realizada uma preacute-validaccedilatildeo que certifica que a execuccedilatildeo da funccedilatildeo somente seraacute realizada caso a thread atual seja realmente uma Thread montada no ambiente WEBEX aleacutem de podermos inserir uma
preacute-validaccedilatildeo (START) de execuccedilatildeo especiacutefica para esta funccedilatildeo
Caso seja especificada uma funccedilatildeo na claacuteusula START a mesma deveraacute retornar uma String Retornando uma String em branco o processamento da funccedilatildeo original seraacute efetuado normalmente Caso a funccedilatildeo retorne
uma string natildeo-vazia esta string seraacute retornada para a variaacutevel cHtml e o processamento do programa seraacute desviado para a linha do coacutedigo-fonte imediatamente posterior agraveo comando WEB EXTENDED END
Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
12
Infra-Estrutura APWEBEX - EnvUserAPL - Exemplo de Uso com ERP
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo praacutetico abaixo utilizamos em um coacutedigo fonte Advpl os pontos de entrada disponibilizados na Infra-Estrutura APWEBEX para realizar a preparaccedilatildeo de um ambiente ERP Reset de Ambiente
finalizaccedilatildeo de Thread finalizaccedilatildeo de sessions por time-out e customizaccedilatildeo de mensagem de erro para o desenvolvimento de um projeto de Web Site integrado com o ERP Microsiga
Devemos adotar como padratildeo para projetos que utilizam APWEBEX a criaccedilatildeo do arquivo EnvUserapl especificamente para a definiccedilatildeo dos pontos de entrada utilizados pela Infra-Estrutura
APWEBEX e devemos apenas compilar os fontes dos pontos de entrada realmente necessaacuterios agraveo projeto INCLUDE PROTHEUSCH
INCLUDE APWEBEXCH
====================================================================================
Exemplo de Arquivo de Lib de Projeto APWEBEX utilizando os pontos de entrada
da lib para preparaccedilatildeo de ambiente reset de ambiente e tratamento de erro
utilizando APWEBEX em conjunto com o ERP Microsiga
====================================================================================
----------------------------------------------------------------------------
Ponto de Entrada StartWebEx( NIL ) =gt T ou F
Ponto de entrada executado na inicializaccedilatildeo de cada Working Thread ( ONSTART )
Eacute a responsaacutevel por preparar o ambiente para atender agraves requisiccedilotildees WEB de links apw
Natildeo recebe paracircmetro algum da lib e deve retornar T caso tenha inicialziado com sucesso
ou F em caso de falha de inicializaccedilatildeo
----------------------------------------------------------------------------
USER Function StartWebEx()
Prepara o Ambiente ERP
PREPARE ENVIRONMENT
EMPRESA 01
FILIAL 01
TABLES ZX1ZX2ZX3ZX4ZZ1ZZ2ZZ3ZZ4ZZ5
Return T
-------------------------------------------------------------------------------
Ponto de Entrada ConnectWebEx(cFnName) =gt cHtml ou
Ponto de entrada executado imediatamente antes do processamento de uma requisiccedilatildeo de um link APW
Recebe como paracircmetro o nome da funccedilatildeo a ser executada passada no link
Deve retornar uma String que seraacute retornada ao ao Browser solicitante Caso retorne uma string
em branco (vazia) a funccedilatildeo originalmente solicitada eacute executada pela lib
Caso contraacuterio a funccedilatildeo original natildeo eacute executada e a string retornada eacute enviada ao Browser
-------------------------------------------------------------------------------
USER Function ConnectWebEx(cFnName)
Local cHtmlConn =
conout(Vou executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada ResetWebEx(cFnName) =gt cHtml ou
Funccedilatildeo chamada imediatamente Apos a execuccedilatildeo de uma requisiccedilatildeo APW
Recebe como paracircmetro o nome da funccedilatildeo executada e permite tambeacutem que seja acrescentado
algo a mais no Html a ser retornado ao Browser
-------------------------------------------------------------------------------
USER Function ResetWebEx(cFnName)
Local cHtmlConn =
conout(Terminei de executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada FINISHWEBEX()
Funccedilatildeo chamada no fechamendo do ambiente de uma working Thread Apos a execuccedilatildeo deste
a Thread utilizada eacute eliminada da memoacuteria
-------------------------------------------------------------------------------
USER Function FINISHWEBEX()
conout(Finalizando a Working Thread)
Return
-------------------------------------------------------------------------------
Ponto de Entrada ENDSESSION(cSessionId) =gt NIL
Ponto de entrada chamado em uma working Thread quando a session de um usuaacuterio seraacute
eliminada da memoacuteria por time-out Recebe como parametro o Id de sessions de usuario
que estaacute sendo finalizado
-------------------------------------------------------------------------------
USER Function ENDSESSION(cSessionId)
Conout(Sesssion +cSessionId+ limpa da memoacuteria)
Return
----------------------------------------------------------------------------
Ponto de Entrada WebExError(ecErrorLogcHtml) =gt cCustomHtml ou
Esta funcao eacute chamada pela rotina de tratamento de erro WEBEX quando ocorre um erro fatal
e permite que seja retornado um Html de tratamento de erro diferenciado Ela recebe como
parametro o objeto do erro a mensagem ASCII que foi acrescentada ao arquivo errorlog
e o Html original montado pela rotina de tratamento de erro default
IMPORTANTE Por sem um ponto de entrada executado em um momento criacutetico (tratamento
de erro ) esta funccedilatildeo deve ser o mais suscinta e simples possiacutevel natildeo utilizando
sessions banco de dados etc
----------------------------------------------------------------------------
USER Function WebExError(oErrorcErrorLogcHtml)
Local cCustomHtml =
Monta mensagem de erro mais amigavel
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
13
Ocorreu um erro inesperado no
cCustomHtml += processamento desta paacutegina O Administrador do sistema seraacute notificado desta
cCustomHtml += ocorrecircncia Recomendamos fortemente que esta janela do navegador seja cCustomHtml += fechada e uma nova janela seja aberta para retornar agrave navegaccedilatildeo do site
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
Return cCustomHtml
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Nos exemplo abaixo utilizamos a funccedilatildeo escape() para formatar paracircmetros para inserir em uma URL cUrl = httplocalhostwebinfoapw
cPAram1 = Teste de Parametro 01-02
cPAram2 = reserva
cPAram3 = 1+2+3
cUrl += Par01= + escape(cPAram1) + ampPAr02= + escape(cPAram2) + ampPar03= + escape(cPAram3)
O conteudo de cUrl deveraacute ser httplocalhostwebinfoapwPar01=Teste20de20Parametro2001-02ampPAr02=23reserva23ampPar03=12B22B3
proacuteprio para a monyahem de um link
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETJOBPROFSTRING
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
O exemplo abaixo executado em uma thread iniciada a partir de um JOB WEBEX recupera algumas configuraccedilotildees atuais em uso para este JOB cJobType = GetJobProfString(type(empty) )
cInstances = GetJobProfString(Instances(empty) )
cInacTime = GetJobProfString(InactiveTimeout(default) )
cExpTime = GetJobProfString(ExpirationTime(default) )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETPARVALUE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo satildeo montados dois arrays multi-dimensionais com 2 dimensotildees e satildeo realizadas buscas nos mesmos explorando todas as possibilidades de uso da funccedilatildeo GetParValue() Local aTeste1 =
Local aTeste2 =
Aadd(aTeste1AliasTMP1)
Aadd(aTeste1Relacao2x3)
Aadd(aTeste2AliasTMP2)
Aadd(aTeste2Info---Informaccedilatildeo adicional---)
Busca apenas no array ateste1
cAlias = GetParValue(ALIASaTeste1)
cRelacao = GetParValue(RELACAOaTeste1)
cInfo = GetParValue(INFOaTeste1)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) (nao encontrado)
Busca apenas no array ateste2
cAlias = GetParValue(ALIASaTeste2)
cRelacao = GetParValue(RELACAOaTeste2)
cInfo = GetParValue(INFOaTeste2)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP2
conout(cRelacao) (nao encontrado)
conout(cInfo) ---Informaccedilatildeo Adicional---
Busca em ambos os Arrays
Primeiro no aTeste1 e depois no aTeste2
cAlias = GetParValue(ALIASaTeste1aTeste2)
cRelacao = GetParValue(RELACAOaTeste1aTeste2)
cInfo = GetParValue(INFOaTeste1aTeste2)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) ---Informaccedilatildeo Adicional---
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo abaixo geramos a string com o DUMP de um arquivo HTML salvo na pasta WEB a partir do RootPath do Environment O Dump do arquivo seraacute mostrado no Console do servidor e no Web
Browser que solicitou a funccedilatildeo U_DumpTestapw
include protheusch
include apwebexch
User Function DumpTest()
Local cHtml =
Local cTXTFile =
Local cDump =
WEB EXTENDED INIT cHtml
14
Le o arquivo
cTTXFile = memoread(WebDefaulthtm)
Gera a string com o Dump do arquivo
cDump = HExStrDump(cTTXFile)
Mostra o Dump no console
conout(cDump)
Gera HTML para a visualizaccedilatildeo do DUMP
cHtml = VarInfo(DUMPHtmlnotags(cDump)tf)
WEB EXTENDED END
Return cHtml
Exemplo do Texto mostrado no Console
HexSTRDump ( String 237 Start 1 Length 237 )
-------------------------------------------------------------------------------
3C 48 54 4D 4C 3E 3C 48 45 41 44 3E 0D 0A 3C 4D | ltHTMLgtltHEADgt__ltM
45 54 41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 | ETA HTTP-EQUIV=
43 6F 6E 74 65 6E 74 2D 54 79 70 65 22 20 63 6F | Content-Type co
6E 74 65 6E 74 3D 22 74 65 78 74 2F 68 74 6D 6C | ntent=texthtml
22 0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 | __ltMETA HTTP-EQ
55 49 56 3D 22 70 72 61 67 6D 61 22 20 63 6F 6E | UIV=pragma con
74 65 6E 74 3D 22 6E 6F 2D 63 61 63 68 65 22 3E | tent=no-cachegt
0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 55 | __ltMETA HTTP-EQU
49 56 3D 22 45 78 70 69 72 65 73 22 20 63 6F 6E | IV=Expires con
74 65 6E 74 3D 22 2D 31 22 3E 0D 0A 3C 4D 45 54 | tent=-1gt__ltMET
41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 52 65 | A HTTP-EQUIV=Re
66 72 65 73 68 22 20 63 6F 6E 74 65 6E 74 3D 22 | fresh content=
30 3B 20 75 72 6C 3D 2F 77 5F 77 45 78 30 30 30 | 0 url=w_wEx000
2E 61 70 77 22 3E 3C 2F 48 45 41 44 3E 0D 0A 3C | apwgtltHEADgt__lt
2F 48 45 41 44 3E 3C 2F 48 54 4D 4C 3E | HEADgtltHTMLgt
-------------------------------------------------------------------------------
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HTMLNOTAGS
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo a funccedilatildeo HtmlNoTags eacute utilizada para permitir a utilizaccedilatildeo de caracteres especiais no conteuacutedo de um input para um formulaacuterio Html Local cHtml =
Local cInput =
Conteudo do campo com tags HTML intepretaacuteveis
cInput =
Ao montar o Input aplicar a HtmlNoTags() ao conteudo do mesmo
cHtml +=
+HtmlNoTags(cIn
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
15
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos a funccedilatildeo RetSqlAce para montar uma query de busca por tiacutetulo de uma determinada informaccedilatildeo considerando todas as possibilidades de acentuaccedilatildeo independentemente de como o
banco foi alimentado eou a string de busca foi digitada
IMPORTANTE Na expressatildeo da Query o campo da tabela deve ser passado pela funccedilatildeo LOWER do BAnco pois a funccedilatildeo retsqlace monta a string para busca com letras minuacutesculas cFind = acentuaccedilatildeo
cQuery = SELECT FROM + RetSqlTab(ZZ1)
cQuery += WHERE LOWER(ZZ1_TITULO) LIKE +RetSqlAce(cFind)+
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VALTOSQL
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = + ValToSql(02)
cQuery += AND FA2_DTINC lt= + ValToSql(date())
O exemplo acima caso escrito de forma a realizar as conversotildees especiacuteficas para cada tipo de conteuacutedo seria o equivalemte ao coacutedigo abaixo
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = 02
cQuery += AND FA2_DTINC lt= + DTOS( date() )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VARINFO
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo eacute gerada uma string HTML com as informaccedilotildees do retorno da chamada de duas funccedilotildees baacutesicas da Linguagem Advpl User Function InfoTeste()
Local cHtml =
cHtml += VarInfo(lsquoDatersquodate())
cHtml += VarInfo(lsquoTimelsquotime())
Return cHtml
Deve ser gerado um echo no Console do Servidor parecido com este abaixo
Date -gt D ( 10) [08122003]
Time -gt C ( 8) [201748]
Infra-Estrutura APWEBEX - Exemplo das funccedilotildees de acentuaccedilatildeo ApWebEX
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo vemos a diferenccedila de comportamento entre as funccedilotildees baacutesicas da Linguagem Advpl Upper() e Lower() e a funccedilatildeo de Infra-estrutura Capital() em relaccedilatildeo agraves funccedilotildees da Infra-estrutura
APWEBEX UpperAce() LowerAce() e CApitalAce() quando utilizamos caracteres acentuados cRetorno =
cFrase = natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
cRetorno += Original + cFrase + CRLF
cRetorno += Upper() + upper(cFrase) + CRLF
cRetorno += Lower() + lower(cFrase) + CRLF
cRetorno += Capital() + capital(cFrase) + CRLF
cRetorno += UPPERACE() + UPPERACE(cFrase) + CRLF
cRetorno += LOWERACE() + LOWERACE(cFrase) + CRLF
cRetorno += CAPITALACE() + CAPITALACE(cFrase) + CRLF
Neste ponto a variaacutevel cRetorno deveraacute conter
Original natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
Upper() NatildeO Haacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSotildeES PARA O INEXPLICaacuteVEL
Lower() natildeo haacute explicaCcedilOtildees considerando excessotildees para o inexplicaacutevel
Capital() Natildeo Haacute ExplicaCcedilOtildees Considerando Excessotildees Para O Inexplicaacutevel
UPPERACE() NAtildeO HAacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSOtildeES PARA O INEXPLICAacuteVEL
LOWERACE() natildeo haacute explicaccedilotildees considerando excessotildees para o inexplicaacutevel
CAPITALACE() Natildeo Haacute Explicaccedilotildees Considerando Excessotildees Para O Inexplicaacutevel
Infra-Estrutura APWEBEX - Exemplos das funccedilotildees NTOC e CTON
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos as funccedilotildees cton e ntoc para realizar conversotildees de nuacutemeros em base decimal para outras bases numeacutericas e vice-versa
16
nNum1 = CTON(011010012) Converte binaacuterio para decimal
nNum2 = CTON(00DA25FE16) Converte Hexadecimal para decimal
nNum1++ Soma 1 ao numero em nNum1
nNum2++ Soma 1 ao numero em nNum2
cNum1 = NtoC(nNum128) Converte para binaacuterio novamente
cNum2 = NtoC(nNum2168) Converte para Hexa novamente
-------------------------------------------------------------------------
Ao final do programa cNum1 seraacute 01101010 e cNum2 seraacute 00DA25FF
-------------------------------------------------------------------------
APWEXADDERR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
APWEXADDERR ( [ cTitulo ] [ cInfo ] ) --gt T
Paracircmetros
Argumento Tipo Descriccedilatildeo
cTitulo Caracter cTitulo corresponde a um tiacutetulo identificador da informaccedilatildeo Deve ter no maacuteximo 20 caracteres Os caracteres acima da vigeacutesima posiccedilatildeo seratildeo
ignorados
cInfo Caracter cInfo corresponde agrave Informaccedilatildeo a ser acrescentada ao ERRORLOG em caso de erro
Retorno
Tipo Descriccedilatildeo
Loacutegico Esta funccedilatildeo sempre retorna T
Descriccedilatildeo
Atraveacutes da funccedilatildeo ApWExAddErr() podemos acrescentar uma string de informaccedilotildees adicionais em um buffer em memoacuteria descarregado na geraccedilatildeo do ERRORLOG no caso de uma ocorrecircncia de erro fatal na
working thread atual
Caso a funccedilatildeo seja chamada sem nenhum paracircmetro a uacuteltima ocorrecircncia acrescentada pela funccedilatildeo eacute eliminada da pilha interna de informaccedilotildees
ATENCcedilAtildeO Esta funccedilatildeo deve ser apenas utilizada em casos de necessidade de obtenccedilatildeo de informaccedilotildees especiacuteficas acerca de uma ocorrecircncia de erro natildeo reproduzida em ambiente de testes eou natildeo depuraacutevel pois
seu uso desnecessaacuterio prejudica a performance da aplicaccedilatildeo final
CAPITALACE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CAPITALACE ( lt cString gt ) --gt cStrCapital
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida
Retorno
Tipo Descriccedilatildeo
Caracter String resultante convertida para munuacutesculo com as primeiras letras das palavras significantes em maiuacutesculo
Descriccedilatildeo
Semelhante agrave funccedilatildeo de Infra-estrutura Capital() poreacutem converte tambeacutem caracteres acentuados
A funccedilatildeo CapitalAce() converte todos os caracteres de uma String para minuacutesculo e a primeira letra das palavras significantes para maiuacutesculo semelhante agrave funccedilatildeo Capital() poreacutem considera e converte tambeacutem
caracteres acentuados em OEM eou ANSI
CTON
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CTON ( lt cString gt lt nBase gt ) --gt nNumero
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave representaccedilatildeo de um nuacutemero em outra base numeacuterica compreendida entre 2 e 36
nBase Numeacuterico nBase corresponde agrave base numeacuterica utilizada pelo numero representado em cString
Retorno
Tipo Descriccedilatildeo
Numeacuterico Nuacutemero recebido como paracircmetro em notaccedilatildeo decimal ( Base 10 )
Descriccedilatildeo
Converte um nuacutemero representado em String de base 2 a 36 para um nuacutemero em base decimal (10)
Observaccedilatildeo Importante
Satildeo considerados caracteres vaacutelidos para compor um nuacutemero de base 36 os 10 algarismos numeacutericos de 0 a 9 e os 26 caracteres alfabeacuteticos maiuacutesculos compreendidos entre A e Z Quaisquer caractetes presentes na
String de paracircmetro fora desta faixa de dados eou fora da base ( por exemplo uma conversatildeo de string base 2 - binaacuterio - da string 01001020 ) retornaraacute -1 ( menos um )
ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
ESCAPE ( lt cString gt ) --gt cEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute uma sequecircncia de caracteres a ser processada
Retorno
Tipo Descriccedilatildeo
Caracter cEscaped corresponde agrave string original com os caracteres reservados utilizando a notaccedilatildeo HH
Descriccedilatildeo
A funccedilatildeo Escape() deve ser utilizada para realizar conversotildees de caracteres especiais e reservados quando da necessidade de passagem de paracircmetros via URL
A sintaxe de uma requisiccedilatildeo via URL para a passagem de paracircmetros eacute
(link)param=conteudoampparam2=conteudo2amp
Quando passamos paracircmetros via url devemos tomar o cuidado de natildeo utilizar caracteres reservados e especiais nos nomes e conteuacutedos de paracircmetros Para realizar estas conversotildees utilizamos a funccedilatildeo Escape()
17
EXECINPAGE
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXECINPAGE ( lt cAPHPage gt ) --gt cHTMLPage
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAPHPage Caracter Corresponde agraveo nome do APH que deve ser executado sem a extensatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cHtmlPage corresponde agrave string HTML gerada pela paacutegina APH AHU
Descriccedilatildeo
Atraveacutes da funccedilatildeo ExecInPage() executamos uma paacutegina APH passada como paracircmetro A funccedilatildeo deveraacute retornar a String HTML correspondente agrave paacutegina processada
Poreacutem a funccedilatildeo ExecInPage() realiza tratamentos adicionais padratildeo relacionaodo agraveo comportamento dos Projetos WEB referentes agrave customizaccedilotildees da segunte maneira
1 Primeiro eacute verificado se existe uma paacutegina AHU compilada com o nome cAPHPage Caso exista a mesma seraacute executada pela execinpage
2 Caso natildeo exista AHU com este nome eacute procurado pelo APH Caso o APH exista o mesmo seraacute executado pela ExecInPage
3 Caso natildeo existam no RPO atual o APH nem o AHU com o nome especificado no paracircmetro cAPHFile o processamento eacute abortado com a ocorrecircncia de erro [APWEXERR_0007] APH page
[ltcAPHPagegt] not found in RPO 4 Antes de executar o APH ou AHU identificado nos passos anteriores eacute verificado se existe um ponto de entrada ( User Function ) compilado com o mesmo nome do APH Caso exista o ponto de
entrada eacute executado Ele deveraacute retornar uma String HTML Se for retornada alguma string a funccedilatildeo retorna a tring retornada e natildeo processa o APH AHU Observaccedilatildeo A funccedilatildeo ExecInPage natildeo iraacute executar este
tratamento da User Function com o nome de cAPHPage caso a funccedilatildeo ExecInPage() esteja sendo executada atraveacutes de uma USER FUNCTION
Observaccedilatildeo Importante - Envio parcial de HTML agraveo Browser A funccedilatildeo ExecInpage() juntamente com o APH compilado ao serem processados iratildeo tentar enviar o conteuacutedo HTML para o Browser solicitante durante o processamento de modo que a funccedilatildeo normalmente iraacute
retornar uma String vazia
Caso seja necessaacuteria a execuccedilatildeo de uma paacutegina APH ou AHU e o natildeo-envio da mesma para o Browse por exemplo para a geraccedilatildeo de um coacutedigo HTML a ser enviado via e-mail revemos utilizar a funccedilatildeo
HttpSetPart() realizando uma chamada da mesma antes da ExecInPage() passando o paracircmetro F para desabilitar temporariamente o envio de HTML simultacircneo ao Browser e apoacutes a execuccedilatildeo da ExecInPage()
devemos re-habilitar o envio simultacircneo atraveacutes da chamada da funccedilatildeo HttpSetPart() com o paracircmetro T
EXISTPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTPAGE ( lt cAphFile gt ) --gt lFound
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAphFile Caracter Nome do arquivo APH sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Caracter Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistPage() para identificarmos no ambiente atual se um determinado arquivo APH encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistPage(teste)
conout(testeaph compilado neste RPO)
Else
conout(testeaph NAO compilado neste RPO)
Endif
EXISTUSRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTUSRPAGE ( lt cAhuFile gt ) --gt lExist
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAhuFile Caracter Nome do arquivo AHU sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Loacutegico Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistUSRPage() para identificarmos no ambiente atual se um determinado arquivo AHU encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistUSRPage(teste)
conout(testeahu compilado neste RPO)
Else
conout(testeahu NAO compilado neste RPO)
Endif
GETJOBPROFSTRING
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETJOBPROFSTRING ( lt cKey gt lt cDefault gt ) --gt cKeyValue
Paracircmetros
Argumento Tipo Descriccedilatildeo
cKey Caracter cKey corresponde agrave chave da seccedilatildeo de configuraccedilatildeo da Working Thread atual a ser retornada
cDefault Caracter Valor default (string) a ser retornado pela funccedilatildeo caso a chave especificada natildeo sehja encontrada no INI
Retorno
Tipo Descriccedilatildeo
Caracter Conteudo da Chave solicitada Caso a chave natildeo seja encontrada eacute retornado o conteudo de cDefault Caso esta funccedilatildeo natildeo seja executada a partir de uma Working Thread ela
18
retornaraacute uma string em branco ()
Descriccedilatildeo
Atraveacutes desta funccedilatildeo podemos recuperar as configuraccedilotildees do Job da Working Thread atual
GETWEXVERSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETWEXVERSION ( ) --gt cBuildId
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave String Identificadora da versatildeo no formato ltLIBgt VAAMMDDHHmm Vide Tabela A
Descriccedilatildeo
Esta funccedilatildeo natildeo requer argumentos e retorna o Identificador do build versatildeo de Release das funccedilotildees de Infra-Estrutura APWEBEX
Observaccedilatildeo A data informada pela versatildeo natildeo corresponde agrave ultima compilaccedilatildeo do RPO de um determinado Projeto WEB mas sim agrave data de release da LIB de Infra-Estrutura APWEBEX
Tabela A
Simbolo Descriccedilatildeo
AA Ano de geraccedilatildeo da Lib
MM Mecircs da geraccedilatildeo da Lib
DD Dia da geraccedilatildeo da Lib
HH Horaacuterio da geraccedilatildeo da Lib
mm Minutos do Horaacuterio de Geraccedilatildeo da Lib
(HTTP) Indica que a versatildeo foi compilada com a configuracatildeo de envio progressivo de HTML simultacircneo para o Browse Esta opccedilatildeo eacute imprescindiacutevel para projetos que se utilizam desta LIB
Por exemplo
APWEBEX Version 30312021900 (HTTP)
HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HEXSTRDUMP ( lt cString gt [ nStart ] [ nLength ] ) --gt cHExDump
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser lida para a geraccedilatildeo do Dump
nStart Numeacuterico Corresponde agrave posiccedilatildeo inicial de cString a ser considerada para a geraccedilatildeo do Dump a partir da posiccedilatildeo 1 Caso este paracircmetro natildeo seja informado o
Default eacute a posiccedilatildeo 1 da string
nLength Numeacuterico nLength corresponde agraveo tamanho a ser considerado para a geraccedilatildeo do DUMP a partir da posiccedilatildeo inicial recebida em nStart Caso este paracircmetro natildeo
seja informado eacute considerado o tamanho ateacute o final da String
Retorno
Tipo Descriccedilatildeo
Caracter O retorno da funccedilatildeo corresponde agrave uma string Advpl formatadas em 16 bytes em hexadecimal por linha mais o separador pipe (|) mais os 16 caracteres em Ansi Os caracteres de
controle ( codigo ascii menor que 32 ) satildeo convertidos para visualizaccedilatildeo para o caractere underline (_)
Descriccedilatildeo
Atraveacutes da funccedilatildeo HexStrDump() podemos gerar uma string em Advpl em formato de Dump Hexadecimal a partir da string informada como paracircmetro a partir de uma determinada posiccedilatildeo da string considerando um
nuacutemero de bytes informado
Caso os paracircmetros nPosIni e nTamString natildeo sejam informados o dump gerado corresponde a string recebida como paracircmetro em sua totalidade
Observaccedilatildeo
Natildeo devemos pasar para a funccedilatildeo HexStrDump uma string maior que 240 Kb pois a geraccedilatildeo da String de dump eacute realizada em memoacuteria sendo a string final gerada em meacutedia 42 vezes maior que a string passada
como paracircmetro Caso a string passada como paracircmetro seja maior que 240 Kb a execuccedilatildeo seraacute abortada com a ocorrecircncia de erro fatal string size overflow
HTMLNOTAGS
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HTMLNOTAGS ( lt cStrHtml gt ) --gt cStrNoTags
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrHtml Caracter cStrHtml corresponde a uma String que natildeo pode conter caracteres Html interpretaacuteveis
Retorno
Tipo Descriccedilatildeo
Caracter String original com os caracteres interpretaacuteveis Html lt gt amp convertidos para caracteres natildeo-interpretaacuteveis
Descriccedilatildeo
A Funccedilatildeo HTMLNOTAGS converte as Tags interpretaacuteveis de uma String HTML para TAGS natildeo interpretaacuteveis Este recurso eacute normalmente utilizado quando precisamos montar um input Html com um conteudo que
nao pode ser interpretado pelo browser como uma Tag Esta funccedilatildeo apenas converte os caracteres lt ( menor que ) gt ( maior que ) amp ( e comercial ) e ldquo ( aspas duplas )
Recomenda-se fortemente que na montagem do value de um input html o conteuacutedo do mesmo seja colocado entre aspas duplas pois caso o conteuacutedo do value inicial do campo contenha aspas simples (
natildeo convertidas pela funccedilatildeo HtmlNoTags) isto poderaacute ocasionar perda de dados e erro de sintaxe no formulaacuterio Html
HTTPISWEBEX
Revisatildeo 12122003
Sintaxe
HTTPISWEBEX ( ) --gt lIsApWEBEX
Retorno
Tipo Descriccedilatildeo
Loacutegico A funccedilatildeo retornaraacute T caso o ambiente de execuccedilatildeo atual seja uma Working Thread WEBEX inicializada pela funccedilatildeo de infra-estrutura STARTWEBEX
Descriccedilatildeo
Atraveacutes da funccedilatildeo HttpIsWebEx() eacute possiacutevel identificarmos se o programa atual estaacute sendo executado atraveacutes de uma Working Thread inicializada utilizando-se as funccedilotildees de Infra-Estrutura APWEBEX
ISEMAIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
19
Sintaxe
ISEMAIL ( lt cEMail gt ) --gt lEmailOk
Paracircmetros
Argumento Tipo Descriccedilatildeo
cEMail Caracter cEmail corresponde a string a ser analizada contendo um e apenas um endereccedilo de e-mail
Retorno
Tipo Descriccedilatildeo
Caracter Retorna T caso a sring recebida como paracircmetro atenda agraves definiccedilotildees de nomenclatura vaacutelidos para um endereccedilo de e-mail
Descriccedilatildeo
Utilizada para validar e-mails em Advpl a funccedilatildeo ISEMAIL recebe como paracircmetro uma string contendo um e-mail retornando T caso a string esteja em um formaacuteto vaacutelido respeitando a regra para nomenclatura de
endereccedilos de e-mail
Regra Um e-mail eacute considerado vaacutelido caso seja iniciado por um caracter apenas contenha caracteres asc de a a z e 0 a 9 e os caracteres (arroba) (ponto) - ( hiacutefen) ou _ (underline) e deve conter uma e
apenas uma arroba e no minimo um ponto apos a arroba intercalado por um caracter
LOWERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
LOWERACE ( lt cString gt ) --gt cStrLower
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a sequecircncia de caracteres a ser convertida para letras minuacutesculas
Retorno
Tipo Descriccedilatildeo
Caracter String original em letras minuacutesculas
Descriccedilatildeo
A Funccedilatildeo LOWERACE converte todos os caracteres de uma String para ldquominusculordquo semelhante agrave funccedilatildeo LOWER() poreacutem considera e converte tambeacutem caracteres acentuados em ANSI
NTOC
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
NTOC ( lt nNumero gt lt nBase gt lt nTamStr gt ) --gt cString
Paracircmetros
Argumento Tipo Descriccedilatildeo
nNumero Numeacuterico nNumero eacute o valor numeacuterico em base devimal a ser convertido
nBase Numeacuterico nBase corresponde agrave base binaacuteria a ser utilizada para converter nNumero
nTamStr Numeacuterico nTamStr corresponde ao tamanho da string representando o numero na base desejada
Retorno
Tipo Descriccedilatildeo
Caracter cString corresponde ao numero convertido para a base numeacuterica especificada como paracircmetro
Descriccedilatildeo
A Funccedilatildeo NTOC converte um nuacutemero em notaccedilatildeo decimal para um nuacutemero representado por String utilizando uma base numeacuterica entre 2 e 36 preenchendo-o com ldquo0rdquo (zeros) agrave esquerda do tamanho especificado
Observaccedilatildeo O Paracircmetro nBase deve ser especificado com um nuacutemero entre 2 e 36 Caso seja passado como paracircmetro um nuacutemero base fora desta faixa o processamento eacute abortado com a ocorrecircncia de erro
[APWEXERR_0022] INVALID NTOC BASE [X] onde ltXgt foi a base passada como argumento
REDIRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
REDIRPAGE ( lt cUrl gt [ cTarget ] [ nTime ] ) --gt cScript
Paracircmetros
Argumento Tipo Descriccedilatildeo
cUrl Caracter Link para onde o script deve apontar o redirecionamento
cTarget Caracter Destino do redirecionamento Caso natildeo especificado o default eacute _self
nTime Numeacuterico Tempo (em segundos) de delay antes do redirecionamento ser executado
Retorno
Tipo Descriccedilatildeo
Caracter Script Html JavaScript que ao ser executado no Browser (client) chama a paacuteginaobjeto chamado no Link
Descriccedilatildeo
A funccedilatildeo RedirPage eacute utilizada quando desejamos devolver ao Browser um script que ao ser executado redirecionaraacute o Browser agrave abertura de um link passado como paracircmetro
RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLACE ( lt cStrFind gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrFind Caracter cStrFind corresponde agrave sequecircncia de caracteres a ser procurada podendo conter caracteres maiuacutesculos e minuacutesculos com ou sem acentuaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cStrQuery corresponde agrave string de busca a ser utilizada na query utilizando caracteres em minuacutesculo
Descriccedilatildeo
A funccedilatildeo RetSqlAce eacute utilizada para auxiliar de montagem de querys de busca de caracteres acentuados em bases de dados A funccedilatildeo automaticamente trata a string original removendo os acentos convertendo todos
os caracteres para minuacutesculas e trocando todas as vogais e cedilhas da string original por uma sequecircncia de caracteres acentuados em munuacutescilas para busca posicional
20
RETSQLCOND
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLCOND ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlCond() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga e o Makira Hypersite utilizando aliases de 3
caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar a filial atual ( xFilial ) de acordo com o modo do arquivo ( X2_MODO ) e para sempre desconsiderar
registros deletados
Observaccedilotildees
Esta funccedilatildeo foi mantida apenas por compatibilidade pois a ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do
banco para efeitos de performance Para ganharmos performance nas Querys devemos ao inveacutes de utilizar a funccedilatildeo RetSqlCond() utilizar como primeira clauacutesula WHERE o retorno da funccedilatildeo RetSqlFil() (
comparaccedilatildeo dos campos _FILIAL os primeiros do(s) iacutendice(s) do ERP ) que retorna apenas as comparaccedilotildees de Filial e por uacuteltimo a funccedilatildeo RetSqlDel que retorna o script para verificaccedilatildeo dos campos deletados (
que eacute o uacuteltimo campo das chaves de iacutendice do ERP utilizando TopConnect )
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlCond() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de
modo que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute
retorna os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLDEL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLDEL ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlDel() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo D_E_L_E_T_ da(s) tabela(s) passada(s) como paracircmetro
Observaccedilotildees
A ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do banco para efeitos de performance Para ganharmos performance
nas Querys devemos utilizar a funccedilatildeo RetSqlDEl() na montagem das ultimas consistecircncias da claacuteusula WHERE de uma Query
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlDel() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo
que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna
os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLFIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLFIL ( lt cAliases gt [ cCompFil ] ) --gt cSQlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
cCompFil Caracter
Atraveacutes de cCompFil eacute possiacutevel especificar uma Filial FIXA a ser comparada com os campos FILIAL do(s) alias(es) passados no paracircmetro cAliases
Caso natildeo informado os campos _FILIAL da(s) tabela(s) passadas como paracircmetro em cAliases seratildeo comparados com o retorno da funccedilatildeo xFilial() de
cada alias respectivamente
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo filial atual ( xFilial ) de acordo com o modo de abertura do arquivo no ERP ( X2_MODO )
Observaccedilatildeo
Devemos atentar ao fato que a funccedilatildeo RetSqlFil() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo que estes
alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna os
nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLTAB
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLTAB ( lt cAliasList gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliasList Caracter String contendo um ou mais alias separados por virgula a terem seus nomes fiacutesicos determinados
Retorno
Tipo Descriccedilatildeo
Caracter String contendo nomes fisicos e alias identificadores dos aliases recebidos como paracircmetro
Descriccedilatildeo
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
8
02 Alias virtual HttpCookies
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpCookies eacute possiacutevel consultar os Cookies do Header Http enviados pelo Browser e criar ou alterar o conteuacutedo de um cookie a ser devolvido agraveo Browser Uma variaacutevel de Cookie retorna um
tipo Advpl String e apenas aceita uma atruibuiccedilatildeo de String Vale lembrar tambeacutem que um cookie eacute um recurso do Browser que estaacute realizando a requisiccedilatildeo e existe um limite de tamanho para o total de Cookies
utilizados Este limite costuma ser proacuteximo a 1024 Bytes
Trata-se portanto de uma propriedade de leitura e gravaccedilatildeo dispniacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Utilizaccedilatildeo de Cookies
A utilizaccedilatildeo de Cookies tecircm objetivo praacutetico restrito agrave aplicaccedilotildees onde haja a necessidade impliacutecita de termos uma informaccedilatildeo relacionada agraveo browser utilizado pelo usuaacuterio atual que devam ser interpretadas
independente do usuaacuterio estar logado ou natildeo ( isto eacute independam diretamente de sessions )
Um exemplo praacutetico disto eacute o desenvolvimento de um site onde o conteuacutedo dinacircmico eacute retornado ao usuaacuterio em mais de um idioma Na entrada do site apresentamos um formulaacuterio ao usuaacuterio onde o mesmo iraacute
escolher o idioma de sua preferecircncia Mesmo que a session de login deste usuaacuterio expire no servidor o cookie com o idioma selecionado ainda estaacute no Browser de modo que a proacutexima requisiccedilatildeo do usuaacuterio pode ser
codificada para direcionaacute-lo para a paacutegina de login do site com as mensagens no idioma que o mesmo jaacute estava navegando
Lendo o valor de um Cookie
Atraveacutes dos exemplos abaixo lemos o valor do Cookie de identificaccedilatildeo do uacutesuaacuterio e um cookie de usuaacuterio criado para identificar no Browse qual eacute o idioma utilizado pelo usuaacuterio atual
cUserId = HttpCookies-gtUSERID Retorna o Cookie identificador do usuaacuterio do Protheus
cIdioma = HttpCookies-gtSiteLang Retorna o conteuacutedo do cookie SiteLang criado
Lendo todos os Cookies recebidos
O alias virtual HttpCookie possui uma propriedade chamada aCookies criada apenas para consulta (read-only) que retorna um Array Advpl de Strings contendo os nomes dos Cookies enviados pelo Browser agraveo
Protheus Por exemplo
aInfo = HttpCookies-gtaCookies
For nI = 1 to len(aInfo)
Mostra no console do Server todos os cookies recebidos
conout(Cookie +str(nI3)+ = + aInfo[nI])
Next
Criando um Cookie
A criaccedilatildeo de um Cookie eacute realizada atraveacutes da atrubuiccedilatildeo de um valor diretamente agraveo cookie desejado Por exemplo
HttpCookies-gtMeuCookie = TESTE
A criaccedilatildeo de um Cookie merece uma atenccedilatildeo especial pois um Cookie eacute retornado agraveo browser atraveacutes do Header de Retorno HTTP De modo que para que a criaccedilatildeo de um cookie seja realizada com sucesso o
mesmo deve ser criado antes de haver qualquer processamento de APH AHU caso este que natildeo seria mais possiacutevel a criaccedilatildeo do Cookie pois o Header de Retorno HTTP jaacute teria sido enviado agraveo browser solicitante
03 Alias virtual HttpGet
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpGet podemos consultar se uma determinada propriedade nos foi enviada atraveacutes da URL ( meacutetodo GET )
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos realizar uma requisiccedilatildeo a um link apw
passando pela URL o paracircmetro IMAGEM com o conteacuteuacutedo TESTE
httplocalhostu_TesteGetapwimagem=testeampcor=azul
Para recuperarmos em Advpl o conteuacutedo dos paracircmetros imagem e cor utilizamos
cImagem = HttpGet-gtimagem
cCor = HttpGet-gtcor
Podemos inserir tambeacutem um tratamento default Caso algum paracircmetro natildeo seja enviado ( resulte NIL ) assumimos um valor para o mesmo
DEFAULT cImagem = LogoAp8
DEFAULT cCor = amarelo
Existe tambeacutem uma propriedade do alias virtual HttpGet chamada aGets onde podemos recuperar um array de strings contendo a lista com os nomes dos paracircmetros enviados pelo browser solicitante Por exemplo
aInfo = HttpGet-gtaGets
For nI = 1 to len(aInfo)
conout(GET +str(nI3)+ = +aInfo[nI])
Next
04 Alias virtual HttpPost
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpPost podemos consultar os campos submetidos agraveo servidor atraveacutes do meacutetodo POST
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro
O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos realizar uma requisiccedilatildeo a um link apw
atraveacutes de um formulaacuterio html com meacutetodo POST partindo do Html abaixo
lthtmlgtltbodygt
ltform method=POST action=httplocalhostu_TstPostapwgt
Teste ltinput type=text name=CODIGO size=10gt
lthrgt
ltinput type=submitgt
ltformgt
ltbodygtlthtmlgt
Para recuperarmos em Advpl o conteuacutedo do campo CODIGO utilizamos
cCodigo = HttpPOST-gtCodigo
Existe tambeacutem uma propriedade do alias virtual chamada aPost onde podemos recuperar um array de strings contendo a lista com os nomes dos paracircmetros enviados pelo browser solicitante Por exemplo
aInfo = HttpPost-gtaPost
For nI = 1 to len(aInfo)
conout(POST +str(nI3)+ = +aInfo[nI])
Next
05 Alias virtual HttpHeadIn
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual HttpHeadIn podemos consultar os paracircmetros enviados pelo Browser solicitante enviados atraveacutes do Header HTTP ao realizar uma requisiccedilatildeo ao Protheus Server
Trata-se portanto de uma propriedade de leitura (read-only) disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
Consultando um Paracircmetro O retorno da consulta de um paracircmetro pode ter dois tipos NIL caso o paracircmetro natildeo tenha sido enviado ou String contendo o conteuacutedo do paracircmetro Por exemplo vamos consultar o header http User-Agent
enviado pelo Browser solicitante contendo uma String identiificando o modelo de Browser utilizado
cUserAgent = Httpheadin-gtUser_Agent
Devemos obter como retorno uma string parecida com a mostra abaixo
Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)
Observaccedilatildeo Importante Qualquer paracircmetro no Header HTTP que contenha um ou mais caracteres invaacutelidos para a nomenclatura de variaacuteveis Advpl ( como por exemplo o User-Agent que conteacutem um hiacutefen ) satildeo trocados pelo caractere _
underline para ser possiacutevel a leitura da propriedade
Propriedades especiais
HttpHeadIn-gtaHeaders
Retorna um Array de Strings contendo todas as linhas do Header HTTP da requisiccedilatildeo
HttpHeadIn-gtmain
Retorna o nome da funccedilatildeo chamda atraveacutes da URL sem a extensatildeo e sem o host Por exemplo ao chamar o link httplocalhostu_tstHEaderapw o conteuacutedo de HttpHeadin-gtmain seraacute u_tstHEader
9
HttpHeadIn-gtREMOTE_ADDR
Retorna uma string no formato nnnnnnnnnnnn o IP da estaccedilatildeo que realizou a requisiccedilatildeo
httpHeadIn-gtREMOTE_PORT
Retorna um valor Advpl numeacuterico informando a porta utilizada para realizar a requisiccedilatildeo
06 Alias virtual HttpHeadOut
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 LIB WEBEX
Atraveacutes deste alias virtual de retorno podemos alterar ou criar um paracircmetro no Header de retorno HTTP do Protheus a ser devolvido agraveo Browser solicitante de uma requisiccedilatildeo de processamento
Trata-se portanto de uma propriedade de retorno disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
A criaccedilatildeo de uma linha no Header HTTP merece uma atenccedilatildeo especial pois para que a operaccedilatildeo realizada com sucesso o header deve ser criado antes de haver qualquer processamento de APH AHU pois neste caso
o Header de Retorno HTTP jaacute teria sido enviado agraveo browser solicitante
07 Alias virtual HttpSession
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual httpSession podemos criar e consultar variaacuteveis do tipo session relacionadas agraveo usuaacuterio que realizou a requisiccedilatildeo atraveacutes do Browser
Para diferenciar os usuaacuterios que estatildeo navegando num site o Protheus busca por um cookie identificador de usuaacuterio retornado para o browser a cada requisiccedilatildeo de link APW chamado SESSIONID Caso o Protheus
receba este cookie ele identifica quais sessions pertencem a este usuaacuterio
Quando um usuaacuterio realiza a primeira requisiccedilatildeo http ao Protheus o Protheus natildeo recebe o cookie identificador e automaticamente inicializa um identificador de sessions para o mesmo retornando o identificador ao
Browser via Header HTTP Este identificador pode ser recuperado em uma funccedilatildeo advpl atraveacutes de httpSession-gtSESSIONID
Quando criamos uma variaacutevel de session ela pode ser acessada nas proacuteximas requisiccedilotildees provenientes deste mesmo usuaacuterio Caso uma variaacutevel de session consultada natildeo exista ela retorna o valor NIL (nulo)
Vejamos os exemplos abaixo
Criando variaacuteveis Session HttpSession-gtUserId = 123
HttpSession-gtUserName = U_GetUserName()
Nas linhas acima criamos uma session para o usuaacuterio atual chamada UserId com o conteuacutedo do tipo String e criamos outra session chamada UserName com o retorno da funccedilatildeo U_GetUserName()
Consultando variaacuteveis Session Ao consultar uma variaacutevel session sempre devemos prever que a mesma natildeo pode ter sido criada de modo que a consulta pode retornar NIL ou caso a session jaacute exista retornaraacute o valor do tipo que foi atribuiacutedo `a
mesma
If HttpSession-gtUserId = NIL
Session ainda natildeo foi criada Usuaacuterio natildeo estaacute logado
conout(Usuario natildeo estaacute logado)
Else
Session jaacute criada o usuaacuterio estaacute logado
conout(Usuario estaacute logado ID = + HttpSession-gtUserId )
Endif
Exemplo de Funcionamento de Session No exemplo abaixo criamos uma session para identificar quantas vezes o usuaacuterio chamou esta funccedilatildeo especiacutefica Damos o nome da session de MyCounter que iraacute conter um nuacutemero No primeiro acesso do usuaacuterio a
session natildeo existe ( = NIL ) e eacute criada com o valor numeacuterico 1 (um) A partir das proacuteximas requisiccedilotildees realizadas ao Protheus atraveacutes desta paacutegina ( atraveacutes do botatildeo Refresh do Browser por exemplo ) a session jaacute
existe sendo somado o valor 1 agraveo conteuacutedo jaacute existente e devolvido agraveo browser solicitante um Html informando quantas chamadas jaacute foram realizadas por este usuaacuterio
include rwmakech
include apwebexch
User Function TstSession()
Local cHtml = cEcho =
WEB EXTENDED INIT cHtml
If httpSession-gtmycounter = NIL
cEcho = Inicializando contador
Conout(cEcho)
cHtml += cEcho
httpSession-gtmycounter = 1
Else
httpSession-gtmycounter++
cEcho = contador em +str(httpSession-gtmycounter3)
conout(cEcho)
Endif
cHtml += cEcho + lthrgt
WEB EXTENDED END
Return cHtml
Apoacutes compilado o fonte acima e o Server Protheus configurado e iniciado com HTTP habilitado e as working Threads configuradas abra um Web Browser e solicite a url httplocalhostu_tstsessionapw Seraacute
mostrado no Browse a mensagem Inicializando Contador Agora peccedila um Refresh desta tela ao Browser Seraacute devolvida a mensagem Contador em 2 e a cada refresh deste Browser o contador seraacute
incrementado
Uso de Sessions e Paralelismo - Comportamento do Protheus Server
O Protheus Server trata agraves requisiccedilotildees simultacircneas de links APW em paralelo desde que estejam disponiacuteveis o numero de Working Threads necessaacuterio para tal Por exemplo em uma estrutura de Frames onde cada
um deles aponta o SRC (source) para um link apw o Browser envia as trecircs requisiccedilotildees de apw para o Protheus Server e caso extistam 3 working threads disponiacuteveis naquele momento as trecircs requisiccedilotildees satildeo
atendidas em paralelo
Por outro lado se em duas destas trecircs requisiccedilotildees faz-se necessaacuteria a atualizaccedilatildeo eou consulta a uma variaacutevel de Session ( httpsession ) este processamento em paralelo caso natildeo fosse tratado poderia gerar perdas
no conteuacutedo da session caso a mesma session fosse atualizada simultaneamente
Para resolver esta questatildeo de maneira a natildeo sobrecarregar o Servidor com solicitaccedilotildees de Processamento Sequencial ( Critical Sessions ) foi montado um esquema de Lock de Session de Usuaacuterio automaacutetico com
liberaccedilatildeo automaacutetica apoacutes o processamento do APW ou liberaccedilatildeo manual atraveacutes da chamada da funccedilatildeo HttpLeaveSession() antes do processamento ser terminado
Exemplificando a aplicaccedilatildeo praacutetica e funcionamento deste conceito partimos de um ambiente hipoteacutetico utilizando 3 frames onde um usuaacuterio realiza uma requisiccedilatildeo agrave funccedilatildeo que retornaraacute o source HTML da paacutegina
de frames e a mesma ao chegar no Browser faz o mesmo realizar as trecircs requisiccedilotildees simultaneamente todas elas referentes ao mesmo usuaacuterio Poreacutem o primeiro e o segundo frames realizam uma operaccedilatildeo qualquer
com uma ou mais variaacuteveis da Session do usuaacuterio e o terceiro frame realiza um outro processamento que natildeo depende da consulta de nenhuma variaacutevel da Session As trecircs requisiccedilotildees referente a este usuario seratildeo
processadas simultaneamente por working Threads diferentes ( vamos supor que naquele momento haviam trecircs Working Threads disponiacuteveis) poreacutem quando uma das duas working Threads que tentarem acesso agrave uma
variaacutevel de Session daquele usuaacuterio o Servidor verifica se alguma outra Thread estaacute com o flag de acesso agraves sessions deste usuario Se nenhuma outra thread em uso por este usuaacuterio estaacute com a bandeira entatildeo a
thread atual pega a bandeira para ela senatildeo o processamento da Thread eacute congelado no aguardo da liberaccedilatildeo da bandeira
A liberaccedilatildeo da bandeira ocorre automaticamente no retorno da Working Thread para o Browser antes da chamada do ponto de entrada para Reset do Ambiente atraveacutes da chamada na KlibEx da funccedilatildeo
HttpLeaveSession() Caso seja viaacutevel para o usuaacuterio liberar as sessions antes do retorno da funccedilatildeo ele pode utilizar-se da funccedilatildeo httpLeaveSession() no seu fonte sem necessariamente aguardar pelo encerramento
efetivo e reset de ambiente da Working Thread
Logo retornando ao exemplo acima os Frames 1 e 2 iratildeo concorrer pela banceira de atualizaccedilatildeo de conteuacutedo de sessions onde o primeiro frame que a ser executado pegaraacute a bandeira para ele e atualizaraacute a session e
o segundo frame iraacute esperar o primeiro liberar a bandeira para continuar a ser processado e o terceiro frame como natildeo utiliza nenhuma variaacutevel da session seraacute processado sem depender de nenhum dos outros dois
frames anteriores
Quando utilizamos ASP ( Microsoft Active Server Pages ) o mesmo realiza uma serializaccedilatildeo de requisiccedilotildees de paacuteginas ASP por usuaacuterio de modo que caso o mesmo usuaacuterio solicite trecircs frames asp as requisiccedilotildees
de processamento chegaratildeo ao Servidor ASP simultaneamente mas a bandeira de processamento eacute unica por paacutegina asp sendo liberada apenas apos o teacutermino do processamento da paacutegina de modo que mesmo que
nenhuma das paacuteginas faccedila uso de sessions todas as paacuteginas deste usuaacuterio seratildeo processadas em sequecircncia
08 Envio simultacircneo de HTML ao Browser
Revisatildeo 30042004
Abrangecircncia
10
Versatildeo 710 Versatildeo 811 LIB WEBEX
As aplicaccedilotildees web desenhadas para utilizar a Infra-Estrutura APWEBEX contam com o recurso de Envio simultacircneo de Html ao Browser durante o processamento de uma paacutegina Advpl-ASP ( APH eou AHU )
Este recurso eacute habilitado atraveacutes do Protheus IDE nas opccedilotildees de configuraccedilatildeo de compilaccedilatildeo do ambiente em questatildeo mais especificamente habilitado atraveacutes do CheckBox [ ] Exibir conteuacutedo do Advpl ASP
progressivamente no Browser
Ao habilitamos esta configuraccedilatildeo todos os arquivos APH e AHU satildeo parseados fazendo internamente o uso da funccedilatildeo HttpSend() de modo que mesmo antes do processamento estar concluiacutedo o Html gerado jaacute estaacute
sendo enviado agraveo Browser qoe o solicitou
A utilizaccedilatildeo deste recurso provecirc um ganho de performance subtancial na aplicaccedilatildeo final Todos os projetos desenvolvidos com esta tecnologia ( Infra-Estrutura APWEBEX ) devem ter esta configuraccedilatildeo de compilaccedilatildeo
habilitada no IDE Vale lembrar que caso este recurso natildeo esteja habilitado ao habilitaacute-lo os arquivos aph e ahu do projeto necessitam ser recompilados para que esta configuraccedilatildeo tenha o efeito desejado
Pode existir a necessidade de um processamento de um APH ou AHU natildeo enviar o script Html gerado diretamente ao Browser Para tal situaccedilatildeo podemos desabilitar temporariamente este recurso de envio de html
progressivo em tempo de execuccedilatildeo permitindo assim por exemplo uma funccedilatildeo chamar em sequecircncia dois arquivos APH um para gerar um conteuacutedo Html a ser enviado via e-mail armazenado em uma variaacutevel
Advpl e outro APH para a montagem de uma tela de status que seraacute enviada agraveo Browser solicitante
Para habilitar eou desabilitar o envio simultacircneo do Script HTML agraveo browser em tempo de execuccedilatildeo utilize a funccedilatildeo HttpSetPart()
09 Configuraccedilotildees especiacuteficas APWEBEX
Revisatildeo 26042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Ao utilizarmos as funccedilotildees de Infra-estrutura APWEBEX existem recursos da lib que exigem uma configuraccedilatildeo adicional para serem utilizados
Envio de e-mail automaacutetico atraveacutes da Rotina de Tratamento de Erro do Site
Em caso de erro fatal na aplicaccedilatildeo Web a proacutepria rotina de tratamento de erro pode ser configurada para enviar um e-mail agraveo Administrador do sistema Para tal eacute necessaacuterio inserir as chaves abaixo na seccedilatildeo
do ambiente em uso para o site
ErrorSMTP= (endereccedilo do servidor SMTP a ser usado para o envio do e-mail )
ErrorMail= ( um ou mais endereccedilos de e-mail a receber op e-mail de erro separados por virgula )
ErrorFrom= ( um e apenas um endereccedilo de e-mail a ser usado como remetente do aviso de erro )
ErrorLogin = ( nome de usuario de login no servidor de SMTP caso necessaacuterio )
ErrorPassword= ( senha do usuario de login no servidor de SMTP caso necessaacuterio )
WebAdmin - Login alternativo
A infra-estrutura APWEBEX exige um usuaacuterio e senha para entrar no moacutedulo de administraccedilatildeo WebAdmin Para validar o login eacute utilizado o arquivo de senhas do ERP O usuaacuterio deve ser o Administrador ou
pertencer ao grupo de administradores para ter acesso agraveo WebAdmin Caso natildeo seja viaacutevel usar este arquivo de senhas para validar o login podemos inserir uma chave adicional ( AdmLogin ) no Environment em uso
pela aplicaccedilatildeo Web e configurar nela a senha do usuaacuterio Administrador para login no WebAdmin Caso esta chave seja configurada o arquivo de senhas do ERP natildeo seraacute utilizado para validar o login no WebAdmin
AdmLogin= ( senha do Administrador para logar no WebAdmin )
Pasta alternativa para upload de Rpo via WebAdmin No WebAdmin eacute possiacutevel utilizar uma configuraccedilatildeo especiacutefica para a troca do repositoacuterio de objetos em uso no site sem que seja necessaacuterio parar o servidor para isso Por default a pasta de upload chama-se
SwapRPO e deve existir na estrutura de diretoacuterio do ambiente utilizado a partir do diretoacuterio raiz do ambiente ( RootPath )
RpoUpload= ( pasta de upload alternativa a partir do RootPath do ambiente )
10 Recomendaccedilotildees finais
Revisatildeo 17122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Para todo o desenvolvimento de soluccedilotildees temos em matildeos uma diversidade de recursos desenhados para melhor atender agraves necessidades e adequar-se agraves caracteristicas da aplicaccedilatildeo Dada a flexibilidade dos recursos
recomenda-se aos desenvolvedores adotarem um padratildeo de desenvolvimento e ter em foco a eficiecircncia da aplicaccedilatildeo final tanto no aspecto funcional como na codificaccedilatildeo
Lanccedilando matildeo da experiecircncia em desenvolvimento de aplicaccedilotildees web adquiridas nos uacuteltimos anos nos toacutepicos abaixo estatildeo relacionadas algumas medidas tomadas no desenvolvimento de aplicaccedilotildees que nos satildeo muito
uacuteteis no decorrer de um projeto
Nomenclatura de Funccedilotildees
Para o desenvolvimento de aplicaccedilotildees web foi criado o Statement WEB FUNCTION para a declaraccedilatildeo de funccedilotildees referentes agrave projetos web Este comando na praacutetica apenas prefixa a declaraccedilatildeo da funccedilatildeo com
W_ poreacutem a sua utilizaccedilatildeo identifica que a funccedilatildeo em questatildeo foi construiacuteda uacutenica e exclusivamente para ser chamada a partir de uma requisiccedilatildeo HTTP Em adendo agrave este devemos utilizar os comandos WEB
EXTENDED INIT END disponivels no Include apwebexch para proteger a funccedilatildeo de ser chamada em um ambiente que natildeo o APWEBEX
Separando a Interface do Processamento
Ao desenvolver utilizando Advpl ASP paacuteginas APH AHU recomenda-se separar o processamento da Interface do seguinte modo Criar uma Web Function para a chamdada de umna paacutegina com conteuacutedo
dinacircmico via link apw e um arquivo APH ou AHU de mesmo nome que seraacute chamado internamente de modo que o coacutedigo-fonte escrito na Web Function seja responsaacutevel para gerar as informaccedilotildees a serem
disponibilizadas para o usuaacuterio e o APH contenha apenas a maacutescara destas informaccedilotildees e o miacutenimo de instruccedilotildees Advpl possiacutevel para a montagem da paacutegina Este processo facilita a manutenccedilatildeo de amobos
os coacutedigos pois o Web Designer que iraacute realizar um ajuste no APH natildeo teraacute que desviar do fonte Advpl inserido na paacutegina e o Analista Programador que faraacute a manutenccedilatildeo no coacutedigo Advpl preocupar-se-aacute apenas
com o coacutedigo responsaacutevel para a geraccedilatildeo dos dados que seratildeo mascarados
Utilizaccedilatildeo das Funccedilotildees de Infra-Estrutura
Atraveacutes dos comandos e funccedilotildees disponibilizadas na Infra-Estrutura APWEBEX natildeo tecircmos a necessidade de recriar partes comuns de coacutedigo para todos os projetos que se utilizem desta tecnologia aleacutem de permitir
atraveacutes de pontos de entrada estrategicamente colocados na ferramenta um niacutevel altiacutessimo de customizaccedilatildeo para os projetos desenvolvidos com esta tecnologia de maneira praacutetica e objetiva
11 Monitoramento de Sites em WEBEX
Revisatildeo 17122003
Abrangecircncia
LIB WEBEX
O Objetivo de uma funccedilatildeo de Monitoramento de Sites eacute testar as funcionalidades baacutesicas de um site retornando uma mensagem HTML preacute-definida indicando que estaacute tudo certo e em caso de erro uma
mensagem que procure identificar o que estaacute de errado
Para sites desenvolvidos em Protheus utilizando a tecnologia WEBEX devemos criar uma funccedilatildeo especiacutefica para o site que iraacute determinar se o mesmo estaacute operacional Esta funccedilatildeo seraacute chamada atraveacutes de link
apw
Vejamos o exemplo abaixo escrito para um site cujas bases de dados estatildeo num SQL acessadas via TopConnect Neste exemplo a funccedilatildeo chamada seraacute httpservidorU_SiteMonitorapw e caso esteja tudo certo
ela retornaraacute a string (SITE OK) seguido da data e horaacuterio da execuccedilatildeo da rotina Qualquer retorno diferente disto poderaacute indicar uma anomalia no funcionamento do site
Quando hospedado um site utilizando esta tecnologia no DataCenter da Makira esta informaccedilatildeo gerada pela rotina deve ser passada agraveo depto de infra-estrutura que configuraraacute um software Monitor de Sites que iraacute
realizar a cada um minuto uma requisiccedilatildeo agrave url especificada e iraacute emitir um alerta ao Departamento para que seja verificado o site caso haja alguma falha na resposta include protheusch
include apwebexch
User Function SiteMonitor()
Local cQuery nQtdRec
Verifica se a working Thread estaacute conectada com o TOP
If TCIsConnected()
Return Working Thread perdeu a conexatildeo com o TOP
Endif
Verifica se as tabelas principais estatildeo abertas
If select(SA1)=0
Return Tabela SA1 natildeo estaacute aberta
Endif
If select(SC5)=0
Return Tabela SC5 natildeo estaacute aberta
Endif
Executa uma query de contagem de registros de uma tabela do sistema
cQuery = SELECT count() as QTDREC from SA1010
OPEN QUERY cQuery ALIAS TMPCOUNT
nQtdRec = TMPCOUNT-gtQTDREC
CLOSE QUERY TMPCOUNT
If nQtdRec=0
11
Return Falha na Contagem de registros Query SA1
Endif
Se estaacute tudo certo retorna um HTML informando que estaacute tudo OK
Return (SITE OK) +dtos(date())+ +time()
Comandos - CLOSE QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CLOSE QUERY cAlias
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAlias Caracter Alias sob o qual o cursor da Query foi aberto Caso o alias passado como paracircmetro natildeo se encontre aberto a funccedilatildeo natildeo gera nenhuma ocorrecircncia de
erro
Descriccedilatildeo
Atraveacutes do comando Close Query realizamos o fechamento de uma query aberta atraveacutes do comando OPEN QUERY
ATENCcedilAtildeO Uma query aberta pelo comando OPEN QUERY deve ser fechada pelo comando CLOSE QUERY Poderiacuteamos fechar o alias aberto atraveacutes de uma Query simplesmente com a funccedilatildeo
DbCloseArea() poreacutem isto deixaria em aberto elementos internos de controle criados pelo comando OPEN QUERY
Comandos - OPEN QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
OPEN QUERY ltcQuerygt ALIAS ltcAliasgt [ [NOCHANGE] ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcQuerygt Caracter cQuery corresponde agrave String contendo a Query a ser executada no banco de dados
ALIAS ltcAliasgt Caracter cAlias corresponde ao nome do alias sob o qual o cursor de retorno dos dados pesquisados seraacute aberto no ambiente Advpl Natildeo pode ser especificado
um nome de alias jaacute em uso senatildeo a aplicaccedilatildeo seraacute finalizada com a ocorrecircncia de erro Alias already in Use
[NOCHANGE] Caracter Caso especificada a claacuteusola NOCHANGE na abertura da query a string em cQuery natildeo seraacute submetida agrave funccedilatildeo ChangeQuery()
Descriccedilatildeo
Atraveacutes do comando OPEN QUERY realizamos a abertura de uma Query de busca no Banco de Dados atraveacutes do RDD TOPCONN retornando os dados consultados atraveacutes de um ALIAS Advpl
Caso a Query nao possa ser aberta por erro de sintaxe devido agrave thread atual natildeo estar conectada com o TopConnect ou outro erro seraacute gerado um log de erro informando o Alias o Stack ( Pilha de Chamadas ) de
execucatildeo e o conteuacutedo da Query para Debug
OBSERVACcedilOtildeES IMPORTANTES
Na montagem da string da Query devemos especificar os comandos SQL alias e nomes de campos em letras maiuacutesculas
Quando utilizamos o comando OPEN QUERY natildeo precisamos passar a expressatildeo da Query atraveacutes da funccedilatildeo ChangeQuery() Este proceduimento jaacute eacute realizado internamente pelo comando OPEN
QUERY Para que a query natildeo seja submetida agrave funccedilatildeo ChangeQuery() devemos utilizar o paracircmetro NOCHANGE
A utilizaccedilatildeo deste comando eacute impliacutecita agrave LIB APWEBEX e necessita da utilizaccedilatildeo do include Apwebexch
Comandos - WEB EXTENDED END
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED END ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando para fechar uma seccedilatildeo aberta pelo comando WEB EXTENDED INIT Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do
comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
Comandos - WEB EXTENDED INIT
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED INIT ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando juntamente com o comando WEB EXTENDED END quando montamos uma funcatildeo ( Web Function ) que foi construiacuteda para ser chamada a partir de um Web Browser quando nos
utilizamos das funccedilotildees de Infra-Estrutura APWEBEX
Atraveacutes dele eacute realizada uma preacute-validaccedilatildeo que certifica que a execuccedilatildeo da funccedilatildeo somente seraacute realizada caso a thread atual seja realmente uma Thread montada no ambiente WEBEX aleacutem de podermos inserir uma
preacute-validaccedilatildeo (START) de execuccedilatildeo especiacutefica para esta funccedilatildeo
Caso seja especificada uma funccedilatildeo na claacuteusula START a mesma deveraacute retornar uma String Retornando uma String em branco o processamento da funccedilatildeo original seraacute efetuado normalmente Caso a funccedilatildeo retorne
uma string natildeo-vazia esta string seraacute retornada para a variaacutevel cHtml e o processamento do programa seraacute desviado para a linha do coacutedigo-fonte imediatamente posterior agraveo comando WEB EXTENDED END
Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
12
Infra-Estrutura APWEBEX - EnvUserAPL - Exemplo de Uso com ERP
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo praacutetico abaixo utilizamos em um coacutedigo fonte Advpl os pontos de entrada disponibilizados na Infra-Estrutura APWEBEX para realizar a preparaccedilatildeo de um ambiente ERP Reset de Ambiente
finalizaccedilatildeo de Thread finalizaccedilatildeo de sessions por time-out e customizaccedilatildeo de mensagem de erro para o desenvolvimento de um projeto de Web Site integrado com o ERP Microsiga
Devemos adotar como padratildeo para projetos que utilizam APWEBEX a criaccedilatildeo do arquivo EnvUserapl especificamente para a definiccedilatildeo dos pontos de entrada utilizados pela Infra-Estrutura
APWEBEX e devemos apenas compilar os fontes dos pontos de entrada realmente necessaacuterios agraveo projeto INCLUDE PROTHEUSCH
INCLUDE APWEBEXCH
====================================================================================
Exemplo de Arquivo de Lib de Projeto APWEBEX utilizando os pontos de entrada
da lib para preparaccedilatildeo de ambiente reset de ambiente e tratamento de erro
utilizando APWEBEX em conjunto com o ERP Microsiga
====================================================================================
----------------------------------------------------------------------------
Ponto de Entrada StartWebEx( NIL ) =gt T ou F
Ponto de entrada executado na inicializaccedilatildeo de cada Working Thread ( ONSTART )
Eacute a responsaacutevel por preparar o ambiente para atender agraves requisiccedilotildees WEB de links apw
Natildeo recebe paracircmetro algum da lib e deve retornar T caso tenha inicialziado com sucesso
ou F em caso de falha de inicializaccedilatildeo
----------------------------------------------------------------------------
USER Function StartWebEx()
Prepara o Ambiente ERP
PREPARE ENVIRONMENT
EMPRESA 01
FILIAL 01
TABLES ZX1ZX2ZX3ZX4ZZ1ZZ2ZZ3ZZ4ZZ5
Return T
-------------------------------------------------------------------------------
Ponto de Entrada ConnectWebEx(cFnName) =gt cHtml ou
Ponto de entrada executado imediatamente antes do processamento de uma requisiccedilatildeo de um link APW
Recebe como paracircmetro o nome da funccedilatildeo a ser executada passada no link
Deve retornar uma String que seraacute retornada ao ao Browser solicitante Caso retorne uma string
em branco (vazia) a funccedilatildeo originalmente solicitada eacute executada pela lib
Caso contraacuterio a funccedilatildeo original natildeo eacute executada e a string retornada eacute enviada ao Browser
-------------------------------------------------------------------------------
USER Function ConnectWebEx(cFnName)
Local cHtmlConn =
conout(Vou executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada ResetWebEx(cFnName) =gt cHtml ou
Funccedilatildeo chamada imediatamente Apos a execuccedilatildeo de uma requisiccedilatildeo APW
Recebe como paracircmetro o nome da funccedilatildeo executada e permite tambeacutem que seja acrescentado
algo a mais no Html a ser retornado ao Browser
-------------------------------------------------------------------------------
USER Function ResetWebEx(cFnName)
Local cHtmlConn =
conout(Terminei de executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada FINISHWEBEX()
Funccedilatildeo chamada no fechamendo do ambiente de uma working Thread Apos a execuccedilatildeo deste
a Thread utilizada eacute eliminada da memoacuteria
-------------------------------------------------------------------------------
USER Function FINISHWEBEX()
conout(Finalizando a Working Thread)
Return
-------------------------------------------------------------------------------
Ponto de Entrada ENDSESSION(cSessionId) =gt NIL
Ponto de entrada chamado em uma working Thread quando a session de um usuaacuterio seraacute
eliminada da memoacuteria por time-out Recebe como parametro o Id de sessions de usuario
que estaacute sendo finalizado
-------------------------------------------------------------------------------
USER Function ENDSESSION(cSessionId)
Conout(Sesssion +cSessionId+ limpa da memoacuteria)
Return
----------------------------------------------------------------------------
Ponto de Entrada WebExError(ecErrorLogcHtml) =gt cCustomHtml ou
Esta funcao eacute chamada pela rotina de tratamento de erro WEBEX quando ocorre um erro fatal
e permite que seja retornado um Html de tratamento de erro diferenciado Ela recebe como
parametro o objeto do erro a mensagem ASCII que foi acrescentada ao arquivo errorlog
e o Html original montado pela rotina de tratamento de erro default
IMPORTANTE Por sem um ponto de entrada executado em um momento criacutetico (tratamento
de erro ) esta funccedilatildeo deve ser o mais suscinta e simples possiacutevel natildeo utilizando
sessions banco de dados etc
----------------------------------------------------------------------------
USER Function WebExError(oErrorcErrorLogcHtml)
Local cCustomHtml =
Monta mensagem de erro mais amigavel
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
13
Ocorreu um erro inesperado no
cCustomHtml += processamento desta paacutegina O Administrador do sistema seraacute notificado desta
cCustomHtml += ocorrecircncia Recomendamos fortemente que esta janela do navegador seja cCustomHtml += fechada e uma nova janela seja aberta para retornar agrave navegaccedilatildeo do site
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
Return cCustomHtml
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Nos exemplo abaixo utilizamos a funccedilatildeo escape() para formatar paracircmetros para inserir em uma URL cUrl = httplocalhostwebinfoapw
cPAram1 = Teste de Parametro 01-02
cPAram2 = reserva
cPAram3 = 1+2+3
cUrl += Par01= + escape(cPAram1) + ampPAr02= + escape(cPAram2) + ampPar03= + escape(cPAram3)
O conteudo de cUrl deveraacute ser httplocalhostwebinfoapwPar01=Teste20de20Parametro2001-02ampPAr02=23reserva23ampPar03=12B22B3
proacuteprio para a monyahem de um link
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETJOBPROFSTRING
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
O exemplo abaixo executado em uma thread iniciada a partir de um JOB WEBEX recupera algumas configuraccedilotildees atuais em uso para este JOB cJobType = GetJobProfString(type(empty) )
cInstances = GetJobProfString(Instances(empty) )
cInacTime = GetJobProfString(InactiveTimeout(default) )
cExpTime = GetJobProfString(ExpirationTime(default) )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETPARVALUE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo satildeo montados dois arrays multi-dimensionais com 2 dimensotildees e satildeo realizadas buscas nos mesmos explorando todas as possibilidades de uso da funccedilatildeo GetParValue() Local aTeste1 =
Local aTeste2 =
Aadd(aTeste1AliasTMP1)
Aadd(aTeste1Relacao2x3)
Aadd(aTeste2AliasTMP2)
Aadd(aTeste2Info---Informaccedilatildeo adicional---)
Busca apenas no array ateste1
cAlias = GetParValue(ALIASaTeste1)
cRelacao = GetParValue(RELACAOaTeste1)
cInfo = GetParValue(INFOaTeste1)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) (nao encontrado)
Busca apenas no array ateste2
cAlias = GetParValue(ALIASaTeste2)
cRelacao = GetParValue(RELACAOaTeste2)
cInfo = GetParValue(INFOaTeste2)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP2
conout(cRelacao) (nao encontrado)
conout(cInfo) ---Informaccedilatildeo Adicional---
Busca em ambos os Arrays
Primeiro no aTeste1 e depois no aTeste2
cAlias = GetParValue(ALIASaTeste1aTeste2)
cRelacao = GetParValue(RELACAOaTeste1aTeste2)
cInfo = GetParValue(INFOaTeste1aTeste2)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) ---Informaccedilatildeo Adicional---
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo abaixo geramos a string com o DUMP de um arquivo HTML salvo na pasta WEB a partir do RootPath do Environment O Dump do arquivo seraacute mostrado no Console do servidor e no Web
Browser que solicitou a funccedilatildeo U_DumpTestapw
include protheusch
include apwebexch
User Function DumpTest()
Local cHtml =
Local cTXTFile =
Local cDump =
WEB EXTENDED INIT cHtml
14
Le o arquivo
cTTXFile = memoread(WebDefaulthtm)
Gera a string com o Dump do arquivo
cDump = HExStrDump(cTTXFile)
Mostra o Dump no console
conout(cDump)
Gera HTML para a visualizaccedilatildeo do DUMP
cHtml = VarInfo(DUMPHtmlnotags(cDump)tf)
WEB EXTENDED END
Return cHtml
Exemplo do Texto mostrado no Console
HexSTRDump ( String 237 Start 1 Length 237 )
-------------------------------------------------------------------------------
3C 48 54 4D 4C 3E 3C 48 45 41 44 3E 0D 0A 3C 4D | ltHTMLgtltHEADgt__ltM
45 54 41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 | ETA HTTP-EQUIV=
43 6F 6E 74 65 6E 74 2D 54 79 70 65 22 20 63 6F | Content-Type co
6E 74 65 6E 74 3D 22 74 65 78 74 2F 68 74 6D 6C | ntent=texthtml
22 0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 | __ltMETA HTTP-EQ
55 49 56 3D 22 70 72 61 67 6D 61 22 20 63 6F 6E | UIV=pragma con
74 65 6E 74 3D 22 6E 6F 2D 63 61 63 68 65 22 3E | tent=no-cachegt
0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 55 | __ltMETA HTTP-EQU
49 56 3D 22 45 78 70 69 72 65 73 22 20 63 6F 6E | IV=Expires con
74 65 6E 74 3D 22 2D 31 22 3E 0D 0A 3C 4D 45 54 | tent=-1gt__ltMET
41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 52 65 | A HTTP-EQUIV=Re
66 72 65 73 68 22 20 63 6F 6E 74 65 6E 74 3D 22 | fresh content=
30 3B 20 75 72 6C 3D 2F 77 5F 77 45 78 30 30 30 | 0 url=w_wEx000
2E 61 70 77 22 3E 3C 2F 48 45 41 44 3E 0D 0A 3C | apwgtltHEADgt__lt
2F 48 45 41 44 3E 3C 2F 48 54 4D 4C 3E | HEADgtltHTMLgt
-------------------------------------------------------------------------------
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HTMLNOTAGS
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo a funccedilatildeo HtmlNoTags eacute utilizada para permitir a utilizaccedilatildeo de caracteres especiais no conteuacutedo de um input para um formulaacuterio Html Local cHtml =
Local cInput =
Conteudo do campo com tags HTML intepretaacuteveis
cInput =
Ao montar o Input aplicar a HtmlNoTags() ao conteudo do mesmo
cHtml +=
+HtmlNoTags(cIn
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
15
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos a funccedilatildeo RetSqlAce para montar uma query de busca por tiacutetulo de uma determinada informaccedilatildeo considerando todas as possibilidades de acentuaccedilatildeo independentemente de como o
banco foi alimentado eou a string de busca foi digitada
IMPORTANTE Na expressatildeo da Query o campo da tabela deve ser passado pela funccedilatildeo LOWER do BAnco pois a funccedilatildeo retsqlace monta a string para busca com letras minuacutesculas cFind = acentuaccedilatildeo
cQuery = SELECT FROM + RetSqlTab(ZZ1)
cQuery += WHERE LOWER(ZZ1_TITULO) LIKE +RetSqlAce(cFind)+
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VALTOSQL
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = + ValToSql(02)
cQuery += AND FA2_DTINC lt= + ValToSql(date())
O exemplo acima caso escrito de forma a realizar as conversotildees especiacuteficas para cada tipo de conteuacutedo seria o equivalemte ao coacutedigo abaixo
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = 02
cQuery += AND FA2_DTINC lt= + DTOS( date() )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VARINFO
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo eacute gerada uma string HTML com as informaccedilotildees do retorno da chamada de duas funccedilotildees baacutesicas da Linguagem Advpl User Function InfoTeste()
Local cHtml =
cHtml += VarInfo(lsquoDatersquodate())
cHtml += VarInfo(lsquoTimelsquotime())
Return cHtml
Deve ser gerado um echo no Console do Servidor parecido com este abaixo
Date -gt D ( 10) [08122003]
Time -gt C ( 8) [201748]
Infra-Estrutura APWEBEX - Exemplo das funccedilotildees de acentuaccedilatildeo ApWebEX
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo vemos a diferenccedila de comportamento entre as funccedilotildees baacutesicas da Linguagem Advpl Upper() e Lower() e a funccedilatildeo de Infra-estrutura Capital() em relaccedilatildeo agraves funccedilotildees da Infra-estrutura
APWEBEX UpperAce() LowerAce() e CApitalAce() quando utilizamos caracteres acentuados cRetorno =
cFrase = natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
cRetorno += Original + cFrase + CRLF
cRetorno += Upper() + upper(cFrase) + CRLF
cRetorno += Lower() + lower(cFrase) + CRLF
cRetorno += Capital() + capital(cFrase) + CRLF
cRetorno += UPPERACE() + UPPERACE(cFrase) + CRLF
cRetorno += LOWERACE() + LOWERACE(cFrase) + CRLF
cRetorno += CAPITALACE() + CAPITALACE(cFrase) + CRLF
Neste ponto a variaacutevel cRetorno deveraacute conter
Original natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
Upper() NatildeO Haacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSotildeES PARA O INEXPLICaacuteVEL
Lower() natildeo haacute explicaCcedilOtildees considerando excessotildees para o inexplicaacutevel
Capital() Natildeo Haacute ExplicaCcedilOtildees Considerando Excessotildees Para O Inexplicaacutevel
UPPERACE() NAtildeO HAacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSOtildeES PARA O INEXPLICAacuteVEL
LOWERACE() natildeo haacute explicaccedilotildees considerando excessotildees para o inexplicaacutevel
CAPITALACE() Natildeo Haacute Explicaccedilotildees Considerando Excessotildees Para O Inexplicaacutevel
Infra-Estrutura APWEBEX - Exemplos das funccedilotildees NTOC e CTON
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos as funccedilotildees cton e ntoc para realizar conversotildees de nuacutemeros em base decimal para outras bases numeacutericas e vice-versa
16
nNum1 = CTON(011010012) Converte binaacuterio para decimal
nNum2 = CTON(00DA25FE16) Converte Hexadecimal para decimal
nNum1++ Soma 1 ao numero em nNum1
nNum2++ Soma 1 ao numero em nNum2
cNum1 = NtoC(nNum128) Converte para binaacuterio novamente
cNum2 = NtoC(nNum2168) Converte para Hexa novamente
-------------------------------------------------------------------------
Ao final do programa cNum1 seraacute 01101010 e cNum2 seraacute 00DA25FF
-------------------------------------------------------------------------
APWEXADDERR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
APWEXADDERR ( [ cTitulo ] [ cInfo ] ) --gt T
Paracircmetros
Argumento Tipo Descriccedilatildeo
cTitulo Caracter cTitulo corresponde a um tiacutetulo identificador da informaccedilatildeo Deve ter no maacuteximo 20 caracteres Os caracteres acima da vigeacutesima posiccedilatildeo seratildeo
ignorados
cInfo Caracter cInfo corresponde agrave Informaccedilatildeo a ser acrescentada ao ERRORLOG em caso de erro
Retorno
Tipo Descriccedilatildeo
Loacutegico Esta funccedilatildeo sempre retorna T
Descriccedilatildeo
Atraveacutes da funccedilatildeo ApWExAddErr() podemos acrescentar uma string de informaccedilotildees adicionais em um buffer em memoacuteria descarregado na geraccedilatildeo do ERRORLOG no caso de uma ocorrecircncia de erro fatal na
working thread atual
Caso a funccedilatildeo seja chamada sem nenhum paracircmetro a uacuteltima ocorrecircncia acrescentada pela funccedilatildeo eacute eliminada da pilha interna de informaccedilotildees
ATENCcedilAtildeO Esta funccedilatildeo deve ser apenas utilizada em casos de necessidade de obtenccedilatildeo de informaccedilotildees especiacuteficas acerca de uma ocorrecircncia de erro natildeo reproduzida em ambiente de testes eou natildeo depuraacutevel pois
seu uso desnecessaacuterio prejudica a performance da aplicaccedilatildeo final
CAPITALACE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CAPITALACE ( lt cString gt ) --gt cStrCapital
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida
Retorno
Tipo Descriccedilatildeo
Caracter String resultante convertida para munuacutesculo com as primeiras letras das palavras significantes em maiuacutesculo
Descriccedilatildeo
Semelhante agrave funccedilatildeo de Infra-estrutura Capital() poreacutem converte tambeacutem caracteres acentuados
A funccedilatildeo CapitalAce() converte todos os caracteres de uma String para minuacutesculo e a primeira letra das palavras significantes para maiuacutesculo semelhante agrave funccedilatildeo Capital() poreacutem considera e converte tambeacutem
caracteres acentuados em OEM eou ANSI
CTON
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CTON ( lt cString gt lt nBase gt ) --gt nNumero
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave representaccedilatildeo de um nuacutemero em outra base numeacuterica compreendida entre 2 e 36
nBase Numeacuterico nBase corresponde agrave base numeacuterica utilizada pelo numero representado em cString
Retorno
Tipo Descriccedilatildeo
Numeacuterico Nuacutemero recebido como paracircmetro em notaccedilatildeo decimal ( Base 10 )
Descriccedilatildeo
Converte um nuacutemero representado em String de base 2 a 36 para um nuacutemero em base decimal (10)
Observaccedilatildeo Importante
Satildeo considerados caracteres vaacutelidos para compor um nuacutemero de base 36 os 10 algarismos numeacutericos de 0 a 9 e os 26 caracteres alfabeacuteticos maiuacutesculos compreendidos entre A e Z Quaisquer caractetes presentes na
String de paracircmetro fora desta faixa de dados eou fora da base ( por exemplo uma conversatildeo de string base 2 - binaacuterio - da string 01001020 ) retornaraacute -1 ( menos um )
ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
ESCAPE ( lt cString gt ) --gt cEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute uma sequecircncia de caracteres a ser processada
Retorno
Tipo Descriccedilatildeo
Caracter cEscaped corresponde agrave string original com os caracteres reservados utilizando a notaccedilatildeo HH
Descriccedilatildeo
A funccedilatildeo Escape() deve ser utilizada para realizar conversotildees de caracteres especiais e reservados quando da necessidade de passagem de paracircmetros via URL
A sintaxe de uma requisiccedilatildeo via URL para a passagem de paracircmetros eacute
(link)param=conteudoampparam2=conteudo2amp
Quando passamos paracircmetros via url devemos tomar o cuidado de natildeo utilizar caracteres reservados e especiais nos nomes e conteuacutedos de paracircmetros Para realizar estas conversotildees utilizamos a funccedilatildeo Escape()
17
EXECINPAGE
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXECINPAGE ( lt cAPHPage gt ) --gt cHTMLPage
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAPHPage Caracter Corresponde agraveo nome do APH que deve ser executado sem a extensatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cHtmlPage corresponde agrave string HTML gerada pela paacutegina APH AHU
Descriccedilatildeo
Atraveacutes da funccedilatildeo ExecInPage() executamos uma paacutegina APH passada como paracircmetro A funccedilatildeo deveraacute retornar a String HTML correspondente agrave paacutegina processada
Poreacutem a funccedilatildeo ExecInPage() realiza tratamentos adicionais padratildeo relacionaodo agraveo comportamento dos Projetos WEB referentes agrave customizaccedilotildees da segunte maneira
1 Primeiro eacute verificado se existe uma paacutegina AHU compilada com o nome cAPHPage Caso exista a mesma seraacute executada pela execinpage
2 Caso natildeo exista AHU com este nome eacute procurado pelo APH Caso o APH exista o mesmo seraacute executado pela ExecInPage
3 Caso natildeo existam no RPO atual o APH nem o AHU com o nome especificado no paracircmetro cAPHFile o processamento eacute abortado com a ocorrecircncia de erro [APWEXERR_0007] APH page
[ltcAPHPagegt] not found in RPO 4 Antes de executar o APH ou AHU identificado nos passos anteriores eacute verificado se existe um ponto de entrada ( User Function ) compilado com o mesmo nome do APH Caso exista o ponto de
entrada eacute executado Ele deveraacute retornar uma String HTML Se for retornada alguma string a funccedilatildeo retorna a tring retornada e natildeo processa o APH AHU Observaccedilatildeo A funccedilatildeo ExecInPage natildeo iraacute executar este
tratamento da User Function com o nome de cAPHPage caso a funccedilatildeo ExecInPage() esteja sendo executada atraveacutes de uma USER FUNCTION
Observaccedilatildeo Importante - Envio parcial de HTML agraveo Browser A funccedilatildeo ExecInpage() juntamente com o APH compilado ao serem processados iratildeo tentar enviar o conteuacutedo HTML para o Browser solicitante durante o processamento de modo que a funccedilatildeo normalmente iraacute
retornar uma String vazia
Caso seja necessaacuteria a execuccedilatildeo de uma paacutegina APH ou AHU e o natildeo-envio da mesma para o Browse por exemplo para a geraccedilatildeo de um coacutedigo HTML a ser enviado via e-mail revemos utilizar a funccedilatildeo
HttpSetPart() realizando uma chamada da mesma antes da ExecInPage() passando o paracircmetro F para desabilitar temporariamente o envio de HTML simultacircneo ao Browser e apoacutes a execuccedilatildeo da ExecInPage()
devemos re-habilitar o envio simultacircneo atraveacutes da chamada da funccedilatildeo HttpSetPart() com o paracircmetro T
EXISTPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTPAGE ( lt cAphFile gt ) --gt lFound
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAphFile Caracter Nome do arquivo APH sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Caracter Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistPage() para identificarmos no ambiente atual se um determinado arquivo APH encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistPage(teste)
conout(testeaph compilado neste RPO)
Else
conout(testeaph NAO compilado neste RPO)
Endif
EXISTUSRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTUSRPAGE ( lt cAhuFile gt ) --gt lExist
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAhuFile Caracter Nome do arquivo AHU sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Loacutegico Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistUSRPage() para identificarmos no ambiente atual se um determinado arquivo AHU encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistUSRPage(teste)
conout(testeahu compilado neste RPO)
Else
conout(testeahu NAO compilado neste RPO)
Endif
GETJOBPROFSTRING
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETJOBPROFSTRING ( lt cKey gt lt cDefault gt ) --gt cKeyValue
Paracircmetros
Argumento Tipo Descriccedilatildeo
cKey Caracter cKey corresponde agrave chave da seccedilatildeo de configuraccedilatildeo da Working Thread atual a ser retornada
cDefault Caracter Valor default (string) a ser retornado pela funccedilatildeo caso a chave especificada natildeo sehja encontrada no INI
Retorno
Tipo Descriccedilatildeo
Caracter Conteudo da Chave solicitada Caso a chave natildeo seja encontrada eacute retornado o conteudo de cDefault Caso esta funccedilatildeo natildeo seja executada a partir de uma Working Thread ela
18
retornaraacute uma string em branco ()
Descriccedilatildeo
Atraveacutes desta funccedilatildeo podemos recuperar as configuraccedilotildees do Job da Working Thread atual
GETWEXVERSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETWEXVERSION ( ) --gt cBuildId
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave String Identificadora da versatildeo no formato ltLIBgt VAAMMDDHHmm Vide Tabela A
Descriccedilatildeo
Esta funccedilatildeo natildeo requer argumentos e retorna o Identificador do build versatildeo de Release das funccedilotildees de Infra-Estrutura APWEBEX
Observaccedilatildeo A data informada pela versatildeo natildeo corresponde agrave ultima compilaccedilatildeo do RPO de um determinado Projeto WEB mas sim agrave data de release da LIB de Infra-Estrutura APWEBEX
Tabela A
Simbolo Descriccedilatildeo
AA Ano de geraccedilatildeo da Lib
MM Mecircs da geraccedilatildeo da Lib
DD Dia da geraccedilatildeo da Lib
HH Horaacuterio da geraccedilatildeo da Lib
mm Minutos do Horaacuterio de Geraccedilatildeo da Lib
(HTTP) Indica que a versatildeo foi compilada com a configuracatildeo de envio progressivo de HTML simultacircneo para o Browse Esta opccedilatildeo eacute imprescindiacutevel para projetos que se utilizam desta LIB
Por exemplo
APWEBEX Version 30312021900 (HTTP)
HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HEXSTRDUMP ( lt cString gt [ nStart ] [ nLength ] ) --gt cHExDump
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser lida para a geraccedilatildeo do Dump
nStart Numeacuterico Corresponde agrave posiccedilatildeo inicial de cString a ser considerada para a geraccedilatildeo do Dump a partir da posiccedilatildeo 1 Caso este paracircmetro natildeo seja informado o
Default eacute a posiccedilatildeo 1 da string
nLength Numeacuterico nLength corresponde agraveo tamanho a ser considerado para a geraccedilatildeo do DUMP a partir da posiccedilatildeo inicial recebida em nStart Caso este paracircmetro natildeo
seja informado eacute considerado o tamanho ateacute o final da String
Retorno
Tipo Descriccedilatildeo
Caracter O retorno da funccedilatildeo corresponde agrave uma string Advpl formatadas em 16 bytes em hexadecimal por linha mais o separador pipe (|) mais os 16 caracteres em Ansi Os caracteres de
controle ( codigo ascii menor que 32 ) satildeo convertidos para visualizaccedilatildeo para o caractere underline (_)
Descriccedilatildeo
Atraveacutes da funccedilatildeo HexStrDump() podemos gerar uma string em Advpl em formato de Dump Hexadecimal a partir da string informada como paracircmetro a partir de uma determinada posiccedilatildeo da string considerando um
nuacutemero de bytes informado
Caso os paracircmetros nPosIni e nTamString natildeo sejam informados o dump gerado corresponde a string recebida como paracircmetro em sua totalidade
Observaccedilatildeo
Natildeo devemos pasar para a funccedilatildeo HexStrDump uma string maior que 240 Kb pois a geraccedilatildeo da String de dump eacute realizada em memoacuteria sendo a string final gerada em meacutedia 42 vezes maior que a string passada
como paracircmetro Caso a string passada como paracircmetro seja maior que 240 Kb a execuccedilatildeo seraacute abortada com a ocorrecircncia de erro fatal string size overflow
HTMLNOTAGS
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HTMLNOTAGS ( lt cStrHtml gt ) --gt cStrNoTags
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrHtml Caracter cStrHtml corresponde a uma String que natildeo pode conter caracteres Html interpretaacuteveis
Retorno
Tipo Descriccedilatildeo
Caracter String original com os caracteres interpretaacuteveis Html lt gt amp convertidos para caracteres natildeo-interpretaacuteveis
Descriccedilatildeo
A Funccedilatildeo HTMLNOTAGS converte as Tags interpretaacuteveis de uma String HTML para TAGS natildeo interpretaacuteveis Este recurso eacute normalmente utilizado quando precisamos montar um input Html com um conteudo que
nao pode ser interpretado pelo browser como uma Tag Esta funccedilatildeo apenas converte os caracteres lt ( menor que ) gt ( maior que ) amp ( e comercial ) e ldquo ( aspas duplas )
Recomenda-se fortemente que na montagem do value de um input html o conteuacutedo do mesmo seja colocado entre aspas duplas pois caso o conteuacutedo do value inicial do campo contenha aspas simples (
natildeo convertidas pela funccedilatildeo HtmlNoTags) isto poderaacute ocasionar perda de dados e erro de sintaxe no formulaacuterio Html
HTTPISWEBEX
Revisatildeo 12122003
Sintaxe
HTTPISWEBEX ( ) --gt lIsApWEBEX
Retorno
Tipo Descriccedilatildeo
Loacutegico A funccedilatildeo retornaraacute T caso o ambiente de execuccedilatildeo atual seja uma Working Thread WEBEX inicializada pela funccedilatildeo de infra-estrutura STARTWEBEX
Descriccedilatildeo
Atraveacutes da funccedilatildeo HttpIsWebEx() eacute possiacutevel identificarmos se o programa atual estaacute sendo executado atraveacutes de uma Working Thread inicializada utilizando-se as funccedilotildees de Infra-Estrutura APWEBEX
ISEMAIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
19
Sintaxe
ISEMAIL ( lt cEMail gt ) --gt lEmailOk
Paracircmetros
Argumento Tipo Descriccedilatildeo
cEMail Caracter cEmail corresponde a string a ser analizada contendo um e apenas um endereccedilo de e-mail
Retorno
Tipo Descriccedilatildeo
Caracter Retorna T caso a sring recebida como paracircmetro atenda agraves definiccedilotildees de nomenclatura vaacutelidos para um endereccedilo de e-mail
Descriccedilatildeo
Utilizada para validar e-mails em Advpl a funccedilatildeo ISEMAIL recebe como paracircmetro uma string contendo um e-mail retornando T caso a string esteja em um formaacuteto vaacutelido respeitando a regra para nomenclatura de
endereccedilos de e-mail
Regra Um e-mail eacute considerado vaacutelido caso seja iniciado por um caracter apenas contenha caracteres asc de a a z e 0 a 9 e os caracteres (arroba) (ponto) - ( hiacutefen) ou _ (underline) e deve conter uma e
apenas uma arroba e no minimo um ponto apos a arroba intercalado por um caracter
LOWERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
LOWERACE ( lt cString gt ) --gt cStrLower
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a sequecircncia de caracteres a ser convertida para letras minuacutesculas
Retorno
Tipo Descriccedilatildeo
Caracter String original em letras minuacutesculas
Descriccedilatildeo
A Funccedilatildeo LOWERACE converte todos os caracteres de uma String para ldquominusculordquo semelhante agrave funccedilatildeo LOWER() poreacutem considera e converte tambeacutem caracteres acentuados em ANSI
NTOC
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
NTOC ( lt nNumero gt lt nBase gt lt nTamStr gt ) --gt cString
Paracircmetros
Argumento Tipo Descriccedilatildeo
nNumero Numeacuterico nNumero eacute o valor numeacuterico em base devimal a ser convertido
nBase Numeacuterico nBase corresponde agrave base binaacuteria a ser utilizada para converter nNumero
nTamStr Numeacuterico nTamStr corresponde ao tamanho da string representando o numero na base desejada
Retorno
Tipo Descriccedilatildeo
Caracter cString corresponde ao numero convertido para a base numeacuterica especificada como paracircmetro
Descriccedilatildeo
A Funccedilatildeo NTOC converte um nuacutemero em notaccedilatildeo decimal para um nuacutemero representado por String utilizando uma base numeacuterica entre 2 e 36 preenchendo-o com ldquo0rdquo (zeros) agrave esquerda do tamanho especificado
Observaccedilatildeo O Paracircmetro nBase deve ser especificado com um nuacutemero entre 2 e 36 Caso seja passado como paracircmetro um nuacutemero base fora desta faixa o processamento eacute abortado com a ocorrecircncia de erro
[APWEXERR_0022] INVALID NTOC BASE [X] onde ltXgt foi a base passada como argumento
REDIRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
REDIRPAGE ( lt cUrl gt [ cTarget ] [ nTime ] ) --gt cScript
Paracircmetros
Argumento Tipo Descriccedilatildeo
cUrl Caracter Link para onde o script deve apontar o redirecionamento
cTarget Caracter Destino do redirecionamento Caso natildeo especificado o default eacute _self
nTime Numeacuterico Tempo (em segundos) de delay antes do redirecionamento ser executado
Retorno
Tipo Descriccedilatildeo
Caracter Script Html JavaScript que ao ser executado no Browser (client) chama a paacuteginaobjeto chamado no Link
Descriccedilatildeo
A funccedilatildeo RedirPage eacute utilizada quando desejamos devolver ao Browser um script que ao ser executado redirecionaraacute o Browser agrave abertura de um link passado como paracircmetro
RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLACE ( lt cStrFind gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrFind Caracter cStrFind corresponde agrave sequecircncia de caracteres a ser procurada podendo conter caracteres maiuacutesculos e minuacutesculos com ou sem acentuaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cStrQuery corresponde agrave string de busca a ser utilizada na query utilizando caracteres em minuacutesculo
Descriccedilatildeo
A funccedilatildeo RetSqlAce eacute utilizada para auxiliar de montagem de querys de busca de caracteres acentuados em bases de dados A funccedilatildeo automaticamente trata a string original removendo os acentos convertendo todos
os caracteres para minuacutesculas e trocando todas as vogais e cedilhas da string original por uma sequecircncia de caracteres acentuados em munuacutescilas para busca posicional
20
RETSQLCOND
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLCOND ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlCond() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga e o Makira Hypersite utilizando aliases de 3
caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar a filial atual ( xFilial ) de acordo com o modo do arquivo ( X2_MODO ) e para sempre desconsiderar
registros deletados
Observaccedilotildees
Esta funccedilatildeo foi mantida apenas por compatibilidade pois a ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do
banco para efeitos de performance Para ganharmos performance nas Querys devemos ao inveacutes de utilizar a funccedilatildeo RetSqlCond() utilizar como primeira clauacutesula WHERE o retorno da funccedilatildeo RetSqlFil() (
comparaccedilatildeo dos campos _FILIAL os primeiros do(s) iacutendice(s) do ERP ) que retorna apenas as comparaccedilotildees de Filial e por uacuteltimo a funccedilatildeo RetSqlDel que retorna o script para verificaccedilatildeo dos campos deletados (
que eacute o uacuteltimo campo das chaves de iacutendice do ERP utilizando TopConnect )
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlCond() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de
modo que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute
retorna os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLDEL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLDEL ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlDel() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo D_E_L_E_T_ da(s) tabela(s) passada(s) como paracircmetro
Observaccedilotildees
A ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do banco para efeitos de performance Para ganharmos performance
nas Querys devemos utilizar a funccedilatildeo RetSqlDEl() na montagem das ultimas consistecircncias da claacuteusula WHERE de uma Query
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlDel() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo
que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna
os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLFIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLFIL ( lt cAliases gt [ cCompFil ] ) --gt cSQlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
cCompFil Caracter
Atraveacutes de cCompFil eacute possiacutevel especificar uma Filial FIXA a ser comparada com os campos FILIAL do(s) alias(es) passados no paracircmetro cAliases
Caso natildeo informado os campos _FILIAL da(s) tabela(s) passadas como paracircmetro em cAliases seratildeo comparados com o retorno da funccedilatildeo xFilial() de
cada alias respectivamente
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo filial atual ( xFilial ) de acordo com o modo de abertura do arquivo no ERP ( X2_MODO )
Observaccedilatildeo
Devemos atentar ao fato que a funccedilatildeo RetSqlFil() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo que estes
alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna os
nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLTAB
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLTAB ( lt cAliasList gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliasList Caracter String contendo um ou mais alias separados por virgula a terem seus nomes fiacutesicos determinados
Retorno
Tipo Descriccedilatildeo
Caracter String contendo nomes fisicos e alias identificadores dos aliases recebidos como paracircmetro
Descriccedilatildeo
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
9
HttpHeadIn-gtREMOTE_ADDR
Retorna uma string no formato nnnnnnnnnnnn o IP da estaccedilatildeo que realizou a requisiccedilatildeo
httpHeadIn-gtREMOTE_PORT
Retorna um valor Advpl numeacuterico informando a porta utilizada para realizar a requisiccedilatildeo
06 Alias virtual HttpHeadOut
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 LIB WEBEX
Atraveacutes deste alias virtual de retorno podemos alterar ou criar um paracircmetro no Header de retorno HTTP do Protheus a ser devolvido agraveo Browser solicitante de uma requisiccedilatildeo de processamento
Trata-se portanto de uma propriedade de retorno disponiacutevel apenas quando a funccedilatildeo Advpl eacute executada atraveacutes de uma requisiccedilatildeo http via link apw utilizando a configuraccedilatildeo de Working Threads WEBEX
A criaccedilatildeo de uma linha no Header HTTP merece uma atenccedilatildeo especial pois para que a operaccedilatildeo realizada com sucesso o header deve ser criado antes de haver qualquer processamento de APH AHU pois neste caso
o Header de Retorno HTTP jaacute teria sido enviado agraveo browser solicitante
07 Alias virtual HttpSession
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do alias virtual httpSession podemos criar e consultar variaacuteveis do tipo session relacionadas agraveo usuaacuterio que realizou a requisiccedilatildeo atraveacutes do Browser
Para diferenciar os usuaacuterios que estatildeo navegando num site o Protheus busca por um cookie identificador de usuaacuterio retornado para o browser a cada requisiccedilatildeo de link APW chamado SESSIONID Caso o Protheus
receba este cookie ele identifica quais sessions pertencem a este usuaacuterio
Quando um usuaacuterio realiza a primeira requisiccedilatildeo http ao Protheus o Protheus natildeo recebe o cookie identificador e automaticamente inicializa um identificador de sessions para o mesmo retornando o identificador ao
Browser via Header HTTP Este identificador pode ser recuperado em uma funccedilatildeo advpl atraveacutes de httpSession-gtSESSIONID
Quando criamos uma variaacutevel de session ela pode ser acessada nas proacuteximas requisiccedilotildees provenientes deste mesmo usuaacuterio Caso uma variaacutevel de session consultada natildeo exista ela retorna o valor NIL (nulo)
Vejamos os exemplos abaixo
Criando variaacuteveis Session HttpSession-gtUserId = 123
HttpSession-gtUserName = U_GetUserName()
Nas linhas acima criamos uma session para o usuaacuterio atual chamada UserId com o conteuacutedo do tipo String e criamos outra session chamada UserName com o retorno da funccedilatildeo U_GetUserName()
Consultando variaacuteveis Session Ao consultar uma variaacutevel session sempre devemos prever que a mesma natildeo pode ter sido criada de modo que a consulta pode retornar NIL ou caso a session jaacute exista retornaraacute o valor do tipo que foi atribuiacutedo `a
mesma
If HttpSession-gtUserId = NIL
Session ainda natildeo foi criada Usuaacuterio natildeo estaacute logado
conout(Usuario natildeo estaacute logado)
Else
Session jaacute criada o usuaacuterio estaacute logado
conout(Usuario estaacute logado ID = + HttpSession-gtUserId )
Endif
Exemplo de Funcionamento de Session No exemplo abaixo criamos uma session para identificar quantas vezes o usuaacuterio chamou esta funccedilatildeo especiacutefica Damos o nome da session de MyCounter que iraacute conter um nuacutemero No primeiro acesso do usuaacuterio a
session natildeo existe ( = NIL ) e eacute criada com o valor numeacuterico 1 (um) A partir das proacuteximas requisiccedilotildees realizadas ao Protheus atraveacutes desta paacutegina ( atraveacutes do botatildeo Refresh do Browser por exemplo ) a session jaacute
existe sendo somado o valor 1 agraveo conteuacutedo jaacute existente e devolvido agraveo browser solicitante um Html informando quantas chamadas jaacute foram realizadas por este usuaacuterio
include rwmakech
include apwebexch
User Function TstSession()
Local cHtml = cEcho =
WEB EXTENDED INIT cHtml
If httpSession-gtmycounter = NIL
cEcho = Inicializando contador
Conout(cEcho)
cHtml += cEcho
httpSession-gtmycounter = 1
Else
httpSession-gtmycounter++
cEcho = contador em +str(httpSession-gtmycounter3)
conout(cEcho)
Endif
cHtml += cEcho + lthrgt
WEB EXTENDED END
Return cHtml
Apoacutes compilado o fonte acima e o Server Protheus configurado e iniciado com HTTP habilitado e as working Threads configuradas abra um Web Browser e solicite a url httplocalhostu_tstsessionapw Seraacute
mostrado no Browse a mensagem Inicializando Contador Agora peccedila um Refresh desta tela ao Browser Seraacute devolvida a mensagem Contador em 2 e a cada refresh deste Browser o contador seraacute
incrementado
Uso de Sessions e Paralelismo - Comportamento do Protheus Server
O Protheus Server trata agraves requisiccedilotildees simultacircneas de links APW em paralelo desde que estejam disponiacuteveis o numero de Working Threads necessaacuterio para tal Por exemplo em uma estrutura de Frames onde cada
um deles aponta o SRC (source) para um link apw o Browser envia as trecircs requisiccedilotildees de apw para o Protheus Server e caso extistam 3 working threads disponiacuteveis naquele momento as trecircs requisiccedilotildees satildeo
atendidas em paralelo
Por outro lado se em duas destas trecircs requisiccedilotildees faz-se necessaacuteria a atualizaccedilatildeo eou consulta a uma variaacutevel de Session ( httpsession ) este processamento em paralelo caso natildeo fosse tratado poderia gerar perdas
no conteuacutedo da session caso a mesma session fosse atualizada simultaneamente
Para resolver esta questatildeo de maneira a natildeo sobrecarregar o Servidor com solicitaccedilotildees de Processamento Sequencial ( Critical Sessions ) foi montado um esquema de Lock de Session de Usuaacuterio automaacutetico com
liberaccedilatildeo automaacutetica apoacutes o processamento do APW ou liberaccedilatildeo manual atraveacutes da chamada da funccedilatildeo HttpLeaveSession() antes do processamento ser terminado
Exemplificando a aplicaccedilatildeo praacutetica e funcionamento deste conceito partimos de um ambiente hipoteacutetico utilizando 3 frames onde um usuaacuterio realiza uma requisiccedilatildeo agrave funccedilatildeo que retornaraacute o source HTML da paacutegina
de frames e a mesma ao chegar no Browser faz o mesmo realizar as trecircs requisiccedilotildees simultaneamente todas elas referentes ao mesmo usuaacuterio Poreacutem o primeiro e o segundo frames realizam uma operaccedilatildeo qualquer
com uma ou mais variaacuteveis da Session do usuaacuterio e o terceiro frame realiza um outro processamento que natildeo depende da consulta de nenhuma variaacutevel da Session As trecircs requisiccedilotildees referente a este usuario seratildeo
processadas simultaneamente por working Threads diferentes ( vamos supor que naquele momento haviam trecircs Working Threads disponiacuteveis) poreacutem quando uma das duas working Threads que tentarem acesso agrave uma
variaacutevel de Session daquele usuaacuterio o Servidor verifica se alguma outra Thread estaacute com o flag de acesso agraves sessions deste usuario Se nenhuma outra thread em uso por este usuaacuterio estaacute com a bandeira entatildeo a
thread atual pega a bandeira para ela senatildeo o processamento da Thread eacute congelado no aguardo da liberaccedilatildeo da bandeira
A liberaccedilatildeo da bandeira ocorre automaticamente no retorno da Working Thread para o Browser antes da chamada do ponto de entrada para Reset do Ambiente atraveacutes da chamada na KlibEx da funccedilatildeo
HttpLeaveSession() Caso seja viaacutevel para o usuaacuterio liberar as sessions antes do retorno da funccedilatildeo ele pode utilizar-se da funccedilatildeo httpLeaveSession() no seu fonte sem necessariamente aguardar pelo encerramento
efetivo e reset de ambiente da Working Thread
Logo retornando ao exemplo acima os Frames 1 e 2 iratildeo concorrer pela banceira de atualizaccedilatildeo de conteuacutedo de sessions onde o primeiro frame que a ser executado pegaraacute a bandeira para ele e atualizaraacute a session e
o segundo frame iraacute esperar o primeiro liberar a bandeira para continuar a ser processado e o terceiro frame como natildeo utiliza nenhuma variaacutevel da session seraacute processado sem depender de nenhum dos outros dois
frames anteriores
Quando utilizamos ASP ( Microsoft Active Server Pages ) o mesmo realiza uma serializaccedilatildeo de requisiccedilotildees de paacuteginas ASP por usuaacuterio de modo que caso o mesmo usuaacuterio solicite trecircs frames asp as requisiccedilotildees
de processamento chegaratildeo ao Servidor ASP simultaneamente mas a bandeira de processamento eacute unica por paacutegina asp sendo liberada apenas apos o teacutermino do processamento da paacutegina de modo que mesmo que
nenhuma das paacuteginas faccedila uso de sessions todas as paacuteginas deste usuaacuterio seratildeo processadas em sequecircncia
08 Envio simultacircneo de HTML ao Browser
Revisatildeo 30042004
Abrangecircncia
10
Versatildeo 710 Versatildeo 811 LIB WEBEX
As aplicaccedilotildees web desenhadas para utilizar a Infra-Estrutura APWEBEX contam com o recurso de Envio simultacircneo de Html ao Browser durante o processamento de uma paacutegina Advpl-ASP ( APH eou AHU )
Este recurso eacute habilitado atraveacutes do Protheus IDE nas opccedilotildees de configuraccedilatildeo de compilaccedilatildeo do ambiente em questatildeo mais especificamente habilitado atraveacutes do CheckBox [ ] Exibir conteuacutedo do Advpl ASP
progressivamente no Browser
Ao habilitamos esta configuraccedilatildeo todos os arquivos APH e AHU satildeo parseados fazendo internamente o uso da funccedilatildeo HttpSend() de modo que mesmo antes do processamento estar concluiacutedo o Html gerado jaacute estaacute
sendo enviado agraveo Browser qoe o solicitou
A utilizaccedilatildeo deste recurso provecirc um ganho de performance subtancial na aplicaccedilatildeo final Todos os projetos desenvolvidos com esta tecnologia ( Infra-Estrutura APWEBEX ) devem ter esta configuraccedilatildeo de compilaccedilatildeo
habilitada no IDE Vale lembrar que caso este recurso natildeo esteja habilitado ao habilitaacute-lo os arquivos aph e ahu do projeto necessitam ser recompilados para que esta configuraccedilatildeo tenha o efeito desejado
Pode existir a necessidade de um processamento de um APH ou AHU natildeo enviar o script Html gerado diretamente ao Browser Para tal situaccedilatildeo podemos desabilitar temporariamente este recurso de envio de html
progressivo em tempo de execuccedilatildeo permitindo assim por exemplo uma funccedilatildeo chamar em sequecircncia dois arquivos APH um para gerar um conteuacutedo Html a ser enviado via e-mail armazenado em uma variaacutevel
Advpl e outro APH para a montagem de uma tela de status que seraacute enviada agraveo Browser solicitante
Para habilitar eou desabilitar o envio simultacircneo do Script HTML agraveo browser em tempo de execuccedilatildeo utilize a funccedilatildeo HttpSetPart()
09 Configuraccedilotildees especiacuteficas APWEBEX
Revisatildeo 26042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Ao utilizarmos as funccedilotildees de Infra-estrutura APWEBEX existem recursos da lib que exigem uma configuraccedilatildeo adicional para serem utilizados
Envio de e-mail automaacutetico atraveacutes da Rotina de Tratamento de Erro do Site
Em caso de erro fatal na aplicaccedilatildeo Web a proacutepria rotina de tratamento de erro pode ser configurada para enviar um e-mail agraveo Administrador do sistema Para tal eacute necessaacuterio inserir as chaves abaixo na seccedilatildeo
do ambiente em uso para o site
ErrorSMTP= (endereccedilo do servidor SMTP a ser usado para o envio do e-mail )
ErrorMail= ( um ou mais endereccedilos de e-mail a receber op e-mail de erro separados por virgula )
ErrorFrom= ( um e apenas um endereccedilo de e-mail a ser usado como remetente do aviso de erro )
ErrorLogin = ( nome de usuario de login no servidor de SMTP caso necessaacuterio )
ErrorPassword= ( senha do usuario de login no servidor de SMTP caso necessaacuterio )
WebAdmin - Login alternativo
A infra-estrutura APWEBEX exige um usuaacuterio e senha para entrar no moacutedulo de administraccedilatildeo WebAdmin Para validar o login eacute utilizado o arquivo de senhas do ERP O usuaacuterio deve ser o Administrador ou
pertencer ao grupo de administradores para ter acesso agraveo WebAdmin Caso natildeo seja viaacutevel usar este arquivo de senhas para validar o login podemos inserir uma chave adicional ( AdmLogin ) no Environment em uso
pela aplicaccedilatildeo Web e configurar nela a senha do usuaacuterio Administrador para login no WebAdmin Caso esta chave seja configurada o arquivo de senhas do ERP natildeo seraacute utilizado para validar o login no WebAdmin
AdmLogin= ( senha do Administrador para logar no WebAdmin )
Pasta alternativa para upload de Rpo via WebAdmin No WebAdmin eacute possiacutevel utilizar uma configuraccedilatildeo especiacutefica para a troca do repositoacuterio de objetos em uso no site sem que seja necessaacuterio parar o servidor para isso Por default a pasta de upload chama-se
SwapRPO e deve existir na estrutura de diretoacuterio do ambiente utilizado a partir do diretoacuterio raiz do ambiente ( RootPath )
RpoUpload= ( pasta de upload alternativa a partir do RootPath do ambiente )
10 Recomendaccedilotildees finais
Revisatildeo 17122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Para todo o desenvolvimento de soluccedilotildees temos em matildeos uma diversidade de recursos desenhados para melhor atender agraves necessidades e adequar-se agraves caracteristicas da aplicaccedilatildeo Dada a flexibilidade dos recursos
recomenda-se aos desenvolvedores adotarem um padratildeo de desenvolvimento e ter em foco a eficiecircncia da aplicaccedilatildeo final tanto no aspecto funcional como na codificaccedilatildeo
Lanccedilando matildeo da experiecircncia em desenvolvimento de aplicaccedilotildees web adquiridas nos uacuteltimos anos nos toacutepicos abaixo estatildeo relacionadas algumas medidas tomadas no desenvolvimento de aplicaccedilotildees que nos satildeo muito
uacuteteis no decorrer de um projeto
Nomenclatura de Funccedilotildees
Para o desenvolvimento de aplicaccedilotildees web foi criado o Statement WEB FUNCTION para a declaraccedilatildeo de funccedilotildees referentes agrave projetos web Este comando na praacutetica apenas prefixa a declaraccedilatildeo da funccedilatildeo com
W_ poreacutem a sua utilizaccedilatildeo identifica que a funccedilatildeo em questatildeo foi construiacuteda uacutenica e exclusivamente para ser chamada a partir de uma requisiccedilatildeo HTTP Em adendo agrave este devemos utilizar os comandos WEB
EXTENDED INIT END disponivels no Include apwebexch para proteger a funccedilatildeo de ser chamada em um ambiente que natildeo o APWEBEX
Separando a Interface do Processamento
Ao desenvolver utilizando Advpl ASP paacuteginas APH AHU recomenda-se separar o processamento da Interface do seguinte modo Criar uma Web Function para a chamdada de umna paacutegina com conteuacutedo
dinacircmico via link apw e um arquivo APH ou AHU de mesmo nome que seraacute chamado internamente de modo que o coacutedigo-fonte escrito na Web Function seja responsaacutevel para gerar as informaccedilotildees a serem
disponibilizadas para o usuaacuterio e o APH contenha apenas a maacutescara destas informaccedilotildees e o miacutenimo de instruccedilotildees Advpl possiacutevel para a montagem da paacutegina Este processo facilita a manutenccedilatildeo de amobos
os coacutedigos pois o Web Designer que iraacute realizar um ajuste no APH natildeo teraacute que desviar do fonte Advpl inserido na paacutegina e o Analista Programador que faraacute a manutenccedilatildeo no coacutedigo Advpl preocupar-se-aacute apenas
com o coacutedigo responsaacutevel para a geraccedilatildeo dos dados que seratildeo mascarados
Utilizaccedilatildeo das Funccedilotildees de Infra-Estrutura
Atraveacutes dos comandos e funccedilotildees disponibilizadas na Infra-Estrutura APWEBEX natildeo tecircmos a necessidade de recriar partes comuns de coacutedigo para todos os projetos que se utilizem desta tecnologia aleacutem de permitir
atraveacutes de pontos de entrada estrategicamente colocados na ferramenta um niacutevel altiacutessimo de customizaccedilatildeo para os projetos desenvolvidos com esta tecnologia de maneira praacutetica e objetiva
11 Monitoramento de Sites em WEBEX
Revisatildeo 17122003
Abrangecircncia
LIB WEBEX
O Objetivo de uma funccedilatildeo de Monitoramento de Sites eacute testar as funcionalidades baacutesicas de um site retornando uma mensagem HTML preacute-definida indicando que estaacute tudo certo e em caso de erro uma
mensagem que procure identificar o que estaacute de errado
Para sites desenvolvidos em Protheus utilizando a tecnologia WEBEX devemos criar uma funccedilatildeo especiacutefica para o site que iraacute determinar se o mesmo estaacute operacional Esta funccedilatildeo seraacute chamada atraveacutes de link
apw
Vejamos o exemplo abaixo escrito para um site cujas bases de dados estatildeo num SQL acessadas via TopConnect Neste exemplo a funccedilatildeo chamada seraacute httpservidorU_SiteMonitorapw e caso esteja tudo certo
ela retornaraacute a string (SITE OK) seguido da data e horaacuterio da execuccedilatildeo da rotina Qualquer retorno diferente disto poderaacute indicar uma anomalia no funcionamento do site
Quando hospedado um site utilizando esta tecnologia no DataCenter da Makira esta informaccedilatildeo gerada pela rotina deve ser passada agraveo depto de infra-estrutura que configuraraacute um software Monitor de Sites que iraacute
realizar a cada um minuto uma requisiccedilatildeo agrave url especificada e iraacute emitir um alerta ao Departamento para que seja verificado o site caso haja alguma falha na resposta include protheusch
include apwebexch
User Function SiteMonitor()
Local cQuery nQtdRec
Verifica se a working Thread estaacute conectada com o TOP
If TCIsConnected()
Return Working Thread perdeu a conexatildeo com o TOP
Endif
Verifica se as tabelas principais estatildeo abertas
If select(SA1)=0
Return Tabela SA1 natildeo estaacute aberta
Endif
If select(SC5)=0
Return Tabela SC5 natildeo estaacute aberta
Endif
Executa uma query de contagem de registros de uma tabela do sistema
cQuery = SELECT count() as QTDREC from SA1010
OPEN QUERY cQuery ALIAS TMPCOUNT
nQtdRec = TMPCOUNT-gtQTDREC
CLOSE QUERY TMPCOUNT
If nQtdRec=0
11
Return Falha na Contagem de registros Query SA1
Endif
Se estaacute tudo certo retorna um HTML informando que estaacute tudo OK
Return (SITE OK) +dtos(date())+ +time()
Comandos - CLOSE QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CLOSE QUERY cAlias
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAlias Caracter Alias sob o qual o cursor da Query foi aberto Caso o alias passado como paracircmetro natildeo se encontre aberto a funccedilatildeo natildeo gera nenhuma ocorrecircncia de
erro
Descriccedilatildeo
Atraveacutes do comando Close Query realizamos o fechamento de uma query aberta atraveacutes do comando OPEN QUERY
ATENCcedilAtildeO Uma query aberta pelo comando OPEN QUERY deve ser fechada pelo comando CLOSE QUERY Poderiacuteamos fechar o alias aberto atraveacutes de uma Query simplesmente com a funccedilatildeo
DbCloseArea() poreacutem isto deixaria em aberto elementos internos de controle criados pelo comando OPEN QUERY
Comandos - OPEN QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
OPEN QUERY ltcQuerygt ALIAS ltcAliasgt [ [NOCHANGE] ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcQuerygt Caracter cQuery corresponde agrave String contendo a Query a ser executada no banco de dados
ALIAS ltcAliasgt Caracter cAlias corresponde ao nome do alias sob o qual o cursor de retorno dos dados pesquisados seraacute aberto no ambiente Advpl Natildeo pode ser especificado
um nome de alias jaacute em uso senatildeo a aplicaccedilatildeo seraacute finalizada com a ocorrecircncia de erro Alias already in Use
[NOCHANGE] Caracter Caso especificada a claacuteusola NOCHANGE na abertura da query a string em cQuery natildeo seraacute submetida agrave funccedilatildeo ChangeQuery()
Descriccedilatildeo
Atraveacutes do comando OPEN QUERY realizamos a abertura de uma Query de busca no Banco de Dados atraveacutes do RDD TOPCONN retornando os dados consultados atraveacutes de um ALIAS Advpl
Caso a Query nao possa ser aberta por erro de sintaxe devido agrave thread atual natildeo estar conectada com o TopConnect ou outro erro seraacute gerado um log de erro informando o Alias o Stack ( Pilha de Chamadas ) de
execucatildeo e o conteuacutedo da Query para Debug
OBSERVACcedilOtildeES IMPORTANTES
Na montagem da string da Query devemos especificar os comandos SQL alias e nomes de campos em letras maiuacutesculas
Quando utilizamos o comando OPEN QUERY natildeo precisamos passar a expressatildeo da Query atraveacutes da funccedilatildeo ChangeQuery() Este proceduimento jaacute eacute realizado internamente pelo comando OPEN
QUERY Para que a query natildeo seja submetida agrave funccedilatildeo ChangeQuery() devemos utilizar o paracircmetro NOCHANGE
A utilizaccedilatildeo deste comando eacute impliacutecita agrave LIB APWEBEX e necessita da utilizaccedilatildeo do include Apwebexch
Comandos - WEB EXTENDED END
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED END ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando para fechar uma seccedilatildeo aberta pelo comando WEB EXTENDED INIT Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do
comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
Comandos - WEB EXTENDED INIT
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED INIT ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando juntamente com o comando WEB EXTENDED END quando montamos uma funcatildeo ( Web Function ) que foi construiacuteda para ser chamada a partir de um Web Browser quando nos
utilizamos das funccedilotildees de Infra-Estrutura APWEBEX
Atraveacutes dele eacute realizada uma preacute-validaccedilatildeo que certifica que a execuccedilatildeo da funccedilatildeo somente seraacute realizada caso a thread atual seja realmente uma Thread montada no ambiente WEBEX aleacutem de podermos inserir uma
preacute-validaccedilatildeo (START) de execuccedilatildeo especiacutefica para esta funccedilatildeo
Caso seja especificada uma funccedilatildeo na claacuteusula START a mesma deveraacute retornar uma String Retornando uma String em branco o processamento da funccedilatildeo original seraacute efetuado normalmente Caso a funccedilatildeo retorne
uma string natildeo-vazia esta string seraacute retornada para a variaacutevel cHtml e o processamento do programa seraacute desviado para a linha do coacutedigo-fonte imediatamente posterior agraveo comando WEB EXTENDED END
Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
12
Infra-Estrutura APWEBEX - EnvUserAPL - Exemplo de Uso com ERP
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo praacutetico abaixo utilizamos em um coacutedigo fonte Advpl os pontos de entrada disponibilizados na Infra-Estrutura APWEBEX para realizar a preparaccedilatildeo de um ambiente ERP Reset de Ambiente
finalizaccedilatildeo de Thread finalizaccedilatildeo de sessions por time-out e customizaccedilatildeo de mensagem de erro para o desenvolvimento de um projeto de Web Site integrado com o ERP Microsiga
Devemos adotar como padratildeo para projetos que utilizam APWEBEX a criaccedilatildeo do arquivo EnvUserapl especificamente para a definiccedilatildeo dos pontos de entrada utilizados pela Infra-Estrutura
APWEBEX e devemos apenas compilar os fontes dos pontos de entrada realmente necessaacuterios agraveo projeto INCLUDE PROTHEUSCH
INCLUDE APWEBEXCH
====================================================================================
Exemplo de Arquivo de Lib de Projeto APWEBEX utilizando os pontos de entrada
da lib para preparaccedilatildeo de ambiente reset de ambiente e tratamento de erro
utilizando APWEBEX em conjunto com o ERP Microsiga
====================================================================================
----------------------------------------------------------------------------
Ponto de Entrada StartWebEx( NIL ) =gt T ou F
Ponto de entrada executado na inicializaccedilatildeo de cada Working Thread ( ONSTART )
Eacute a responsaacutevel por preparar o ambiente para atender agraves requisiccedilotildees WEB de links apw
Natildeo recebe paracircmetro algum da lib e deve retornar T caso tenha inicialziado com sucesso
ou F em caso de falha de inicializaccedilatildeo
----------------------------------------------------------------------------
USER Function StartWebEx()
Prepara o Ambiente ERP
PREPARE ENVIRONMENT
EMPRESA 01
FILIAL 01
TABLES ZX1ZX2ZX3ZX4ZZ1ZZ2ZZ3ZZ4ZZ5
Return T
-------------------------------------------------------------------------------
Ponto de Entrada ConnectWebEx(cFnName) =gt cHtml ou
Ponto de entrada executado imediatamente antes do processamento de uma requisiccedilatildeo de um link APW
Recebe como paracircmetro o nome da funccedilatildeo a ser executada passada no link
Deve retornar uma String que seraacute retornada ao ao Browser solicitante Caso retorne uma string
em branco (vazia) a funccedilatildeo originalmente solicitada eacute executada pela lib
Caso contraacuterio a funccedilatildeo original natildeo eacute executada e a string retornada eacute enviada ao Browser
-------------------------------------------------------------------------------
USER Function ConnectWebEx(cFnName)
Local cHtmlConn =
conout(Vou executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada ResetWebEx(cFnName) =gt cHtml ou
Funccedilatildeo chamada imediatamente Apos a execuccedilatildeo de uma requisiccedilatildeo APW
Recebe como paracircmetro o nome da funccedilatildeo executada e permite tambeacutem que seja acrescentado
algo a mais no Html a ser retornado ao Browser
-------------------------------------------------------------------------------
USER Function ResetWebEx(cFnName)
Local cHtmlConn =
conout(Terminei de executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada FINISHWEBEX()
Funccedilatildeo chamada no fechamendo do ambiente de uma working Thread Apos a execuccedilatildeo deste
a Thread utilizada eacute eliminada da memoacuteria
-------------------------------------------------------------------------------
USER Function FINISHWEBEX()
conout(Finalizando a Working Thread)
Return
-------------------------------------------------------------------------------
Ponto de Entrada ENDSESSION(cSessionId) =gt NIL
Ponto de entrada chamado em uma working Thread quando a session de um usuaacuterio seraacute
eliminada da memoacuteria por time-out Recebe como parametro o Id de sessions de usuario
que estaacute sendo finalizado
-------------------------------------------------------------------------------
USER Function ENDSESSION(cSessionId)
Conout(Sesssion +cSessionId+ limpa da memoacuteria)
Return
----------------------------------------------------------------------------
Ponto de Entrada WebExError(ecErrorLogcHtml) =gt cCustomHtml ou
Esta funcao eacute chamada pela rotina de tratamento de erro WEBEX quando ocorre um erro fatal
e permite que seja retornado um Html de tratamento de erro diferenciado Ela recebe como
parametro o objeto do erro a mensagem ASCII que foi acrescentada ao arquivo errorlog
e o Html original montado pela rotina de tratamento de erro default
IMPORTANTE Por sem um ponto de entrada executado em um momento criacutetico (tratamento
de erro ) esta funccedilatildeo deve ser o mais suscinta e simples possiacutevel natildeo utilizando
sessions banco de dados etc
----------------------------------------------------------------------------
USER Function WebExError(oErrorcErrorLogcHtml)
Local cCustomHtml =
Monta mensagem de erro mais amigavel
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
13
Ocorreu um erro inesperado no
cCustomHtml += processamento desta paacutegina O Administrador do sistema seraacute notificado desta
cCustomHtml += ocorrecircncia Recomendamos fortemente que esta janela do navegador seja cCustomHtml += fechada e uma nova janela seja aberta para retornar agrave navegaccedilatildeo do site
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
Return cCustomHtml
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Nos exemplo abaixo utilizamos a funccedilatildeo escape() para formatar paracircmetros para inserir em uma URL cUrl = httplocalhostwebinfoapw
cPAram1 = Teste de Parametro 01-02
cPAram2 = reserva
cPAram3 = 1+2+3
cUrl += Par01= + escape(cPAram1) + ampPAr02= + escape(cPAram2) + ampPar03= + escape(cPAram3)
O conteudo de cUrl deveraacute ser httplocalhostwebinfoapwPar01=Teste20de20Parametro2001-02ampPAr02=23reserva23ampPar03=12B22B3
proacuteprio para a monyahem de um link
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETJOBPROFSTRING
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
O exemplo abaixo executado em uma thread iniciada a partir de um JOB WEBEX recupera algumas configuraccedilotildees atuais em uso para este JOB cJobType = GetJobProfString(type(empty) )
cInstances = GetJobProfString(Instances(empty) )
cInacTime = GetJobProfString(InactiveTimeout(default) )
cExpTime = GetJobProfString(ExpirationTime(default) )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETPARVALUE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo satildeo montados dois arrays multi-dimensionais com 2 dimensotildees e satildeo realizadas buscas nos mesmos explorando todas as possibilidades de uso da funccedilatildeo GetParValue() Local aTeste1 =
Local aTeste2 =
Aadd(aTeste1AliasTMP1)
Aadd(aTeste1Relacao2x3)
Aadd(aTeste2AliasTMP2)
Aadd(aTeste2Info---Informaccedilatildeo adicional---)
Busca apenas no array ateste1
cAlias = GetParValue(ALIASaTeste1)
cRelacao = GetParValue(RELACAOaTeste1)
cInfo = GetParValue(INFOaTeste1)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) (nao encontrado)
Busca apenas no array ateste2
cAlias = GetParValue(ALIASaTeste2)
cRelacao = GetParValue(RELACAOaTeste2)
cInfo = GetParValue(INFOaTeste2)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP2
conout(cRelacao) (nao encontrado)
conout(cInfo) ---Informaccedilatildeo Adicional---
Busca em ambos os Arrays
Primeiro no aTeste1 e depois no aTeste2
cAlias = GetParValue(ALIASaTeste1aTeste2)
cRelacao = GetParValue(RELACAOaTeste1aTeste2)
cInfo = GetParValue(INFOaTeste1aTeste2)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) ---Informaccedilatildeo Adicional---
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo abaixo geramos a string com o DUMP de um arquivo HTML salvo na pasta WEB a partir do RootPath do Environment O Dump do arquivo seraacute mostrado no Console do servidor e no Web
Browser que solicitou a funccedilatildeo U_DumpTestapw
include protheusch
include apwebexch
User Function DumpTest()
Local cHtml =
Local cTXTFile =
Local cDump =
WEB EXTENDED INIT cHtml
14
Le o arquivo
cTTXFile = memoread(WebDefaulthtm)
Gera a string com o Dump do arquivo
cDump = HExStrDump(cTTXFile)
Mostra o Dump no console
conout(cDump)
Gera HTML para a visualizaccedilatildeo do DUMP
cHtml = VarInfo(DUMPHtmlnotags(cDump)tf)
WEB EXTENDED END
Return cHtml
Exemplo do Texto mostrado no Console
HexSTRDump ( String 237 Start 1 Length 237 )
-------------------------------------------------------------------------------
3C 48 54 4D 4C 3E 3C 48 45 41 44 3E 0D 0A 3C 4D | ltHTMLgtltHEADgt__ltM
45 54 41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 | ETA HTTP-EQUIV=
43 6F 6E 74 65 6E 74 2D 54 79 70 65 22 20 63 6F | Content-Type co
6E 74 65 6E 74 3D 22 74 65 78 74 2F 68 74 6D 6C | ntent=texthtml
22 0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 | __ltMETA HTTP-EQ
55 49 56 3D 22 70 72 61 67 6D 61 22 20 63 6F 6E | UIV=pragma con
74 65 6E 74 3D 22 6E 6F 2D 63 61 63 68 65 22 3E | tent=no-cachegt
0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 55 | __ltMETA HTTP-EQU
49 56 3D 22 45 78 70 69 72 65 73 22 20 63 6F 6E | IV=Expires con
74 65 6E 74 3D 22 2D 31 22 3E 0D 0A 3C 4D 45 54 | tent=-1gt__ltMET
41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 52 65 | A HTTP-EQUIV=Re
66 72 65 73 68 22 20 63 6F 6E 74 65 6E 74 3D 22 | fresh content=
30 3B 20 75 72 6C 3D 2F 77 5F 77 45 78 30 30 30 | 0 url=w_wEx000
2E 61 70 77 22 3E 3C 2F 48 45 41 44 3E 0D 0A 3C | apwgtltHEADgt__lt
2F 48 45 41 44 3E 3C 2F 48 54 4D 4C 3E | HEADgtltHTMLgt
-------------------------------------------------------------------------------
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HTMLNOTAGS
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo a funccedilatildeo HtmlNoTags eacute utilizada para permitir a utilizaccedilatildeo de caracteres especiais no conteuacutedo de um input para um formulaacuterio Html Local cHtml =
Local cInput =
Conteudo do campo com tags HTML intepretaacuteveis
cInput =
Ao montar o Input aplicar a HtmlNoTags() ao conteudo do mesmo
cHtml +=
+HtmlNoTags(cIn
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
15
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos a funccedilatildeo RetSqlAce para montar uma query de busca por tiacutetulo de uma determinada informaccedilatildeo considerando todas as possibilidades de acentuaccedilatildeo independentemente de como o
banco foi alimentado eou a string de busca foi digitada
IMPORTANTE Na expressatildeo da Query o campo da tabela deve ser passado pela funccedilatildeo LOWER do BAnco pois a funccedilatildeo retsqlace monta a string para busca com letras minuacutesculas cFind = acentuaccedilatildeo
cQuery = SELECT FROM + RetSqlTab(ZZ1)
cQuery += WHERE LOWER(ZZ1_TITULO) LIKE +RetSqlAce(cFind)+
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VALTOSQL
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = + ValToSql(02)
cQuery += AND FA2_DTINC lt= + ValToSql(date())
O exemplo acima caso escrito de forma a realizar as conversotildees especiacuteficas para cada tipo de conteuacutedo seria o equivalemte ao coacutedigo abaixo
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = 02
cQuery += AND FA2_DTINC lt= + DTOS( date() )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VARINFO
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo eacute gerada uma string HTML com as informaccedilotildees do retorno da chamada de duas funccedilotildees baacutesicas da Linguagem Advpl User Function InfoTeste()
Local cHtml =
cHtml += VarInfo(lsquoDatersquodate())
cHtml += VarInfo(lsquoTimelsquotime())
Return cHtml
Deve ser gerado um echo no Console do Servidor parecido com este abaixo
Date -gt D ( 10) [08122003]
Time -gt C ( 8) [201748]
Infra-Estrutura APWEBEX - Exemplo das funccedilotildees de acentuaccedilatildeo ApWebEX
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo vemos a diferenccedila de comportamento entre as funccedilotildees baacutesicas da Linguagem Advpl Upper() e Lower() e a funccedilatildeo de Infra-estrutura Capital() em relaccedilatildeo agraves funccedilotildees da Infra-estrutura
APWEBEX UpperAce() LowerAce() e CApitalAce() quando utilizamos caracteres acentuados cRetorno =
cFrase = natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
cRetorno += Original + cFrase + CRLF
cRetorno += Upper() + upper(cFrase) + CRLF
cRetorno += Lower() + lower(cFrase) + CRLF
cRetorno += Capital() + capital(cFrase) + CRLF
cRetorno += UPPERACE() + UPPERACE(cFrase) + CRLF
cRetorno += LOWERACE() + LOWERACE(cFrase) + CRLF
cRetorno += CAPITALACE() + CAPITALACE(cFrase) + CRLF
Neste ponto a variaacutevel cRetorno deveraacute conter
Original natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
Upper() NatildeO Haacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSotildeES PARA O INEXPLICaacuteVEL
Lower() natildeo haacute explicaCcedilOtildees considerando excessotildees para o inexplicaacutevel
Capital() Natildeo Haacute ExplicaCcedilOtildees Considerando Excessotildees Para O Inexplicaacutevel
UPPERACE() NAtildeO HAacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSOtildeES PARA O INEXPLICAacuteVEL
LOWERACE() natildeo haacute explicaccedilotildees considerando excessotildees para o inexplicaacutevel
CAPITALACE() Natildeo Haacute Explicaccedilotildees Considerando Excessotildees Para O Inexplicaacutevel
Infra-Estrutura APWEBEX - Exemplos das funccedilotildees NTOC e CTON
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos as funccedilotildees cton e ntoc para realizar conversotildees de nuacutemeros em base decimal para outras bases numeacutericas e vice-versa
16
nNum1 = CTON(011010012) Converte binaacuterio para decimal
nNum2 = CTON(00DA25FE16) Converte Hexadecimal para decimal
nNum1++ Soma 1 ao numero em nNum1
nNum2++ Soma 1 ao numero em nNum2
cNum1 = NtoC(nNum128) Converte para binaacuterio novamente
cNum2 = NtoC(nNum2168) Converte para Hexa novamente
-------------------------------------------------------------------------
Ao final do programa cNum1 seraacute 01101010 e cNum2 seraacute 00DA25FF
-------------------------------------------------------------------------
APWEXADDERR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
APWEXADDERR ( [ cTitulo ] [ cInfo ] ) --gt T
Paracircmetros
Argumento Tipo Descriccedilatildeo
cTitulo Caracter cTitulo corresponde a um tiacutetulo identificador da informaccedilatildeo Deve ter no maacuteximo 20 caracteres Os caracteres acima da vigeacutesima posiccedilatildeo seratildeo
ignorados
cInfo Caracter cInfo corresponde agrave Informaccedilatildeo a ser acrescentada ao ERRORLOG em caso de erro
Retorno
Tipo Descriccedilatildeo
Loacutegico Esta funccedilatildeo sempre retorna T
Descriccedilatildeo
Atraveacutes da funccedilatildeo ApWExAddErr() podemos acrescentar uma string de informaccedilotildees adicionais em um buffer em memoacuteria descarregado na geraccedilatildeo do ERRORLOG no caso de uma ocorrecircncia de erro fatal na
working thread atual
Caso a funccedilatildeo seja chamada sem nenhum paracircmetro a uacuteltima ocorrecircncia acrescentada pela funccedilatildeo eacute eliminada da pilha interna de informaccedilotildees
ATENCcedilAtildeO Esta funccedilatildeo deve ser apenas utilizada em casos de necessidade de obtenccedilatildeo de informaccedilotildees especiacuteficas acerca de uma ocorrecircncia de erro natildeo reproduzida em ambiente de testes eou natildeo depuraacutevel pois
seu uso desnecessaacuterio prejudica a performance da aplicaccedilatildeo final
CAPITALACE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CAPITALACE ( lt cString gt ) --gt cStrCapital
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida
Retorno
Tipo Descriccedilatildeo
Caracter String resultante convertida para munuacutesculo com as primeiras letras das palavras significantes em maiuacutesculo
Descriccedilatildeo
Semelhante agrave funccedilatildeo de Infra-estrutura Capital() poreacutem converte tambeacutem caracteres acentuados
A funccedilatildeo CapitalAce() converte todos os caracteres de uma String para minuacutesculo e a primeira letra das palavras significantes para maiuacutesculo semelhante agrave funccedilatildeo Capital() poreacutem considera e converte tambeacutem
caracteres acentuados em OEM eou ANSI
CTON
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CTON ( lt cString gt lt nBase gt ) --gt nNumero
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave representaccedilatildeo de um nuacutemero em outra base numeacuterica compreendida entre 2 e 36
nBase Numeacuterico nBase corresponde agrave base numeacuterica utilizada pelo numero representado em cString
Retorno
Tipo Descriccedilatildeo
Numeacuterico Nuacutemero recebido como paracircmetro em notaccedilatildeo decimal ( Base 10 )
Descriccedilatildeo
Converte um nuacutemero representado em String de base 2 a 36 para um nuacutemero em base decimal (10)
Observaccedilatildeo Importante
Satildeo considerados caracteres vaacutelidos para compor um nuacutemero de base 36 os 10 algarismos numeacutericos de 0 a 9 e os 26 caracteres alfabeacuteticos maiuacutesculos compreendidos entre A e Z Quaisquer caractetes presentes na
String de paracircmetro fora desta faixa de dados eou fora da base ( por exemplo uma conversatildeo de string base 2 - binaacuterio - da string 01001020 ) retornaraacute -1 ( menos um )
ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
ESCAPE ( lt cString gt ) --gt cEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute uma sequecircncia de caracteres a ser processada
Retorno
Tipo Descriccedilatildeo
Caracter cEscaped corresponde agrave string original com os caracteres reservados utilizando a notaccedilatildeo HH
Descriccedilatildeo
A funccedilatildeo Escape() deve ser utilizada para realizar conversotildees de caracteres especiais e reservados quando da necessidade de passagem de paracircmetros via URL
A sintaxe de uma requisiccedilatildeo via URL para a passagem de paracircmetros eacute
(link)param=conteudoampparam2=conteudo2amp
Quando passamos paracircmetros via url devemos tomar o cuidado de natildeo utilizar caracteres reservados e especiais nos nomes e conteuacutedos de paracircmetros Para realizar estas conversotildees utilizamos a funccedilatildeo Escape()
17
EXECINPAGE
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXECINPAGE ( lt cAPHPage gt ) --gt cHTMLPage
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAPHPage Caracter Corresponde agraveo nome do APH que deve ser executado sem a extensatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cHtmlPage corresponde agrave string HTML gerada pela paacutegina APH AHU
Descriccedilatildeo
Atraveacutes da funccedilatildeo ExecInPage() executamos uma paacutegina APH passada como paracircmetro A funccedilatildeo deveraacute retornar a String HTML correspondente agrave paacutegina processada
Poreacutem a funccedilatildeo ExecInPage() realiza tratamentos adicionais padratildeo relacionaodo agraveo comportamento dos Projetos WEB referentes agrave customizaccedilotildees da segunte maneira
1 Primeiro eacute verificado se existe uma paacutegina AHU compilada com o nome cAPHPage Caso exista a mesma seraacute executada pela execinpage
2 Caso natildeo exista AHU com este nome eacute procurado pelo APH Caso o APH exista o mesmo seraacute executado pela ExecInPage
3 Caso natildeo existam no RPO atual o APH nem o AHU com o nome especificado no paracircmetro cAPHFile o processamento eacute abortado com a ocorrecircncia de erro [APWEXERR_0007] APH page
[ltcAPHPagegt] not found in RPO 4 Antes de executar o APH ou AHU identificado nos passos anteriores eacute verificado se existe um ponto de entrada ( User Function ) compilado com o mesmo nome do APH Caso exista o ponto de
entrada eacute executado Ele deveraacute retornar uma String HTML Se for retornada alguma string a funccedilatildeo retorna a tring retornada e natildeo processa o APH AHU Observaccedilatildeo A funccedilatildeo ExecInPage natildeo iraacute executar este
tratamento da User Function com o nome de cAPHPage caso a funccedilatildeo ExecInPage() esteja sendo executada atraveacutes de uma USER FUNCTION
Observaccedilatildeo Importante - Envio parcial de HTML agraveo Browser A funccedilatildeo ExecInpage() juntamente com o APH compilado ao serem processados iratildeo tentar enviar o conteuacutedo HTML para o Browser solicitante durante o processamento de modo que a funccedilatildeo normalmente iraacute
retornar uma String vazia
Caso seja necessaacuteria a execuccedilatildeo de uma paacutegina APH ou AHU e o natildeo-envio da mesma para o Browse por exemplo para a geraccedilatildeo de um coacutedigo HTML a ser enviado via e-mail revemos utilizar a funccedilatildeo
HttpSetPart() realizando uma chamada da mesma antes da ExecInPage() passando o paracircmetro F para desabilitar temporariamente o envio de HTML simultacircneo ao Browser e apoacutes a execuccedilatildeo da ExecInPage()
devemos re-habilitar o envio simultacircneo atraveacutes da chamada da funccedilatildeo HttpSetPart() com o paracircmetro T
EXISTPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTPAGE ( lt cAphFile gt ) --gt lFound
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAphFile Caracter Nome do arquivo APH sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Caracter Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistPage() para identificarmos no ambiente atual se um determinado arquivo APH encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistPage(teste)
conout(testeaph compilado neste RPO)
Else
conout(testeaph NAO compilado neste RPO)
Endif
EXISTUSRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTUSRPAGE ( lt cAhuFile gt ) --gt lExist
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAhuFile Caracter Nome do arquivo AHU sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Loacutegico Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistUSRPage() para identificarmos no ambiente atual se um determinado arquivo AHU encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistUSRPage(teste)
conout(testeahu compilado neste RPO)
Else
conout(testeahu NAO compilado neste RPO)
Endif
GETJOBPROFSTRING
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETJOBPROFSTRING ( lt cKey gt lt cDefault gt ) --gt cKeyValue
Paracircmetros
Argumento Tipo Descriccedilatildeo
cKey Caracter cKey corresponde agrave chave da seccedilatildeo de configuraccedilatildeo da Working Thread atual a ser retornada
cDefault Caracter Valor default (string) a ser retornado pela funccedilatildeo caso a chave especificada natildeo sehja encontrada no INI
Retorno
Tipo Descriccedilatildeo
Caracter Conteudo da Chave solicitada Caso a chave natildeo seja encontrada eacute retornado o conteudo de cDefault Caso esta funccedilatildeo natildeo seja executada a partir de uma Working Thread ela
18
retornaraacute uma string em branco ()
Descriccedilatildeo
Atraveacutes desta funccedilatildeo podemos recuperar as configuraccedilotildees do Job da Working Thread atual
GETWEXVERSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETWEXVERSION ( ) --gt cBuildId
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave String Identificadora da versatildeo no formato ltLIBgt VAAMMDDHHmm Vide Tabela A
Descriccedilatildeo
Esta funccedilatildeo natildeo requer argumentos e retorna o Identificador do build versatildeo de Release das funccedilotildees de Infra-Estrutura APWEBEX
Observaccedilatildeo A data informada pela versatildeo natildeo corresponde agrave ultima compilaccedilatildeo do RPO de um determinado Projeto WEB mas sim agrave data de release da LIB de Infra-Estrutura APWEBEX
Tabela A
Simbolo Descriccedilatildeo
AA Ano de geraccedilatildeo da Lib
MM Mecircs da geraccedilatildeo da Lib
DD Dia da geraccedilatildeo da Lib
HH Horaacuterio da geraccedilatildeo da Lib
mm Minutos do Horaacuterio de Geraccedilatildeo da Lib
(HTTP) Indica que a versatildeo foi compilada com a configuracatildeo de envio progressivo de HTML simultacircneo para o Browse Esta opccedilatildeo eacute imprescindiacutevel para projetos que se utilizam desta LIB
Por exemplo
APWEBEX Version 30312021900 (HTTP)
HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HEXSTRDUMP ( lt cString gt [ nStart ] [ nLength ] ) --gt cHExDump
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser lida para a geraccedilatildeo do Dump
nStart Numeacuterico Corresponde agrave posiccedilatildeo inicial de cString a ser considerada para a geraccedilatildeo do Dump a partir da posiccedilatildeo 1 Caso este paracircmetro natildeo seja informado o
Default eacute a posiccedilatildeo 1 da string
nLength Numeacuterico nLength corresponde agraveo tamanho a ser considerado para a geraccedilatildeo do DUMP a partir da posiccedilatildeo inicial recebida em nStart Caso este paracircmetro natildeo
seja informado eacute considerado o tamanho ateacute o final da String
Retorno
Tipo Descriccedilatildeo
Caracter O retorno da funccedilatildeo corresponde agrave uma string Advpl formatadas em 16 bytes em hexadecimal por linha mais o separador pipe (|) mais os 16 caracteres em Ansi Os caracteres de
controle ( codigo ascii menor que 32 ) satildeo convertidos para visualizaccedilatildeo para o caractere underline (_)
Descriccedilatildeo
Atraveacutes da funccedilatildeo HexStrDump() podemos gerar uma string em Advpl em formato de Dump Hexadecimal a partir da string informada como paracircmetro a partir de uma determinada posiccedilatildeo da string considerando um
nuacutemero de bytes informado
Caso os paracircmetros nPosIni e nTamString natildeo sejam informados o dump gerado corresponde a string recebida como paracircmetro em sua totalidade
Observaccedilatildeo
Natildeo devemos pasar para a funccedilatildeo HexStrDump uma string maior que 240 Kb pois a geraccedilatildeo da String de dump eacute realizada em memoacuteria sendo a string final gerada em meacutedia 42 vezes maior que a string passada
como paracircmetro Caso a string passada como paracircmetro seja maior que 240 Kb a execuccedilatildeo seraacute abortada com a ocorrecircncia de erro fatal string size overflow
HTMLNOTAGS
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HTMLNOTAGS ( lt cStrHtml gt ) --gt cStrNoTags
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrHtml Caracter cStrHtml corresponde a uma String que natildeo pode conter caracteres Html interpretaacuteveis
Retorno
Tipo Descriccedilatildeo
Caracter String original com os caracteres interpretaacuteveis Html lt gt amp convertidos para caracteres natildeo-interpretaacuteveis
Descriccedilatildeo
A Funccedilatildeo HTMLNOTAGS converte as Tags interpretaacuteveis de uma String HTML para TAGS natildeo interpretaacuteveis Este recurso eacute normalmente utilizado quando precisamos montar um input Html com um conteudo que
nao pode ser interpretado pelo browser como uma Tag Esta funccedilatildeo apenas converte os caracteres lt ( menor que ) gt ( maior que ) amp ( e comercial ) e ldquo ( aspas duplas )
Recomenda-se fortemente que na montagem do value de um input html o conteuacutedo do mesmo seja colocado entre aspas duplas pois caso o conteuacutedo do value inicial do campo contenha aspas simples (
natildeo convertidas pela funccedilatildeo HtmlNoTags) isto poderaacute ocasionar perda de dados e erro de sintaxe no formulaacuterio Html
HTTPISWEBEX
Revisatildeo 12122003
Sintaxe
HTTPISWEBEX ( ) --gt lIsApWEBEX
Retorno
Tipo Descriccedilatildeo
Loacutegico A funccedilatildeo retornaraacute T caso o ambiente de execuccedilatildeo atual seja uma Working Thread WEBEX inicializada pela funccedilatildeo de infra-estrutura STARTWEBEX
Descriccedilatildeo
Atraveacutes da funccedilatildeo HttpIsWebEx() eacute possiacutevel identificarmos se o programa atual estaacute sendo executado atraveacutes de uma Working Thread inicializada utilizando-se as funccedilotildees de Infra-Estrutura APWEBEX
ISEMAIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
19
Sintaxe
ISEMAIL ( lt cEMail gt ) --gt lEmailOk
Paracircmetros
Argumento Tipo Descriccedilatildeo
cEMail Caracter cEmail corresponde a string a ser analizada contendo um e apenas um endereccedilo de e-mail
Retorno
Tipo Descriccedilatildeo
Caracter Retorna T caso a sring recebida como paracircmetro atenda agraves definiccedilotildees de nomenclatura vaacutelidos para um endereccedilo de e-mail
Descriccedilatildeo
Utilizada para validar e-mails em Advpl a funccedilatildeo ISEMAIL recebe como paracircmetro uma string contendo um e-mail retornando T caso a string esteja em um formaacuteto vaacutelido respeitando a regra para nomenclatura de
endereccedilos de e-mail
Regra Um e-mail eacute considerado vaacutelido caso seja iniciado por um caracter apenas contenha caracteres asc de a a z e 0 a 9 e os caracteres (arroba) (ponto) - ( hiacutefen) ou _ (underline) e deve conter uma e
apenas uma arroba e no minimo um ponto apos a arroba intercalado por um caracter
LOWERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
LOWERACE ( lt cString gt ) --gt cStrLower
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a sequecircncia de caracteres a ser convertida para letras minuacutesculas
Retorno
Tipo Descriccedilatildeo
Caracter String original em letras minuacutesculas
Descriccedilatildeo
A Funccedilatildeo LOWERACE converte todos os caracteres de uma String para ldquominusculordquo semelhante agrave funccedilatildeo LOWER() poreacutem considera e converte tambeacutem caracteres acentuados em ANSI
NTOC
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
NTOC ( lt nNumero gt lt nBase gt lt nTamStr gt ) --gt cString
Paracircmetros
Argumento Tipo Descriccedilatildeo
nNumero Numeacuterico nNumero eacute o valor numeacuterico em base devimal a ser convertido
nBase Numeacuterico nBase corresponde agrave base binaacuteria a ser utilizada para converter nNumero
nTamStr Numeacuterico nTamStr corresponde ao tamanho da string representando o numero na base desejada
Retorno
Tipo Descriccedilatildeo
Caracter cString corresponde ao numero convertido para a base numeacuterica especificada como paracircmetro
Descriccedilatildeo
A Funccedilatildeo NTOC converte um nuacutemero em notaccedilatildeo decimal para um nuacutemero representado por String utilizando uma base numeacuterica entre 2 e 36 preenchendo-o com ldquo0rdquo (zeros) agrave esquerda do tamanho especificado
Observaccedilatildeo O Paracircmetro nBase deve ser especificado com um nuacutemero entre 2 e 36 Caso seja passado como paracircmetro um nuacutemero base fora desta faixa o processamento eacute abortado com a ocorrecircncia de erro
[APWEXERR_0022] INVALID NTOC BASE [X] onde ltXgt foi a base passada como argumento
REDIRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
REDIRPAGE ( lt cUrl gt [ cTarget ] [ nTime ] ) --gt cScript
Paracircmetros
Argumento Tipo Descriccedilatildeo
cUrl Caracter Link para onde o script deve apontar o redirecionamento
cTarget Caracter Destino do redirecionamento Caso natildeo especificado o default eacute _self
nTime Numeacuterico Tempo (em segundos) de delay antes do redirecionamento ser executado
Retorno
Tipo Descriccedilatildeo
Caracter Script Html JavaScript que ao ser executado no Browser (client) chama a paacuteginaobjeto chamado no Link
Descriccedilatildeo
A funccedilatildeo RedirPage eacute utilizada quando desejamos devolver ao Browser um script que ao ser executado redirecionaraacute o Browser agrave abertura de um link passado como paracircmetro
RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLACE ( lt cStrFind gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrFind Caracter cStrFind corresponde agrave sequecircncia de caracteres a ser procurada podendo conter caracteres maiuacutesculos e minuacutesculos com ou sem acentuaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cStrQuery corresponde agrave string de busca a ser utilizada na query utilizando caracteres em minuacutesculo
Descriccedilatildeo
A funccedilatildeo RetSqlAce eacute utilizada para auxiliar de montagem de querys de busca de caracteres acentuados em bases de dados A funccedilatildeo automaticamente trata a string original removendo os acentos convertendo todos
os caracteres para minuacutesculas e trocando todas as vogais e cedilhas da string original por uma sequecircncia de caracteres acentuados em munuacutescilas para busca posicional
20
RETSQLCOND
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLCOND ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlCond() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga e o Makira Hypersite utilizando aliases de 3
caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar a filial atual ( xFilial ) de acordo com o modo do arquivo ( X2_MODO ) e para sempre desconsiderar
registros deletados
Observaccedilotildees
Esta funccedilatildeo foi mantida apenas por compatibilidade pois a ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do
banco para efeitos de performance Para ganharmos performance nas Querys devemos ao inveacutes de utilizar a funccedilatildeo RetSqlCond() utilizar como primeira clauacutesula WHERE o retorno da funccedilatildeo RetSqlFil() (
comparaccedilatildeo dos campos _FILIAL os primeiros do(s) iacutendice(s) do ERP ) que retorna apenas as comparaccedilotildees de Filial e por uacuteltimo a funccedilatildeo RetSqlDel que retorna o script para verificaccedilatildeo dos campos deletados (
que eacute o uacuteltimo campo das chaves de iacutendice do ERP utilizando TopConnect )
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlCond() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de
modo que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute
retorna os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLDEL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLDEL ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlDel() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo D_E_L_E_T_ da(s) tabela(s) passada(s) como paracircmetro
Observaccedilotildees
A ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do banco para efeitos de performance Para ganharmos performance
nas Querys devemos utilizar a funccedilatildeo RetSqlDEl() na montagem das ultimas consistecircncias da claacuteusula WHERE de uma Query
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlDel() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo
que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna
os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLFIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLFIL ( lt cAliases gt [ cCompFil ] ) --gt cSQlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
cCompFil Caracter
Atraveacutes de cCompFil eacute possiacutevel especificar uma Filial FIXA a ser comparada com os campos FILIAL do(s) alias(es) passados no paracircmetro cAliases
Caso natildeo informado os campos _FILIAL da(s) tabela(s) passadas como paracircmetro em cAliases seratildeo comparados com o retorno da funccedilatildeo xFilial() de
cada alias respectivamente
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo filial atual ( xFilial ) de acordo com o modo de abertura do arquivo no ERP ( X2_MODO )
Observaccedilatildeo
Devemos atentar ao fato que a funccedilatildeo RetSqlFil() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo que estes
alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna os
nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLTAB
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLTAB ( lt cAliasList gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliasList Caracter String contendo um ou mais alias separados por virgula a terem seus nomes fiacutesicos determinados
Retorno
Tipo Descriccedilatildeo
Caracter String contendo nomes fisicos e alias identificadores dos aliases recebidos como paracircmetro
Descriccedilatildeo
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
10
Versatildeo 710 Versatildeo 811 LIB WEBEX
As aplicaccedilotildees web desenhadas para utilizar a Infra-Estrutura APWEBEX contam com o recurso de Envio simultacircneo de Html ao Browser durante o processamento de uma paacutegina Advpl-ASP ( APH eou AHU )
Este recurso eacute habilitado atraveacutes do Protheus IDE nas opccedilotildees de configuraccedilatildeo de compilaccedilatildeo do ambiente em questatildeo mais especificamente habilitado atraveacutes do CheckBox [ ] Exibir conteuacutedo do Advpl ASP
progressivamente no Browser
Ao habilitamos esta configuraccedilatildeo todos os arquivos APH e AHU satildeo parseados fazendo internamente o uso da funccedilatildeo HttpSend() de modo que mesmo antes do processamento estar concluiacutedo o Html gerado jaacute estaacute
sendo enviado agraveo Browser qoe o solicitou
A utilizaccedilatildeo deste recurso provecirc um ganho de performance subtancial na aplicaccedilatildeo final Todos os projetos desenvolvidos com esta tecnologia ( Infra-Estrutura APWEBEX ) devem ter esta configuraccedilatildeo de compilaccedilatildeo
habilitada no IDE Vale lembrar que caso este recurso natildeo esteja habilitado ao habilitaacute-lo os arquivos aph e ahu do projeto necessitam ser recompilados para que esta configuraccedilatildeo tenha o efeito desejado
Pode existir a necessidade de um processamento de um APH ou AHU natildeo enviar o script Html gerado diretamente ao Browser Para tal situaccedilatildeo podemos desabilitar temporariamente este recurso de envio de html
progressivo em tempo de execuccedilatildeo permitindo assim por exemplo uma funccedilatildeo chamar em sequecircncia dois arquivos APH um para gerar um conteuacutedo Html a ser enviado via e-mail armazenado em uma variaacutevel
Advpl e outro APH para a montagem de uma tela de status que seraacute enviada agraveo Browser solicitante
Para habilitar eou desabilitar o envio simultacircneo do Script HTML agraveo browser em tempo de execuccedilatildeo utilize a funccedilatildeo HttpSetPart()
09 Configuraccedilotildees especiacuteficas APWEBEX
Revisatildeo 26042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Ao utilizarmos as funccedilotildees de Infra-estrutura APWEBEX existem recursos da lib que exigem uma configuraccedilatildeo adicional para serem utilizados
Envio de e-mail automaacutetico atraveacutes da Rotina de Tratamento de Erro do Site
Em caso de erro fatal na aplicaccedilatildeo Web a proacutepria rotina de tratamento de erro pode ser configurada para enviar um e-mail agraveo Administrador do sistema Para tal eacute necessaacuterio inserir as chaves abaixo na seccedilatildeo
do ambiente em uso para o site
ErrorSMTP= (endereccedilo do servidor SMTP a ser usado para o envio do e-mail )
ErrorMail= ( um ou mais endereccedilos de e-mail a receber op e-mail de erro separados por virgula )
ErrorFrom= ( um e apenas um endereccedilo de e-mail a ser usado como remetente do aviso de erro )
ErrorLogin = ( nome de usuario de login no servidor de SMTP caso necessaacuterio )
ErrorPassword= ( senha do usuario de login no servidor de SMTP caso necessaacuterio )
WebAdmin - Login alternativo
A infra-estrutura APWEBEX exige um usuaacuterio e senha para entrar no moacutedulo de administraccedilatildeo WebAdmin Para validar o login eacute utilizado o arquivo de senhas do ERP O usuaacuterio deve ser o Administrador ou
pertencer ao grupo de administradores para ter acesso agraveo WebAdmin Caso natildeo seja viaacutevel usar este arquivo de senhas para validar o login podemos inserir uma chave adicional ( AdmLogin ) no Environment em uso
pela aplicaccedilatildeo Web e configurar nela a senha do usuaacuterio Administrador para login no WebAdmin Caso esta chave seja configurada o arquivo de senhas do ERP natildeo seraacute utilizado para validar o login no WebAdmin
AdmLogin= ( senha do Administrador para logar no WebAdmin )
Pasta alternativa para upload de Rpo via WebAdmin No WebAdmin eacute possiacutevel utilizar uma configuraccedilatildeo especiacutefica para a troca do repositoacuterio de objetos em uso no site sem que seja necessaacuterio parar o servidor para isso Por default a pasta de upload chama-se
SwapRPO e deve existir na estrutura de diretoacuterio do ambiente utilizado a partir do diretoacuterio raiz do ambiente ( RootPath )
RpoUpload= ( pasta de upload alternativa a partir do RootPath do ambiente )
10 Recomendaccedilotildees finais
Revisatildeo 17122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Para todo o desenvolvimento de soluccedilotildees temos em matildeos uma diversidade de recursos desenhados para melhor atender agraves necessidades e adequar-se agraves caracteristicas da aplicaccedilatildeo Dada a flexibilidade dos recursos
recomenda-se aos desenvolvedores adotarem um padratildeo de desenvolvimento e ter em foco a eficiecircncia da aplicaccedilatildeo final tanto no aspecto funcional como na codificaccedilatildeo
Lanccedilando matildeo da experiecircncia em desenvolvimento de aplicaccedilotildees web adquiridas nos uacuteltimos anos nos toacutepicos abaixo estatildeo relacionadas algumas medidas tomadas no desenvolvimento de aplicaccedilotildees que nos satildeo muito
uacuteteis no decorrer de um projeto
Nomenclatura de Funccedilotildees
Para o desenvolvimento de aplicaccedilotildees web foi criado o Statement WEB FUNCTION para a declaraccedilatildeo de funccedilotildees referentes agrave projetos web Este comando na praacutetica apenas prefixa a declaraccedilatildeo da funccedilatildeo com
W_ poreacutem a sua utilizaccedilatildeo identifica que a funccedilatildeo em questatildeo foi construiacuteda uacutenica e exclusivamente para ser chamada a partir de uma requisiccedilatildeo HTTP Em adendo agrave este devemos utilizar os comandos WEB
EXTENDED INIT END disponivels no Include apwebexch para proteger a funccedilatildeo de ser chamada em um ambiente que natildeo o APWEBEX
Separando a Interface do Processamento
Ao desenvolver utilizando Advpl ASP paacuteginas APH AHU recomenda-se separar o processamento da Interface do seguinte modo Criar uma Web Function para a chamdada de umna paacutegina com conteuacutedo
dinacircmico via link apw e um arquivo APH ou AHU de mesmo nome que seraacute chamado internamente de modo que o coacutedigo-fonte escrito na Web Function seja responsaacutevel para gerar as informaccedilotildees a serem
disponibilizadas para o usuaacuterio e o APH contenha apenas a maacutescara destas informaccedilotildees e o miacutenimo de instruccedilotildees Advpl possiacutevel para a montagem da paacutegina Este processo facilita a manutenccedilatildeo de amobos
os coacutedigos pois o Web Designer que iraacute realizar um ajuste no APH natildeo teraacute que desviar do fonte Advpl inserido na paacutegina e o Analista Programador que faraacute a manutenccedilatildeo no coacutedigo Advpl preocupar-se-aacute apenas
com o coacutedigo responsaacutevel para a geraccedilatildeo dos dados que seratildeo mascarados
Utilizaccedilatildeo das Funccedilotildees de Infra-Estrutura
Atraveacutes dos comandos e funccedilotildees disponibilizadas na Infra-Estrutura APWEBEX natildeo tecircmos a necessidade de recriar partes comuns de coacutedigo para todos os projetos que se utilizem desta tecnologia aleacutem de permitir
atraveacutes de pontos de entrada estrategicamente colocados na ferramenta um niacutevel altiacutessimo de customizaccedilatildeo para os projetos desenvolvidos com esta tecnologia de maneira praacutetica e objetiva
11 Monitoramento de Sites em WEBEX
Revisatildeo 17122003
Abrangecircncia
LIB WEBEX
O Objetivo de uma funccedilatildeo de Monitoramento de Sites eacute testar as funcionalidades baacutesicas de um site retornando uma mensagem HTML preacute-definida indicando que estaacute tudo certo e em caso de erro uma
mensagem que procure identificar o que estaacute de errado
Para sites desenvolvidos em Protheus utilizando a tecnologia WEBEX devemos criar uma funccedilatildeo especiacutefica para o site que iraacute determinar se o mesmo estaacute operacional Esta funccedilatildeo seraacute chamada atraveacutes de link
apw
Vejamos o exemplo abaixo escrito para um site cujas bases de dados estatildeo num SQL acessadas via TopConnect Neste exemplo a funccedilatildeo chamada seraacute httpservidorU_SiteMonitorapw e caso esteja tudo certo
ela retornaraacute a string (SITE OK) seguido da data e horaacuterio da execuccedilatildeo da rotina Qualquer retorno diferente disto poderaacute indicar uma anomalia no funcionamento do site
Quando hospedado um site utilizando esta tecnologia no DataCenter da Makira esta informaccedilatildeo gerada pela rotina deve ser passada agraveo depto de infra-estrutura que configuraraacute um software Monitor de Sites que iraacute
realizar a cada um minuto uma requisiccedilatildeo agrave url especificada e iraacute emitir um alerta ao Departamento para que seja verificado o site caso haja alguma falha na resposta include protheusch
include apwebexch
User Function SiteMonitor()
Local cQuery nQtdRec
Verifica se a working Thread estaacute conectada com o TOP
If TCIsConnected()
Return Working Thread perdeu a conexatildeo com o TOP
Endif
Verifica se as tabelas principais estatildeo abertas
If select(SA1)=0
Return Tabela SA1 natildeo estaacute aberta
Endif
If select(SC5)=0
Return Tabela SC5 natildeo estaacute aberta
Endif
Executa uma query de contagem de registros de uma tabela do sistema
cQuery = SELECT count() as QTDREC from SA1010
OPEN QUERY cQuery ALIAS TMPCOUNT
nQtdRec = TMPCOUNT-gtQTDREC
CLOSE QUERY TMPCOUNT
If nQtdRec=0
11
Return Falha na Contagem de registros Query SA1
Endif
Se estaacute tudo certo retorna um HTML informando que estaacute tudo OK
Return (SITE OK) +dtos(date())+ +time()
Comandos - CLOSE QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CLOSE QUERY cAlias
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAlias Caracter Alias sob o qual o cursor da Query foi aberto Caso o alias passado como paracircmetro natildeo se encontre aberto a funccedilatildeo natildeo gera nenhuma ocorrecircncia de
erro
Descriccedilatildeo
Atraveacutes do comando Close Query realizamos o fechamento de uma query aberta atraveacutes do comando OPEN QUERY
ATENCcedilAtildeO Uma query aberta pelo comando OPEN QUERY deve ser fechada pelo comando CLOSE QUERY Poderiacuteamos fechar o alias aberto atraveacutes de uma Query simplesmente com a funccedilatildeo
DbCloseArea() poreacutem isto deixaria em aberto elementos internos de controle criados pelo comando OPEN QUERY
Comandos - OPEN QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
OPEN QUERY ltcQuerygt ALIAS ltcAliasgt [ [NOCHANGE] ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcQuerygt Caracter cQuery corresponde agrave String contendo a Query a ser executada no banco de dados
ALIAS ltcAliasgt Caracter cAlias corresponde ao nome do alias sob o qual o cursor de retorno dos dados pesquisados seraacute aberto no ambiente Advpl Natildeo pode ser especificado
um nome de alias jaacute em uso senatildeo a aplicaccedilatildeo seraacute finalizada com a ocorrecircncia de erro Alias already in Use
[NOCHANGE] Caracter Caso especificada a claacuteusola NOCHANGE na abertura da query a string em cQuery natildeo seraacute submetida agrave funccedilatildeo ChangeQuery()
Descriccedilatildeo
Atraveacutes do comando OPEN QUERY realizamos a abertura de uma Query de busca no Banco de Dados atraveacutes do RDD TOPCONN retornando os dados consultados atraveacutes de um ALIAS Advpl
Caso a Query nao possa ser aberta por erro de sintaxe devido agrave thread atual natildeo estar conectada com o TopConnect ou outro erro seraacute gerado um log de erro informando o Alias o Stack ( Pilha de Chamadas ) de
execucatildeo e o conteuacutedo da Query para Debug
OBSERVACcedilOtildeES IMPORTANTES
Na montagem da string da Query devemos especificar os comandos SQL alias e nomes de campos em letras maiuacutesculas
Quando utilizamos o comando OPEN QUERY natildeo precisamos passar a expressatildeo da Query atraveacutes da funccedilatildeo ChangeQuery() Este proceduimento jaacute eacute realizado internamente pelo comando OPEN
QUERY Para que a query natildeo seja submetida agrave funccedilatildeo ChangeQuery() devemos utilizar o paracircmetro NOCHANGE
A utilizaccedilatildeo deste comando eacute impliacutecita agrave LIB APWEBEX e necessita da utilizaccedilatildeo do include Apwebexch
Comandos - WEB EXTENDED END
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED END ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando para fechar uma seccedilatildeo aberta pelo comando WEB EXTENDED INIT Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do
comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
Comandos - WEB EXTENDED INIT
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED INIT ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando juntamente com o comando WEB EXTENDED END quando montamos uma funcatildeo ( Web Function ) que foi construiacuteda para ser chamada a partir de um Web Browser quando nos
utilizamos das funccedilotildees de Infra-Estrutura APWEBEX
Atraveacutes dele eacute realizada uma preacute-validaccedilatildeo que certifica que a execuccedilatildeo da funccedilatildeo somente seraacute realizada caso a thread atual seja realmente uma Thread montada no ambiente WEBEX aleacutem de podermos inserir uma
preacute-validaccedilatildeo (START) de execuccedilatildeo especiacutefica para esta funccedilatildeo
Caso seja especificada uma funccedilatildeo na claacuteusula START a mesma deveraacute retornar uma String Retornando uma String em branco o processamento da funccedilatildeo original seraacute efetuado normalmente Caso a funccedilatildeo retorne
uma string natildeo-vazia esta string seraacute retornada para a variaacutevel cHtml e o processamento do programa seraacute desviado para a linha do coacutedigo-fonte imediatamente posterior agraveo comando WEB EXTENDED END
Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
12
Infra-Estrutura APWEBEX - EnvUserAPL - Exemplo de Uso com ERP
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo praacutetico abaixo utilizamos em um coacutedigo fonte Advpl os pontos de entrada disponibilizados na Infra-Estrutura APWEBEX para realizar a preparaccedilatildeo de um ambiente ERP Reset de Ambiente
finalizaccedilatildeo de Thread finalizaccedilatildeo de sessions por time-out e customizaccedilatildeo de mensagem de erro para o desenvolvimento de um projeto de Web Site integrado com o ERP Microsiga
Devemos adotar como padratildeo para projetos que utilizam APWEBEX a criaccedilatildeo do arquivo EnvUserapl especificamente para a definiccedilatildeo dos pontos de entrada utilizados pela Infra-Estrutura
APWEBEX e devemos apenas compilar os fontes dos pontos de entrada realmente necessaacuterios agraveo projeto INCLUDE PROTHEUSCH
INCLUDE APWEBEXCH
====================================================================================
Exemplo de Arquivo de Lib de Projeto APWEBEX utilizando os pontos de entrada
da lib para preparaccedilatildeo de ambiente reset de ambiente e tratamento de erro
utilizando APWEBEX em conjunto com o ERP Microsiga
====================================================================================
----------------------------------------------------------------------------
Ponto de Entrada StartWebEx( NIL ) =gt T ou F
Ponto de entrada executado na inicializaccedilatildeo de cada Working Thread ( ONSTART )
Eacute a responsaacutevel por preparar o ambiente para atender agraves requisiccedilotildees WEB de links apw
Natildeo recebe paracircmetro algum da lib e deve retornar T caso tenha inicialziado com sucesso
ou F em caso de falha de inicializaccedilatildeo
----------------------------------------------------------------------------
USER Function StartWebEx()
Prepara o Ambiente ERP
PREPARE ENVIRONMENT
EMPRESA 01
FILIAL 01
TABLES ZX1ZX2ZX3ZX4ZZ1ZZ2ZZ3ZZ4ZZ5
Return T
-------------------------------------------------------------------------------
Ponto de Entrada ConnectWebEx(cFnName) =gt cHtml ou
Ponto de entrada executado imediatamente antes do processamento de uma requisiccedilatildeo de um link APW
Recebe como paracircmetro o nome da funccedilatildeo a ser executada passada no link
Deve retornar uma String que seraacute retornada ao ao Browser solicitante Caso retorne uma string
em branco (vazia) a funccedilatildeo originalmente solicitada eacute executada pela lib
Caso contraacuterio a funccedilatildeo original natildeo eacute executada e a string retornada eacute enviada ao Browser
-------------------------------------------------------------------------------
USER Function ConnectWebEx(cFnName)
Local cHtmlConn =
conout(Vou executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada ResetWebEx(cFnName) =gt cHtml ou
Funccedilatildeo chamada imediatamente Apos a execuccedilatildeo de uma requisiccedilatildeo APW
Recebe como paracircmetro o nome da funccedilatildeo executada e permite tambeacutem que seja acrescentado
algo a mais no Html a ser retornado ao Browser
-------------------------------------------------------------------------------
USER Function ResetWebEx(cFnName)
Local cHtmlConn =
conout(Terminei de executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada FINISHWEBEX()
Funccedilatildeo chamada no fechamendo do ambiente de uma working Thread Apos a execuccedilatildeo deste
a Thread utilizada eacute eliminada da memoacuteria
-------------------------------------------------------------------------------
USER Function FINISHWEBEX()
conout(Finalizando a Working Thread)
Return
-------------------------------------------------------------------------------
Ponto de Entrada ENDSESSION(cSessionId) =gt NIL
Ponto de entrada chamado em uma working Thread quando a session de um usuaacuterio seraacute
eliminada da memoacuteria por time-out Recebe como parametro o Id de sessions de usuario
que estaacute sendo finalizado
-------------------------------------------------------------------------------
USER Function ENDSESSION(cSessionId)
Conout(Sesssion +cSessionId+ limpa da memoacuteria)
Return
----------------------------------------------------------------------------
Ponto de Entrada WebExError(ecErrorLogcHtml) =gt cCustomHtml ou
Esta funcao eacute chamada pela rotina de tratamento de erro WEBEX quando ocorre um erro fatal
e permite que seja retornado um Html de tratamento de erro diferenciado Ela recebe como
parametro o objeto do erro a mensagem ASCII que foi acrescentada ao arquivo errorlog
e o Html original montado pela rotina de tratamento de erro default
IMPORTANTE Por sem um ponto de entrada executado em um momento criacutetico (tratamento
de erro ) esta funccedilatildeo deve ser o mais suscinta e simples possiacutevel natildeo utilizando
sessions banco de dados etc
----------------------------------------------------------------------------
USER Function WebExError(oErrorcErrorLogcHtml)
Local cCustomHtml =
Monta mensagem de erro mais amigavel
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
13
Ocorreu um erro inesperado no
cCustomHtml += processamento desta paacutegina O Administrador do sistema seraacute notificado desta
cCustomHtml += ocorrecircncia Recomendamos fortemente que esta janela do navegador seja cCustomHtml += fechada e uma nova janela seja aberta para retornar agrave navegaccedilatildeo do site
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
Return cCustomHtml
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Nos exemplo abaixo utilizamos a funccedilatildeo escape() para formatar paracircmetros para inserir em uma URL cUrl = httplocalhostwebinfoapw
cPAram1 = Teste de Parametro 01-02
cPAram2 = reserva
cPAram3 = 1+2+3
cUrl += Par01= + escape(cPAram1) + ampPAr02= + escape(cPAram2) + ampPar03= + escape(cPAram3)
O conteudo de cUrl deveraacute ser httplocalhostwebinfoapwPar01=Teste20de20Parametro2001-02ampPAr02=23reserva23ampPar03=12B22B3
proacuteprio para a monyahem de um link
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETJOBPROFSTRING
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
O exemplo abaixo executado em uma thread iniciada a partir de um JOB WEBEX recupera algumas configuraccedilotildees atuais em uso para este JOB cJobType = GetJobProfString(type(empty) )
cInstances = GetJobProfString(Instances(empty) )
cInacTime = GetJobProfString(InactiveTimeout(default) )
cExpTime = GetJobProfString(ExpirationTime(default) )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETPARVALUE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo satildeo montados dois arrays multi-dimensionais com 2 dimensotildees e satildeo realizadas buscas nos mesmos explorando todas as possibilidades de uso da funccedilatildeo GetParValue() Local aTeste1 =
Local aTeste2 =
Aadd(aTeste1AliasTMP1)
Aadd(aTeste1Relacao2x3)
Aadd(aTeste2AliasTMP2)
Aadd(aTeste2Info---Informaccedilatildeo adicional---)
Busca apenas no array ateste1
cAlias = GetParValue(ALIASaTeste1)
cRelacao = GetParValue(RELACAOaTeste1)
cInfo = GetParValue(INFOaTeste1)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) (nao encontrado)
Busca apenas no array ateste2
cAlias = GetParValue(ALIASaTeste2)
cRelacao = GetParValue(RELACAOaTeste2)
cInfo = GetParValue(INFOaTeste2)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP2
conout(cRelacao) (nao encontrado)
conout(cInfo) ---Informaccedilatildeo Adicional---
Busca em ambos os Arrays
Primeiro no aTeste1 e depois no aTeste2
cAlias = GetParValue(ALIASaTeste1aTeste2)
cRelacao = GetParValue(RELACAOaTeste1aTeste2)
cInfo = GetParValue(INFOaTeste1aTeste2)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) ---Informaccedilatildeo Adicional---
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo abaixo geramos a string com o DUMP de um arquivo HTML salvo na pasta WEB a partir do RootPath do Environment O Dump do arquivo seraacute mostrado no Console do servidor e no Web
Browser que solicitou a funccedilatildeo U_DumpTestapw
include protheusch
include apwebexch
User Function DumpTest()
Local cHtml =
Local cTXTFile =
Local cDump =
WEB EXTENDED INIT cHtml
14
Le o arquivo
cTTXFile = memoread(WebDefaulthtm)
Gera a string com o Dump do arquivo
cDump = HExStrDump(cTTXFile)
Mostra o Dump no console
conout(cDump)
Gera HTML para a visualizaccedilatildeo do DUMP
cHtml = VarInfo(DUMPHtmlnotags(cDump)tf)
WEB EXTENDED END
Return cHtml
Exemplo do Texto mostrado no Console
HexSTRDump ( String 237 Start 1 Length 237 )
-------------------------------------------------------------------------------
3C 48 54 4D 4C 3E 3C 48 45 41 44 3E 0D 0A 3C 4D | ltHTMLgtltHEADgt__ltM
45 54 41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 | ETA HTTP-EQUIV=
43 6F 6E 74 65 6E 74 2D 54 79 70 65 22 20 63 6F | Content-Type co
6E 74 65 6E 74 3D 22 74 65 78 74 2F 68 74 6D 6C | ntent=texthtml
22 0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 | __ltMETA HTTP-EQ
55 49 56 3D 22 70 72 61 67 6D 61 22 20 63 6F 6E | UIV=pragma con
74 65 6E 74 3D 22 6E 6F 2D 63 61 63 68 65 22 3E | tent=no-cachegt
0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 55 | __ltMETA HTTP-EQU
49 56 3D 22 45 78 70 69 72 65 73 22 20 63 6F 6E | IV=Expires con
74 65 6E 74 3D 22 2D 31 22 3E 0D 0A 3C 4D 45 54 | tent=-1gt__ltMET
41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 52 65 | A HTTP-EQUIV=Re
66 72 65 73 68 22 20 63 6F 6E 74 65 6E 74 3D 22 | fresh content=
30 3B 20 75 72 6C 3D 2F 77 5F 77 45 78 30 30 30 | 0 url=w_wEx000
2E 61 70 77 22 3E 3C 2F 48 45 41 44 3E 0D 0A 3C | apwgtltHEADgt__lt
2F 48 45 41 44 3E 3C 2F 48 54 4D 4C 3E | HEADgtltHTMLgt
-------------------------------------------------------------------------------
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HTMLNOTAGS
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo a funccedilatildeo HtmlNoTags eacute utilizada para permitir a utilizaccedilatildeo de caracteres especiais no conteuacutedo de um input para um formulaacuterio Html Local cHtml =
Local cInput =
Conteudo do campo com tags HTML intepretaacuteveis
cInput =
Ao montar o Input aplicar a HtmlNoTags() ao conteudo do mesmo
cHtml +=
+HtmlNoTags(cIn
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
15
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos a funccedilatildeo RetSqlAce para montar uma query de busca por tiacutetulo de uma determinada informaccedilatildeo considerando todas as possibilidades de acentuaccedilatildeo independentemente de como o
banco foi alimentado eou a string de busca foi digitada
IMPORTANTE Na expressatildeo da Query o campo da tabela deve ser passado pela funccedilatildeo LOWER do BAnco pois a funccedilatildeo retsqlace monta a string para busca com letras minuacutesculas cFind = acentuaccedilatildeo
cQuery = SELECT FROM + RetSqlTab(ZZ1)
cQuery += WHERE LOWER(ZZ1_TITULO) LIKE +RetSqlAce(cFind)+
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VALTOSQL
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = + ValToSql(02)
cQuery += AND FA2_DTINC lt= + ValToSql(date())
O exemplo acima caso escrito de forma a realizar as conversotildees especiacuteficas para cada tipo de conteuacutedo seria o equivalemte ao coacutedigo abaixo
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = 02
cQuery += AND FA2_DTINC lt= + DTOS( date() )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VARINFO
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo eacute gerada uma string HTML com as informaccedilotildees do retorno da chamada de duas funccedilotildees baacutesicas da Linguagem Advpl User Function InfoTeste()
Local cHtml =
cHtml += VarInfo(lsquoDatersquodate())
cHtml += VarInfo(lsquoTimelsquotime())
Return cHtml
Deve ser gerado um echo no Console do Servidor parecido com este abaixo
Date -gt D ( 10) [08122003]
Time -gt C ( 8) [201748]
Infra-Estrutura APWEBEX - Exemplo das funccedilotildees de acentuaccedilatildeo ApWebEX
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo vemos a diferenccedila de comportamento entre as funccedilotildees baacutesicas da Linguagem Advpl Upper() e Lower() e a funccedilatildeo de Infra-estrutura Capital() em relaccedilatildeo agraves funccedilotildees da Infra-estrutura
APWEBEX UpperAce() LowerAce() e CApitalAce() quando utilizamos caracteres acentuados cRetorno =
cFrase = natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
cRetorno += Original + cFrase + CRLF
cRetorno += Upper() + upper(cFrase) + CRLF
cRetorno += Lower() + lower(cFrase) + CRLF
cRetorno += Capital() + capital(cFrase) + CRLF
cRetorno += UPPERACE() + UPPERACE(cFrase) + CRLF
cRetorno += LOWERACE() + LOWERACE(cFrase) + CRLF
cRetorno += CAPITALACE() + CAPITALACE(cFrase) + CRLF
Neste ponto a variaacutevel cRetorno deveraacute conter
Original natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
Upper() NatildeO Haacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSotildeES PARA O INEXPLICaacuteVEL
Lower() natildeo haacute explicaCcedilOtildees considerando excessotildees para o inexplicaacutevel
Capital() Natildeo Haacute ExplicaCcedilOtildees Considerando Excessotildees Para O Inexplicaacutevel
UPPERACE() NAtildeO HAacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSOtildeES PARA O INEXPLICAacuteVEL
LOWERACE() natildeo haacute explicaccedilotildees considerando excessotildees para o inexplicaacutevel
CAPITALACE() Natildeo Haacute Explicaccedilotildees Considerando Excessotildees Para O Inexplicaacutevel
Infra-Estrutura APWEBEX - Exemplos das funccedilotildees NTOC e CTON
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos as funccedilotildees cton e ntoc para realizar conversotildees de nuacutemeros em base decimal para outras bases numeacutericas e vice-versa
16
nNum1 = CTON(011010012) Converte binaacuterio para decimal
nNum2 = CTON(00DA25FE16) Converte Hexadecimal para decimal
nNum1++ Soma 1 ao numero em nNum1
nNum2++ Soma 1 ao numero em nNum2
cNum1 = NtoC(nNum128) Converte para binaacuterio novamente
cNum2 = NtoC(nNum2168) Converte para Hexa novamente
-------------------------------------------------------------------------
Ao final do programa cNum1 seraacute 01101010 e cNum2 seraacute 00DA25FF
-------------------------------------------------------------------------
APWEXADDERR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
APWEXADDERR ( [ cTitulo ] [ cInfo ] ) --gt T
Paracircmetros
Argumento Tipo Descriccedilatildeo
cTitulo Caracter cTitulo corresponde a um tiacutetulo identificador da informaccedilatildeo Deve ter no maacuteximo 20 caracteres Os caracteres acima da vigeacutesima posiccedilatildeo seratildeo
ignorados
cInfo Caracter cInfo corresponde agrave Informaccedilatildeo a ser acrescentada ao ERRORLOG em caso de erro
Retorno
Tipo Descriccedilatildeo
Loacutegico Esta funccedilatildeo sempre retorna T
Descriccedilatildeo
Atraveacutes da funccedilatildeo ApWExAddErr() podemos acrescentar uma string de informaccedilotildees adicionais em um buffer em memoacuteria descarregado na geraccedilatildeo do ERRORLOG no caso de uma ocorrecircncia de erro fatal na
working thread atual
Caso a funccedilatildeo seja chamada sem nenhum paracircmetro a uacuteltima ocorrecircncia acrescentada pela funccedilatildeo eacute eliminada da pilha interna de informaccedilotildees
ATENCcedilAtildeO Esta funccedilatildeo deve ser apenas utilizada em casos de necessidade de obtenccedilatildeo de informaccedilotildees especiacuteficas acerca de uma ocorrecircncia de erro natildeo reproduzida em ambiente de testes eou natildeo depuraacutevel pois
seu uso desnecessaacuterio prejudica a performance da aplicaccedilatildeo final
CAPITALACE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CAPITALACE ( lt cString gt ) --gt cStrCapital
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida
Retorno
Tipo Descriccedilatildeo
Caracter String resultante convertida para munuacutesculo com as primeiras letras das palavras significantes em maiuacutesculo
Descriccedilatildeo
Semelhante agrave funccedilatildeo de Infra-estrutura Capital() poreacutem converte tambeacutem caracteres acentuados
A funccedilatildeo CapitalAce() converte todos os caracteres de uma String para minuacutesculo e a primeira letra das palavras significantes para maiuacutesculo semelhante agrave funccedilatildeo Capital() poreacutem considera e converte tambeacutem
caracteres acentuados em OEM eou ANSI
CTON
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CTON ( lt cString gt lt nBase gt ) --gt nNumero
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave representaccedilatildeo de um nuacutemero em outra base numeacuterica compreendida entre 2 e 36
nBase Numeacuterico nBase corresponde agrave base numeacuterica utilizada pelo numero representado em cString
Retorno
Tipo Descriccedilatildeo
Numeacuterico Nuacutemero recebido como paracircmetro em notaccedilatildeo decimal ( Base 10 )
Descriccedilatildeo
Converte um nuacutemero representado em String de base 2 a 36 para um nuacutemero em base decimal (10)
Observaccedilatildeo Importante
Satildeo considerados caracteres vaacutelidos para compor um nuacutemero de base 36 os 10 algarismos numeacutericos de 0 a 9 e os 26 caracteres alfabeacuteticos maiuacutesculos compreendidos entre A e Z Quaisquer caractetes presentes na
String de paracircmetro fora desta faixa de dados eou fora da base ( por exemplo uma conversatildeo de string base 2 - binaacuterio - da string 01001020 ) retornaraacute -1 ( menos um )
ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
ESCAPE ( lt cString gt ) --gt cEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute uma sequecircncia de caracteres a ser processada
Retorno
Tipo Descriccedilatildeo
Caracter cEscaped corresponde agrave string original com os caracteres reservados utilizando a notaccedilatildeo HH
Descriccedilatildeo
A funccedilatildeo Escape() deve ser utilizada para realizar conversotildees de caracteres especiais e reservados quando da necessidade de passagem de paracircmetros via URL
A sintaxe de uma requisiccedilatildeo via URL para a passagem de paracircmetros eacute
(link)param=conteudoampparam2=conteudo2amp
Quando passamos paracircmetros via url devemos tomar o cuidado de natildeo utilizar caracteres reservados e especiais nos nomes e conteuacutedos de paracircmetros Para realizar estas conversotildees utilizamos a funccedilatildeo Escape()
17
EXECINPAGE
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXECINPAGE ( lt cAPHPage gt ) --gt cHTMLPage
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAPHPage Caracter Corresponde agraveo nome do APH que deve ser executado sem a extensatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cHtmlPage corresponde agrave string HTML gerada pela paacutegina APH AHU
Descriccedilatildeo
Atraveacutes da funccedilatildeo ExecInPage() executamos uma paacutegina APH passada como paracircmetro A funccedilatildeo deveraacute retornar a String HTML correspondente agrave paacutegina processada
Poreacutem a funccedilatildeo ExecInPage() realiza tratamentos adicionais padratildeo relacionaodo agraveo comportamento dos Projetos WEB referentes agrave customizaccedilotildees da segunte maneira
1 Primeiro eacute verificado se existe uma paacutegina AHU compilada com o nome cAPHPage Caso exista a mesma seraacute executada pela execinpage
2 Caso natildeo exista AHU com este nome eacute procurado pelo APH Caso o APH exista o mesmo seraacute executado pela ExecInPage
3 Caso natildeo existam no RPO atual o APH nem o AHU com o nome especificado no paracircmetro cAPHFile o processamento eacute abortado com a ocorrecircncia de erro [APWEXERR_0007] APH page
[ltcAPHPagegt] not found in RPO 4 Antes de executar o APH ou AHU identificado nos passos anteriores eacute verificado se existe um ponto de entrada ( User Function ) compilado com o mesmo nome do APH Caso exista o ponto de
entrada eacute executado Ele deveraacute retornar uma String HTML Se for retornada alguma string a funccedilatildeo retorna a tring retornada e natildeo processa o APH AHU Observaccedilatildeo A funccedilatildeo ExecInPage natildeo iraacute executar este
tratamento da User Function com o nome de cAPHPage caso a funccedilatildeo ExecInPage() esteja sendo executada atraveacutes de uma USER FUNCTION
Observaccedilatildeo Importante - Envio parcial de HTML agraveo Browser A funccedilatildeo ExecInpage() juntamente com o APH compilado ao serem processados iratildeo tentar enviar o conteuacutedo HTML para o Browser solicitante durante o processamento de modo que a funccedilatildeo normalmente iraacute
retornar uma String vazia
Caso seja necessaacuteria a execuccedilatildeo de uma paacutegina APH ou AHU e o natildeo-envio da mesma para o Browse por exemplo para a geraccedilatildeo de um coacutedigo HTML a ser enviado via e-mail revemos utilizar a funccedilatildeo
HttpSetPart() realizando uma chamada da mesma antes da ExecInPage() passando o paracircmetro F para desabilitar temporariamente o envio de HTML simultacircneo ao Browser e apoacutes a execuccedilatildeo da ExecInPage()
devemos re-habilitar o envio simultacircneo atraveacutes da chamada da funccedilatildeo HttpSetPart() com o paracircmetro T
EXISTPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTPAGE ( lt cAphFile gt ) --gt lFound
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAphFile Caracter Nome do arquivo APH sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Caracter Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistPage() para identificarmos no ambiente atual se um determinado arquivo APH encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistPage(teste)
conout(testeaph compilado neste RPO)
Else
conout(testeaph NAO compilado neste RPO)
Endif
EXISTUSRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTUSRPAGE ( lt cAhuFile gt ) --gt lExist
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAhuFile Caracter Nome do arquivo AHU sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Loacutegico Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistUSRPage() para identificarmos no ambiente atual se um determinado arquivo AHU encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistUSRPage(teste)
conout(testeahu compilado neste RPO)
Else
conout(testeahu NAO compilado neste RPO)
Endif
GETJOBPROFSTRING
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETJOBPROFSTRING ( lt cKey gt lt cDefault gt ) --gt cKeyValue
Paracircmetros
Argumento Tipo Descriccedilatildeo
cKey Caracter cKey corresponde agrave chave da seccedilatildeo de configuraccedilatildeo da Working Thread atual a ser retornada
cDefault Caracter Valor default (string) a ser retornado pela funccedilatildeo caso a chave especificada natildeo sehja encontrada no INI
Retorno
Tipo Descriccedilatildeo
Caracter Conteudo da Chave solicitada Caso a chave natildeo seja encontrada eacute retornado o conteudo de cDefault Caso esta funccedilatildeo natildeo seja executada a partir de uma Working Thread ela
18
retornaraacute uma string em branco ()
Descriccedilatildeo
Atraveacutes desta funccedilatildeo podemos recuperar as configuraccedilotildees do Job da Working Thread atual
GETWEXVERSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETWEXVERSION ( ) --gt cBuildId
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave String Identificadora da versatildeo no formato ltLIBgt VAAMMDDHHmm Vide Tabela A
Descriccedilatildeo
Esta funccedilatildeo natildeo requer argumentos e retorna o Identificador do build versatildeo de Release das funccedilotildees de Infra-Estrutura APWEBEX
Observaccedilatildeo A data informada pela versatildeo natildeo corresponde agrave ultima compilaccedilatildeo do RPO de um determinado Projeto WEB mas sim agrave data de release da LIB de Infra-Estrutura APWEBEX
Tabela A
Simbolo Descriccedilatildeo
AA Ano de geraccedilatildeo da Lib
MM Mecircs da geraccedilatildeo da Lib
DD Dia da geraccedilatildeo da Lib
HH Horaacuterio da geraccedilatildeo da Lib
mm Minutos do Horaacuterio de Geraccedilatildeo da Lib
(HTTP) Indica que a versatildeo foi compilada com a configuracatildeo de envio progressivo de HTML simultacircneo para o Browse Esta opccedilatildeo eacute imprescindiacutevel para projetos que se utilizam desta LIB
Por exemplo
APWEBEX Version 30312021900 (HTTP)
HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HEXSTRDUMP ( lt cString gt [ nStart ] [ nLength ] ) --gt cHExDump
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser lida para a geraccedilatildeo do Dump
nStart Numeacuterico Corresponde agrave posiccedilatildeo inicial de cString a ser considerada para a geraccedilatildeo do Dump a partir da posiccedilatildeo 1 Caso este paracircmetro natildeo seja informado o
Default eacute a posiccedilatildeo 1 da string
nLength Numeacuterico nLength corresponde agraveo tamanho a ser considerado para a geraccedilatildeo do DUMP a partir da posiccedilatildeo inicial recebida em nStart Caso este paracircmetro natildeo
seja informado eacute considerado o tamanho ateacute o final da String
Retorno
Tipo Descriccedilatildeo
Caracter O retorno da funccedilatildeo corresponde agrave uma string Advpl formatadas em 16 bytes em hexadecimal por linha mais o separador pipe (|) mais os 16 caracteres em Ansi Os caracteres de
controle ( codigo ascii menor que 32 ) satildeo convertidos para visualizaccedilatildeo para o caractere underline (_)
Descriccedilatildeo
Atraveacutes da funccedilatildeo HexStrDump() podemos gerar uma string em Advpl em formato de Dump Hexadecimal a partir da string informada como paracircmetro a partir de uma determinada posiccedilatildeo da string considerando um
nuacutemero de bytes informado
Caso os paracircmetros nPosIni e nTamString natildeo sejam informados o dump gerado corresponde a string recebida como paracircmetro em sua totalidade
Observaccedilatildeo
Natildeo devemos pasar para a funccedilatildeo HexStrDump uma string maior que 240 Kb pois a geraccedilatildeo da String de dump eacute realizada em memoacuteria sendo a string final gerada em meacutedia 42 vezes maior que a string passada
como paracircmetro Caso a string passada como paracircmetro seja maior que 240 Kb a execuccedilatildeo seraacute abortada com a ocorrecircncia de erro fatal string size overflow
HTMLNOTAGS
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HTMLNOTAGS ( lt cStrHtml gt ) --gt cStrNoTags
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrHtml Caracter cStrHtml corresponde a uma String que natildeo pode conter caracteres Html interpretaacuteveis
Retorno
Tipo Descriccedilatildeo
Caracter String original com os caracteres interpretaacuteveis Html lt gt amp convertidos para caracteres natildeo-interpretaacuteveis
Descriccedilatildeo
A Funccedilatildeo HTMLNOTAGS converte as Tags interpretaacuteveis de uma String HTML para TAGS natildeo interpretaacuteveis Este recurso eacute normalmente utilizado quando precisamos montar um input Html com um conteudo que
nao pode ser interpretado pelo browser como uma Tag Esta funccedilatildeo apenas converte os caracteres lt ( menor que ) gt ( maior que ) amp ( e comercial ) e ldquo ( aspas duplas )
Recomenda-se fortemente que na montagem do value de um input html o conteuacutedo do mesmo seja colocado entre aspas duplas pois caso o conteuacutedo do value inicial do campo contenha aspas simples (
natildeo convertidas pela funccedilatildeo HtmlNoTags) isto poderaacute ocasionar perda de dados e erro de sintaxe no formulaacuterio Html
HTTPISWEBEX
Revisatildeo 12122003
Sintaxe
HTTPISWEBEX ( ) --gt lIsApWEBEX
Retorno
Tipo Descriccedilatildeo
Loacutegico A funccedilatildeo retornaraacute T caso o ambiente de execuccedilatildeo atual seja uma Working Thread WEBEX inicializada pela funccedilatildeo de infra-estrutura STARTWEBEX
Descriccedilatildeo
Atraveacutes da funccedilatildeo HttpIsWebEx() eacute possiacutevel identificarmos se o programa atual estaacute sendo executado atraveacutes de uma Working Thread inicializada utilizando-se as funccedilotildees de Infra-Estrutura APWEBEX
ISEMAIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
19
Sintaxe
ISEMAIL ( lt cEMail gt ) --gt lEmailOk
Paracircmetros
Argumento Tipo Descriccedilatildeo
cEMail Caracter cEmail corresponde a string a ser analizada contendo um e apenas um endereccedilo de e-mail
Retorno
Tipo Descriccedilatildeo
Caracter Retorna T caso a sring recebida como paracircmetro atenda agraves definiccedilotildees de nomenclatura vaacutelidos para um endereccedilo de e-mail
Descriccedilatildeo
Utilizada para validar e-mails em Advpl a funccedilatildeo ISEMAIL recebe como paracircmetro uma string contendo um e-mail retornando T caso a string esteja em um formaacuteto vaacutelido respeitando a regra para nomenclatura de
endereccedilos de e-mail
Regra Um e-mail eacute considerado vaacutelido caso seja iniciado por um caracter apenas contenha caracteres asc de a a z e 0 a 9 e os caracteres (arroba) (ponto) - ( hiacutefen) ou _ (underline) e deve conter uma e
apenas uma arroba e no minimo um ponto apos a arroba intercalado por um caracter
LOWERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
LOWERACE ( lt cString gt ) --gt cStrLower
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a sequecircncia de caracteres a ser convertida para letras minuacutesculas
Retorno
Tipo Descriccedilatildeo
Caracter String original em letras minuacutesculas
Descriccedilatildeo
A Funccedilatildeo LOWERACE converte todos os caracteres de uma String para ldquominusculordquo semelhante agrave funccedilatildeo LOWER() poreacutem considera e converte tambeacutem caracteres acentuados em ANSI
NTOC
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
NTOC ( lt nNumero gt lt nBase gt lt nTamStr gt ) --gt cString
Paracircmetros
Argumento Tipo Descriccedilatildeo
nNumero Numeacuterico nNumero eacute o valor numeacuterico em base devimal a ser convertido
nBase Numeacuterico nBase corresponde agrave base binaacuteria a ser utilizada para converter nNumero
nTamStr Numeacuterico nTamStr corresponde ao tamanho da string representando o numero na base desejada
Retorno
Tipo Descriccedilatildeo
Caracter cString corresponde ao numero convertido para a base numeacuterica especificada como paracircmetro
Descriccedilatildeo
A Funccedilatildeo NTOC converte um nuacutemero em notaccedilatildeo decimal para um nuacutemero representado por String utilizando uma base numeacuterica entre 2 e 36 preenchendo-o com ldquo0rdquo (zeros) agrave esquerda do tamanho especificado
Observaccedilatildeo O Paracircmetro nBase deve ser especificado com um nuacutemero entre 2 e 36 Caso seja passado como paracircmetro um nuacutemero base fora desta faixa o processamento eacute abortado com a ocorrecircncia de erro
[APWEXERR_0022] INVALID NTOC BASE [X] onde ltXgt foi a base passada como argumento
REDIRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
REDIRPAGE ( lt cUrl gt [ cTarget ] [ nTime ] ) --gt cScript
Paracircmetros
Argumento Tipo Descriccedilatildeo
cUrl Caracter Link para onde o script deve apontar o redirecionamento
cTarget Caracter Destino do redirecionamento Caso natildeo especificado o default eacute _self
nTime Numeacuterico Tempo (em segundos) de delay antes do redirecionamento ser executado
Retorno
Tipo Descriccedilatildeo
Caracter Script Html JavaScript que ao ser executado no Browser (client) chama a paacuteginaobjeto chamado no Link
Descriccedilatildeo
A funccedilatildeo RedirPage eacute utilizada quando desejamos devolver ao Browser um script que ao ser executado redirecionaraacute o Browser agrave abertura de um link passado como paracircmetro
RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLACE ( lt cStrFind gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrFind Caracter cStrFind corresponde agrave sequecircncia de caracteres a ser procurada podendo conter caracteres maiuacutesculos e minuacutesculos com ou sem acentuaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cStrQuery corresponde agrave string de busca a ser utilizada na query utilizando caracteres em minuacutesculo
Descriccedilatildeo
A funccedilatildeo RetSqlAce eacute utilizada para auxiliar de montagem de querys de busca de caracteres acentuados em bases de dados A funccedilatildeo automaticamente trata a string original removendo os acentos convertendo todos
os caracteres para minuacutesculas e trocando todas as vogais e cedilhas da string original por uma sequecircncia de caracteres acentuados em munuacutescilas para busca posicional
20
RETSQLCOND
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLCOND ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlCond() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga e o Makira Hypersite utilizando aliases de 3
caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar a filial atual ( xFilial ) de acordo com o modo do arquivo ( X2_MODO ) e para sempre desconsiderar
registros deletados
Observaccedilotildees
Esta funccedilatildeo foi mantida apenas por compatibilidade pois a ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do
banco para efeitos de performance Para ganharmos performance nas Querys devemos ao inveacutes de utilizar a funccedilatildeo RetSqlCond() utilizar como primeira clauacutesula WHERE o retorno da funccedilatildeo RetSqlFil() (
comparaccedilatildeo dos campos _FILIAL os primeiros do(s) iacutendice(s) do ERP ) que retorna apenas as comparaccedilotildees de Filial e por uacuteltimo a funccedilatildeo RetSqlDel que retorna o script para verificaccedilatildeo dos campos deletados (
que eacute o uacuteltimo campo das chaves de iacutendice do ERP utilizando TopConnect )
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlCond() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de
modo que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute
retorna os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLDEL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLDEL ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlDel() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo D_E_L_E_T_ da(s) tabela(s) passada(s) como paracircmetro
Observaccedilotildees
A ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do banco para efeitos de performance Para ganharmos performance
nas Querys devemos utilizar a funccedilatildeo RetSqlDEl() na montagem das ultimas consistecircncias da claacuteusula WHERE de uma Query
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlDel() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo
que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna
os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLFIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLFIL ( lt cAliases gt [ cCompFil ] ) --gt cSQlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
cCompFil Caracter
Atraveacutes de cCompFil eacute possiacutevel especificar uma Filial FIXA a ser comparada com os campos FILIAL do(s) alias(es) passados no paracircmetro cAliases
Caso natildeo informado os campos _FILIAL da(s) tabela(s) passadas como paracircmetro em cAliases seratildeo comparados com o retorno da funccedilatildeo xFilial() de
cada alias respectivamente
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo filial atual ( xFilial ) de acordo com o modo de abertura do arquivo no ERP ( X2_MODO )
Observaccedilatildeo
Devemos atentar ao fato que a funccedilatildeo RetSqlFil() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo que estes
alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna os
nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLTAB
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLTAB ( lt cAliasList gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliasList Caracter String contendo um ou mais alias separados por virgula a terem seus nomes fiacutesicos determinados
Retorno
Tipo Descriccedilatildeo
Caracter String contendo nomes fisicos e alias identificadores dos aliases recebidos como paracircmetro
Descriccedilatildeo
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
11
Return Falha na Contagem de registros Query SA1
Endif
Se estaacute tudo certo retorna um HTML informando que estaacute tudo OK
Return (SITE OK) +dtos(date())+ +time()
Comandos - CLOSE QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CLOSE QUERY cAlias
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAlias Caracter Alias sob o qual o cursor da Query foi aberto Caso o alias passado como paracircmetro natildeo se encontre aberto a funccedilatildeo natildeo gera nenhuma ocorrecircncia de
erro
Descriccedilatildeo
Atraveacutes do comando Close Query realizamos o fechamento de uma query aberta atraveacutes do comando OPEN QUERY
ATENCcedilAtildeO Uma query aberta pelo comando OPEN QUERY deve ser fechada pelo comando CLOSE QUERY Poderiacuteamos fechar o alias aberto atraveacutes de uma Query simplesmente com a funccedilatildeo
DbCloseArea() poreacutem isto deixaria em aberto elementos internos de controle criados pelo comando OPEN QUERY
Comandos - OPEN QUERY
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
OPEN QUERY ltcQuerygt ALIAS ltcAliasgt [ [NOCHANGE] ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcQuerygt Caracter cQuery corresponde agrave String contendo a Query a ser executada no banco de dados
ALIAS ltcAliasgt Caracter cAlias corresponde ao nome do alias sob o qual o cursor de retorno dos dados pesquisados seraacute aberto no ambiente Advpl Natildeo pode ser especificado
um nome de alias jaacute em uso senatildeo a aplicaccedilatildeo seraacute finalizada com a ocorrecircncia de erro Alias already in Use
[NOCHANGE] Caracter Caso especificada a claacuteusola NOCHANGE na abertura da query a string em cQuery natildeo seraacute submetida agrave funccedilatildeo ChangeQuery()
Descriccedilatildeo
Atraveacutes do comando OPEN QUERY realizamos a abertura de uma Query de busca no Banco de Dados atraveacutes do RDD TOPCONN retornando os dados consultados atraveacutes de um ALIAS Advpl
Caso a Query nao possa ser aberta por erro de sintaxe devido agrave thread atual natildeo estar conectada com o TopConnect ou outro erro seraacute gerado um log de erro informando o Alias o Stack ( Pilha de Chamadas ) de
execucatildeo e o conteuacutedo da Query para Debug
OBSERVACcedilOtildeES IMPORTANTES
Na montagem da string da Query devemos especificar os comandos SQL alias e nomes de campos em letras maiuacutesculas
Quando utilizamos o comando OPEN QUERY natildeo precisamos passar a expressatildeo da Query atraveacutes da funccedilatildeo ChangeQuery() Este proceduimento jaacute eacute realizado internamente pelo comando OPEN
QUERY Para que a query natildeo seja submetida agrave funccedilatildeo ChangeQuery() devemos utilizar o paracircmetro NOCHANGE
A utilizaccedilatildeo deste comando eacute impliacutecita agrave LIB APWEBEX e necessita da utilizaccedilatildeo do include Apwebexch
Comandos - WEB EXTENDED END
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED END ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando para fechar uma seccedilatildeo aberta pelo comando WEB EXTENDED INIT Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do
comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
Comandos - WEB EXTENDED INIT
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEB EXTENDED INIT ltcHtmlgt [ START ltcFnStartgt ]
Paracircmetros
Argumento Tipo Descriccedilatildeo
ltcHtmlgt Caracter cHtml corresponde agrave variavel que seraacute utilizada para armazenar a String Html que seraacute retornada ao Browser solicitante do processamento Deve ser
especificada uma variaacutevel String com conteuacutedo vazio ()
START ltcFnStartgt Caracter cFnStart corresponde agraveo nome de uma funccedilatildeo Advpl que seraacute executada para preacute-validar a execuccedilatildeo do resto do coacutedigo A funccedilatildeo deve ser passada
SEM parecircnteses ()
Descriccedilatildeo
Devemos utilizar este comando juntamente com o comando WEB EXTENDED END quando montamos uma funcatildeo ( Web Function ) que foi construiacuteda para ser chamada a partir de um Web Browser quando nos
utilizamos das funccedilotildees de Infra-Estrutura APWEBEX
Atraveacutes dele eacute realizada uma preacute-validaccedilatildeo que certifica que a execuccedilatildeo da funccedilatildeo somente seraacute realizada caso a thread atual seja realmente uma Thread montada no ambiente WEBEX aleacutem de podermos inserir uma
preacute-validaccedilatildeo (START) de execuccedilatildeo especiacutefica para esta funccedilatildeo
Caso seja especificada uma funccedilatildeo na claacuteusula START a mesma deveraacute retornar uma String Retornando uma String em branco o processamento da funccedilatildeo original seraacute efetuado normalmente Caso a funccedilatildeo retorne
uma string natildeo-vazia esta string seraacute retornada para a variaacutevel cHtml e o processamento do programa seraacute desviado para a linha do coacutedigo-fonte imediatamente posterior agraveo comando WEB EXTENDED END
Para cada ocorrecircncia do comando WEB EXTENDED INIT deve-se ter um fechamento da mesma atraveacutes do comando WEB EXTENDED END devendo haver apenas uma ocorrecircncia desta estrutura por funccedilatildeo
A utilizaccedilatildeo deste comando eacute implicita agrave Working Threads inicializadas pela Lib APWEBEX e a definiccedilatildeo do mesmo estaacute no arquivo include apwebexch que deve ser declarado no iniacutecio do arquivo fonte Advpl
12
Infra-Estrutura APWEBEX - EnvUserAPL - Exemplo de Uso com ERP
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo praacutetico abaixo utilizamos em um coacutedigo fonte Advpl os pontos de entrada disponibilizados na Infra-Estrutura APWEBEX para realizar a preparaccedilatildeo de um ambiente ERP Reset de Ambiente
finalizaccedilatildeo de Thread finalizaccedilatildeo de sessions por time-out e customizaccedilatildeo de mensagem de erro para o desenvolvimento de um projeto de Web Site integrado com o ERP Microsiga
Devemos adotar como padratildeo para projetos que utilizam APWEBEX a criaccedilatildeo do arquivo EnvUserapl especificamente para a definiccedilatildeo dos pontos de entrada utilizados pela Infra-Estrutura
APWEBEX e devemos apenas compilar os fontes dos pontos de entrada realmente necessaacuterios agraveo projeto INCLUDE PROTHEUSCH
INCLUDE APWEBEXCH
====================================================================================
Exemplo de Arquivo de Lib de Projeto APWEBEX utilizando os pontos de entrada
da lib para preparaccedilatildeo de ambiente reset de ambiente e tratamento de erro
utilizando APWEBEX em conjunto com o ERP Microsiga
====================================================================================
----------------------------------------------------------------------------
Ponto de Entrada StartWebEx( NIL ) =gt T ou F
Ponto de entrada executado na inicializaccedilatildeo de cada Working Thread ( ONSTART )
Eacute a responsaacutevel por preparar o ambiente para atender agraves requisiccedilotildees WEB de links apw
Natildeo recebe paracircmetro algum da lib e deve retornar T caso tenha inicialziado com sucesso
ou F em caso de falha de inicializaccedilatildeo
----------------------------------------------------------------------------
USER Function StartWebEx()
Prepara o Ambiente ERP
PREPARE ENVIRONMENT
EMPRESA 01
FILIAL 01
TABLES ZX1ZX2ZX3ZX4ZZ1ZZ2ZZ3ZZ4ZZ5
Return T
-------------------------------------------------------------------------------
Ponto de Entrada ConnectWebEx(cFnName) =gt cHtml ou
Ponto de entrada executado imediatamente antes do processamento de uma requisiccedilatildeo de um link APW
Recebe como paracircmetro o nome da funccedilatildeo a ser executada passada no link
Deve retornar uma String que seraacute retornada ao ao Browser solicitante Caso retorne uma string
em branco (vazia) a funccedilatildeo originalmente solicitada eacute executada pela lib
Caso contraacuterio a funccedilatildeo original natildeo eacute executada e a string retornada eacute enviada ao Browser
-------------------------------------------------------------------------------
USER Function ConnectWebEx(cFnName)
Local cHtmlConn =
conout(Vou executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada ResetWebEx(cFnName) =gt cHtml ou
Funccedilatildeo chamada imediatamente Apos a execuccedilatildeo de uma requisiccedilatildeo APW
Recebe como paracircmetro o nome da funccedilatildeo executada e permite tambeacutem que seja acrescentado
algo a mais no Html a ser retornado ao Browser
-------------------------------------------------------------------------------
USER Function ResetWebEx(cFnName)
Local cHtmlConn =
conout(Terminei de executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada FINISHWEBEX()
Funccedilatildeo chamada no fechamendo do ambiente de uma working Thread Apos a execuccedilatildeo deste
a Thread utilizada eacute eliminada da memoacuteria
-------------------------------------------------------------------------------
USER Function FINISHWEBEX()
conout(Finalizando a Working Thread)
Return
-------------------------------------------------------------------------------
Ponto de Entrada ENDSESSION(cSessionId) =gt NIL
Ponto de entrada chamado em uma working Thread quando a session de um usuaacuterio seraacute
eliminada da memoacuteria por time-out Recebe como parametro o Id de sessions de usuario
que estaacute sendo finalizado
-------------------------------------------------------------------------------
USER Function ENDSESSION(cSessionId)
Conout(Sesssion +cSessionId+ limpa da memoacuteria)
Return
----------------------------------------------------------------------------
Ponto de Entrada WebExError(ecErrorLogcHtml) =gt cCustomHtml ou
Esta funcao eacute chamada pela rotina de tratamento de erro WEBEX quando ocorre um erro fatal
e permite que seja retornado um Html de tratamento de erro diferenciado Ela recebe como
parametro o objeto do erro a mensagem ASCII que foi acrescentada ao arquivo errorlog
e o Html original montado pela rotina de tratamento de erro default
IMPORTANTE Por sem um ponto de entrada executado em um momento criacutetico (tratamento
de erro ) esta funccedilatildeo deve ser o mais suscinta e simples possiacutevel natildeo utilizando
sessions banco de dados etc
----------------------------------------------------------------------------
USER Function WebExError(oErrorcErrorLogcHtml)
Local cCustomHtml =
Monta mensagem de erro mais amigavel
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
13
Ocorreu um erro inesperado no
cCustomHtml += processamento desta paacutegina O Administrador do sistema seraacute notificado desta
cCustomHtml += ocorrecircncia Recomendamos fortemente que esta janela do navegador seja cCustomHtml += fechada e uma nova janela seja aberta para retornar agrave navegaccedilatildeo do site
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
Return cCustomHtml
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Nos exemplo abaixo utilizamos a funccedilatildeo escape() para formatar paracircmetros para inserir em uma URL cUrl = httplocalhostwebinfoapw
cPAram1 = Teste de Parametro 01-02
cPAram2 = reserva
cPAram3 = 1+2+3
cUrl += Par01= + escape(cPAram1) + ampPAr02= + escape(cPAram2) + ampPar03= + escape(cPAram3)
O conteudo de cUrl deveraacute ser httplocalhostwebinfoapwPar01=Teste20de20Parametro2001-02ampPAr02=23reserva23ampPar03=12B22B3
proacuteprio para a monyahem de um link
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETJOBPROFSTRING
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
O exemplo abaixo executado em uma thread iniciada a partir de um JOB WEBEX recupera algumas configuraccedilotildees atuais em uso para este JOB cJobType = GetJobProfString(type(empty) )
cInstances = GetJobProfString(Instances(empty) )
cInacTime = GetJobProfString(InactiveTimeout(default) )
cExpTime = GetJobProfString(ExpirationTime(default) )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETPARVALUE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo satildeo montados dois arrays multi-dimensionais com 2 dimensotildees e satildeo realizadas buscas nos mesmos explorando todas as possibilidades de uso da funccedilatildeo GetParValue() Local aTeste1 =
Local aTeste2 =
Aadd(aTeste1AliasTMP1)
Aadd(aTeste1Relacao2x3)
Aadd(aTeste2AliasTMP2)
Aadd(aTeste2Info---Informaccedilatildeo adicional---)
Busca apenas no array ateste1
cAlias = GetParValue(ALIASaTeste1)
cRelacao = GetParValue(RELACAOaTeste1)
cInfo = GetParValue(INFOaTeste1)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) (nao encontrado)
Busca apenas no array ateste2
cAlias = GetParValue(ALIASaTeste2)
cRelacao = GetParValue(RELACAOaTeste2)
cInfo = GetParValue(INFOaTeste2)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP2
conout(cRelacao) (nao encontrado)
conout(cInfo) ---Informaccedilatildeo Adicional---
Busca em ambos os Arrays
Primeiro no aTeste1 e depois no aTeste2
cAlias = GetParValue(ALIASaTeste1aTeste2)
cRelacao = GetParValue(RELACAOaTeste1aTeste2)
cInfo = GetParValue(INFOaTeste1aTeste2)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) ---Informaccedilatildeo Adicional---
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo abaixo geramos a string com o DUMP de um arquivo HTML salvo na pasta WEB a partir do RootPath do Environment O Dump do arquivo seraacute mostrado no Console do servidor e no Web
Browser que solicitou a funccedilatildeo U_DumpTestapw
include protheusch
include apwebexch
User Function DumpTest()
Local cHtml =
Local cTXTFile =
Local cDump =
WEB EXTENDED INIT cHtml
14
Le o arquivo
cTTXFile = memoread(WebDefaulthtm)
Gera a string com o Dump do arquivo
cDump = HExStrDump(cTTXFile)
Mostra o Dump no console
conout(cDump)
Gera HTML para a visualizaccedilatildeo do DUMP
cHtml = VarInfo(DUMPHtmlnotags(cDump)tf)
WEB EXTENDED END
Return cHtml
Exemplo do Texto mostrado no Console
HexSTRDump ( String 237 Start 1 Length 237 )
-------------------------------------------------------------------------------
3C 48 54 4D 4C 3E 3C 48 45 41 44 3E 0D 0A 3C 4D | ltHTMLgtltHEADgt__ltM
45 54 41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 | ETA HTTP-EQUIV=
43 6F 6E 74 65 6E 74 2D 54 79 70 65 22 20 63 6F | Content-Type co
6E 74 65 6E 74 3D 22 74 65 78 74 2F 68 74 6D 6C | ntent=texthtml
22 0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 | __ltMETA HTTP-EQ
55 49 56 3D 22 70 72 61 67 6D 61 22 20 63 6F 6E | UIV=pragma con
74 65 6E 74 3D 22 6E 6F 2D 63 61 63 68 65 22 3E | tent=no-cachegt
0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 55 | __ltMETA HTTP-EQU
49 56 3D 22 45 78 70 69 72 65 73 22 20 63 6F 6E | IV=Expires con
74 65 6E 74 3D 22 2D 31 22 3E 0D 0A 3C 4D 45 54 | tent=-1gt__ltMET
41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 52 65 | A HTTP-EQUIV=Re
66 72 65 73 68 22 20 63 6F 6E 74 65 6E 74 3D 22 | fresh content=
30 3B 20 75 72 6C 3D 2F 77 5F 77 45 78 30 30 30 | 0 url=w_wEx000
2E 61 70 77 22 3E 3C 2F 48 45 41 44 3E 0D 0A 3C | apwgtltHEADgt__lt
2F 48 45 41 44 3E 3C 2F 48 54 4D 4C 3E | HEADgtltHTMLgt
-------------------------------------------------------------------------------
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HTMLNOTAGS
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo a funccedilatildeo HtmlNoTags eacute utilizada para permitir a utilizaccedilatildeo de caracteres especiais no conteuacutedo de um input para um formulaacuterio Html Local cHtml =
Local cInput =
Conteudo do campo com tags HTML intepretaacuteveis
cInput =
Ao montar o Input aplicar a HtmlNoTags() ao conteudo do mesmo
cHtml +=
+HtmlNoTags(cIn
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
15
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos a funccedilatildeo RetSqlAce para montar uma query de busca por tiacutetulo de uma determinada informaccedilatildeo considerando todas as possibilidades de acentuaccedilatildeo independentemente de como o
banco foi alimentado eou a string de busca foi digitada
IMPORTANTE Na expressatildeo da Query o campo da tabela deve ser passado pela funccedilatildeo LOWER do BAnco pois a funccedilatildeo retsqlace monta a string para busca com letras minuacutesculas cFind = acentuaccedilatildeo
cQuery = SELECT FROM + RetSqlTab(ZZ1)
cQuery += WHERE LOWER(ZZ1_TITULO) LIKE +RetSqlAce(cFind)+
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VALTOSQL
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = + ValToSql(02)
cQuery += AND FA2_DTINC lt= + ValToSql(date())
O exemplo acima caso escrito de forma a realizar as conversotildees especiacuteficas para cada tipo de conteuacutedo seria o equivalemte ao coacutedigo abaixo
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = 02
cQuery += AND FA2_DTINC lt= + DTOS( date() )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VARINFO
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo eacute gerada uma string HTML com as informaccedilotildees do retorno da chamada de duas funccedilotildees baacutesicas da Linguagem Advpl User Function InfoTeste()
Local cHtml =
cHtml += VarInfo(lsquoDatersquodate())
cHtml += VarInfo(lsquoTimelsquotime())
Return cHtml
Deve ser gerado um echo no Console do Servidor parecido com este abaixo
Date -gt D ( 10) [08122003]
Time -gt C ( 8) [201748]
Infra-Estrutura APWEBEX - Exemplo das funccedilotildees de acentuaccedilatildeo ApWebEX
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo vemos a diferenccedila de comportamento entre as funccedilotildees baacutesicas da Linguagem Advpl Upper() e Lower() e a funccedilatildeo de Infra-estrutura Capital() em relaccedilatildeo agraves funccedilotildees da Infra-estrutura
APWEBEX UpperAce() LowerAce() e CApitalAce() quando utilizamos caracteres acentuados cRetorno =
cFrase = natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
cRetorno += Original + cFrase + CRLF
cRetorno += Upper() + upper(cFrase) + CRLF
cRetorno += Lower() + lower(cFrase) + CRLF
cRetorno += Capital() + capital(cFrase) + CRLF
cRetorno += UPPERACE() + UPPERACE(cFrase) + CRLF
cRetorno += LOWERACE() + LOWERACE(cFrase) + CRLF
cRetorno += CAPITALACE() + CAPITALACE(cFrase) + CRLF
Neste ponto a variaacutevel cRetorno deveraacute conter
Original natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
Upper() NatildeO Haacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSotildeES PARA O INEXPLICaacuteVEL
Lower() natildeo haacute explicaCcedilOtildees considerando excessotildees para o inexplicaacutevel
Capital() Natildeo Haacute ExplicaCcedilOtildees Considerando Excessotildees Para O Inexplicaacutevel
UPPERACE() NAtildeO HAacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSOtildeES PARA O INEXPLICAacuteVEL
LOWERACE() natildeo haacute explicaccedilotildees considerando excessotildees para o inexplicaacutevel
CAPITALACE() Natildeo Haacute Explicaccedilotildees Considerando Excessotildees Para O Inexplicaacutevel
Infra-Estrutura APWEBEX - Exemplos das funccedilotildees NTOC e CTON
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos as funccedilotildees cton e ntoc para realizar conversotildees de nuacutemeros em base decimal para outras bases numeacutericas e vice-versa
16
nNum1 = CTON(011010012) Converte binaacuterio para decimal
nNum2 = CTON(00DA25FE16) Converte Hexadecimal para decimal
nNum1++ Soma 1 ao numero em nNum1
nNum2++ Soma 1 ao numero em nNum2
cNum1 = NtoC(nNum128) Converte para binaacuterio novamente
cNum2 = NtoC(nNum2168) Converte para Hexa novamente
-------------------------------------------------------------------------
Ao final do programa cNum1 seraacute 01101010 e cNum2 seraacute 00DA25FF
-------------------------------------------------------------------------
APWEXADDERR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
APWEXADDERR ( [ cTitulo ] [ cInfo ] ) --gt T
Paracircmetros
Argumento Tipo Descriccedilatildeo
cTitulo Caracter cTitulo corresponde a um tiacutetulo identificador da informaccedilatildeo Deve ter no maacuteximo 20 caracteres Os caracteres acima da vigeacutesima posiccedilatildeo seratildeo
ignorados
cInfo Caracter cInfo corresponde agrave Informaccedilatildeo a ser acrescentada ao ERRORLOG em caso de erro
Retorno
Tipo Descriccedilatildeo
Loacutegico Esta funccedilatildeo sempre retorna T
Descriccedilatildeo
Atraveacutes da funccedilatildeo ApWExAddErr() podemos acrescentar uma string de informaccedilotildees adicionais em um buffer em memoacuteria descarregado na geraccedilatildeo do ERRORLOG no caso de uma ocorrecircncia de erro fatal na
working thread atual
Caso a funccedilatildeo seja chamada sem nenhum paracircmetro a uacuteltima ocorrecircncia acrescentada pela funccedilatildeo eacute eliminada da pilha interna de informaccedilotildees
ATENCcedilAtildeO Esta funccedilatildeo deve ser apenas utilizada em casos de necessidade de obtenccedilatildeo de informaccedilotildees especiacuteficas acerca de uma ocorrecircncia de erro natildeo reproduzida em ambiente de testes eou natildeo depuraacutevel pois
seu uso desnecessaacuterio prejudica a performance da aplicaccedilatildeo final
CAPITALACE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CAPITALACE ( lt cString gt ) --gt cStrCapital
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida
Retorno
Tipo Descriccedilatildeo
Caracter String resultante convertida para munuacutesculo com as primeiras letras das palavras significantes em maiuacutesculo
Descriccedilatildeo
Semelhante agrave funccedilatildeo de Infra-estrutura Capital() poreacutem converte tambeacutem caracteres acentuados
A funccedilatildeo CapitalAce() converte todos os caracteres de uma String para minuacutesculo e a primeira letra das palavras significantes para maiuacutesculo semelhante agrave funccedilatildeo Capital() poreacutem considera e converte tambeacutem
caracteres acentuados em OEM eou ANSI
CTON
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CTON ( lt cString gt lt nBase gt ) --gt nNumero
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave representaccedilatildeo de um nuacutemero em outra base numeacuterica compreendida entre 2 e 36
nBase Numeacuterico nBase corresponde agrave base numeacuterica utilizada pelo numero representado em cString
Retorno
Tipo Descriccedilatildeo
Numeacuterico Nuacutemero recebido como paracircmetro em notaccedilatildeo decimal ( Base 10 )
Descriccedilatildeo
Converte um nuacutemero representado em String de base 2 a 36 para um nuacutemero em base decimal (10)
Observaccedilatildeo Importante
Satildeo considerados caracteres vaacutelidos para compor um nuacutemero de base 36 os 10 algarismos numeacutericos de 0 a 9 e os 26 caracteres alfabeacuteticos maiuacutesculos compreendidos entre A e Z Quaisquer caractetes presentes na
String de paracircmetro fora desta faixa de dados eou fora da base ( por exemplo uma conversatildeo de string base 2 - binaacuterio - da string 01001020 ) retornaraacute -1 ( menos um )
ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
ESCAPE ( lt cString gt ) --gt cEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute uma sequecircncia de caracteres a ser processada
Retorno
Tipo Descriccedilatildeo
Caracter cEscaped corresponde agrave string original com os caracteres reservados utilizando a notaccedilatildeo HH
Descriccedilatildeo
A funccedilatildeo Escape() deve ser utilizada para realizar conversotildees de caracteres especiais e reservados quando da necessidade de passagem de paracircmetros via URL
A sintaxe de uma requisiccedilatildeo via URL para a passagem de paracircmetros eacute
(link)param=conteudoampparam2=conteudo2amp
Quando passamos paracircmetros via url devemos tomar o cuidado de natildeo utilizar caracteres reservados e especiais nos nomes e conteuacutedos de paracircmetros Para realizar estas conversotildees utilizamos a funccedilatildeo Escape()
17
EXECINPAGE
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXECINPAGE ( lt cAPHPage gt ) --gt cHTMLPage
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAPHPage Caracter Corresponde agraveo nome do APH que deve ser executado sem a extensatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cHtmlPage corresponde agrave string HTML gerada pela paacutegina APH AHU
Descriccedilatildeo
Atraveacutes da funccedilatildeo ExecInPage() executamos uma paacutegina APH passada como paracircmetro A funccedilatildeo deveraacute retornar a String HTML correspondente agrave paacutegina processada
Poreacutem a funccedilatildeo ExecInPage() realiza tratamentos adicionais padratildeo relacionaodo agraveo comportamento dos Projetos WEB referentes agrave customizaccedilotildees da segunte maneira
1 Primeiro eacute verificado se existe uma paacutegina AHU compilada com o nome cAPHPage Caso exista a mesma seraacute executada pela execinpage
2 Caso natildeo exista AHU com este nome eacute procurado pelo APH Caso o APH exista o mesmo seraacute executado pela ExecInPage
3 Caso natildeo existam no RPO atual o APH nem o AHU com o nome especificado no paracircmetro cAPHFile o processamento eacute abortado com a ocorrecircncia de erro [APWEXERR_0007] APH page
[ltcAPHPagegt] not found in RPO 4 Antes de executar o APH ou AHU identificado nos passos anteriores eacute verificado se existe um ponto de entrada ( User Function ) compilado com o mesmo nome do APH Caso exista o ponto de
entrada eacute executado Ele deveraacute retornar uma String HTML Se for retornada alguma string a funccedilatildeo retorna a tring retornada e natildeo processa o APH AHU Observaccedilatildeo A funccedilatildeo ExecInPage natildeo iraacute executar este
tratamento da User Function com o nome de cAPHPage caso a funccedilatildeo ExecInPage() esteja sendo executada atraveacutes de uma USER FUNCTION
Observaccedilatildeo Importante - Envio parcial de HTML agraveo Browser A funccedilatildeo ExecInpage() juntamente com o APH compilado ao serem processados iratildeo tentar enviar o conteuacutedo HTML para o Browser solicitante durante o processamento de modo que a funccedilatildeo normalmente iraacute
retornar uma String vazia
Caso seja necessaacuteria a execuccedilatildeo de uma paacutegina APH ou AHU e o natildeo-envio da mesma para o Browse por exemplo para a geraccedilatildeo de um coacutedigo HTML a ser enviado via e-mail revemos utilizar a funccedilatildeo
HttpSetPart() realizando uma chamada da mesma antes da ExecInPage() passando o paracircmetro F para desabilitar temporariamente o envio de HTML simultacircneo ao Browser e apoacutes a execuccedilatildeo da ExecInPage()
devemos re-habilitar o envio simultacircneo atraveacutes da chamada da funccedilatildeo HttpSetPart() com o paracircmetro T
EXISTPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTPAGE ( lt cAphFile gt ) --gt lFound
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAphFile Caracter Nome do arquivo APH sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Caracter Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistPage() para identificarmos no ambiente atual se um determinado arquivo APH encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistPage(teste)
conout(testeaph compilado neste RPO)
Else
conout(testeaph NAO compilado neste RPO)
Endif
EXISTUSRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTUSRPAGE ( lt cAhuFile gt ) --gt lExist
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAhuFile Caracter Nome do arquivo AHU sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Loacutegico Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistUSRPage() para identificarmos no ambiente atual se um determinado arquivo AHU encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistUSRPage(teste)
conout(testeahu compilado neste RPO)
Else
conout(testeahu NAO compilado neste RPO)
Endif
GETJOBPROFSTRING
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETJOBPROFSTRING ( lt cKey gt lt cDefault gt ) --gt cKeyValue
Paracircmetros
Argumento Tipo Descriccedilatildeo
cKey Caracter cKey corresponde agrave chave da seccedilatildeo de configuraccedilatildeo da Working Thread atual a ser retornada
cDefault Caracter Valor default (string) a ser retornado pela funccedilatildeo caso a chave especificada natildeo sehja encontrada no INI
Retorno
Tipo Descriccedilatildeo
Caracter Conteudo da Chave solicitada Caso a chave natildeo seja encontrada eacute retornado o conteudo de cDefault Caso esta funccedilatildeo natildeo seja executada a partir de uma Working Thread ela
18
retornaraacute uma string em branco ()
Descriccedilatildeo
Atraveacutes desta funccedilatildeo podemos recuperar as configuraccedilotildees do Job da Working Thread atual
GETWEXVERSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETWEXVERSION ( ) --gt cBuildId
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave String Identificadora da versatildeo no formato ltLIBgt VAAMMDDHHmm Vide Tabela A
Descriccedilatildeo
Esta funccedilatildeo natildeo requer argumentos e retorna o Identificador do build versatildeo de Release das funccedilotildees de Infra-Estrutura APWEBEX
Observaccedilatildeo A data informada pela versatildeo natildeo corresponde agrave ultima compilaccedilatildeo do RPO de um determinado Projeto WEB mas sim agrave data de release da LIB de Infra-Estrutura APWEBEX
Tabela A
Simbolo Descriccedilatildeo
AA Ano de geraccedilatildeo da Lib
MM Mecircs da geraccedilatildeo da Lib
DD Dia da geraccedilatildeo da Lib
HH Horaacuterio da geraccedilatildeo da Lib
mm Minutos do Horaacuterio de Geraccedilatildeo da Lib
(HTTP) Indica que a versatildeo foi compilada com a configuracatildeo de envio progressivo de HTML simultacircneo para o Browse Esta opccedilatildeo eacute imprescindiacutevel para projetos que se utilizam desta LIB
Por exemplo
APWEBEX Version 30312021900 (HTTP)
HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HEXSTRDUMP ( lt cString gt [ nStart ] [ nLength ] ) --gt cHExDump
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser lida para a geraccedilatildeo do Dump
nStart Numeacuterico Corresponde agrave posiccedilatildeo inicial de cString a ser considerada para a geraccedilatildeo do Dump a partir da posiccedilatildeo 1 Caso este paracircmetro natildeo seja informado o
Default eacute a posiccedilatildeo 1 da string
nLength Numeacuterico nLength corresponde agraveo tamanho a ser considerado para a geraccedilatildeo do DUMP a partir da posiccedilatildeo inicial recebida em nStart Caso este paracircmetro natildeo
seja informado eacute considerado o tamanho ateacute o final da String
Retorno
Tipo Descriccedilatildeo
Caracter O retorno da funccedilatildeo corresponde agrave uma string Advpl formatadas em 16 bytes em hexadecimal por linha mais o separador pipe (|) mais os 16 caracteres em Ansi Os caracteres de
controle ( codigo ascii menor que 32 ) satildeo convertidos para visualizaccedilatildeo para o caractere underline (_)
Descriccedilatildeo
Atraveacutes da funccedilatildeo HexStrDump() podemos gerar uma string em Advpl em formato de Dump Hexadecimal a partir da string informada como paracircmetro a partir de uma determinada posiccedilatildeo da string considerando um
nuacutemero de bytes informado
Caso os paracircmetros nPosIni e nTamString natildeo sejam informados o dump gerado corresponde a string recebida como paracircmetro em sua totalidade
Observaccedilatildeo
Natildeo devemos pasar para a funccedilatildeo HexStrDump uma string maior que 240 Kb pois a geraccedilatildeo da String de dump eacute realizada em memoacuteria sendo a string final gerada em meacutedia 42 vezes maior que a string passada
como paracircmetro Caso a string passada como paracircmetro seja maior que 240 Kb a execuccedilatildeo seraacute abortada com a ocorrecircncia de erro fatal string size overflow
HTMLNOTAGS
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HTMLNOTAGS ( lt cStrHtml gt ) --gt cStrNoTags
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrHtml Caracter cStrHtml corresponde a uma String que natildeo pode conter caracteres Html interpretaacuteveis
Retorno
Tipo Descriccedilatildeo
Caracter String original com os caracteres interpretaacuteveis Html lt gt amp convertidos para caracteres natildeo-interpretaacuteveis
Descriccedilatildeo
A Funccedilatildeo HTMLNOTAGS converte as Tags interpretaacuteveis de uma String HTML para TAGS natildeo interpretaacuteveis Este recurso eacute normalmente utilizado quando precisamos montar um input Html com um conteudo que
nao pode ser interpretado pelo browser como uma Tag Esta funccedilatildeo apenas converte os caracteres lt ( menor que ) gt ( maior que ) amp ( e comercial ) e ldquo ( aspas duplas )
Recomenda-se fortemente que na montagem do value de um input html o conteuacutedo do mesmo seja colocado entre aspas duplas pois caso o conteuacutedo do value inicial do campo contenha aspas simples (
natildeo convertidas pela funccedilatildeo HtmlNoTags) isto poderaacute ocasionar perda de dados e erro de sintaxe no formulaacuterio Html
HTTPISWEBEX
Revisatildeo 12122003
Sintaxe
HTTPISWEBEX ( ) --gt lIsApWEBEX
Retorno
Tipo Descriccedilatildeo
Loacutegico A funccedilatildeo retornaraacute T caso o ambiente de execuccedilatildeo atual seja uma Working Thread WEBEX inicializada pela funccedilatildeo de infra-estrutura STARTWEBEX
Descriccedilatildeo
Atraveacutes da funccedilatildeo HttpIsWebEx() eacute possiacutevel identificarmos se o programa atual estaacute sendo executado atraveacutes de uma Working Thread inicializada utilizando-se as funccedilotildees de Infra-Estrutura APWEBEX
ISEMAIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
19
Sintaxe
ISEMAIL ( lt cEMail gt ) --gt lEmailOk
Paracircmetros
Argumento Tipo Descriccedilatildeo
cEMail Caracter cEmail corresponde a string a ser analizada contendo um e apenas um endereccedilo de e-mail
Retorno
Tipo Descriccedilatildeo
Caracter Retorna T caso a sring recebida como paracircmetro atenda agraves definiccedilotildees de nomenclatura vaacutelidos para um endereccedilo de e-mail
Descriccedilatildeo
Utilizada para validar e-mails em Advpl a funccedilatildeo ISEMAIL recebe como paracircmetro uma string contendo um e-mail retornando T caso a string esteja em um formaacuteto vaacutelido respeitando a regra para nomenclatura de
endereccedilos de e-mail
Regra Um e-mail eacute considerado vaacutelido caso seja iniciado por um caracter apenas contenha caracteres asc de a a z e 0 a 9 e os caracteres (arroba) (ponto) - ( hiacutefen) ou _ (underline) e deve conter uma e
apenas uma arroba e no minimo um ponto apos a arroba intercalado por um caracter
LOWERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
LOWERACE ( lt cString gt ) --gt cStrLower
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a sequecircncia de caracteres a ser convertida para letras minuacutesculas
Retorno
Tipo Descriccedilatildeo
Caracter String original em letras minuacutesculas
Descriccedilatildeo
A Funccedilatildeo LOWERACE converte todos os caracteres de uma String para ldquominusculordquo semelhante agrave funccedilatildeo LOWER() poreacutem considera e converte tambeacutem caracteres acentuados em ANSI
NTOC
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
NTOC ( lt nNumero gt lt nBase gt lt nTamStr gt ) --gt cString
Paracircmetros
Argumento Tipo Descriccedilatildeo
nNumero Numeacuterico nNumero eacute o valor numeacuterico em base devimal a ser convertido
nBase Numeacuterico nBase corresponde agrave base binaacuteria a ser utilizada para converter nNumero
nTamStr Numeacuterico nTamStr corresponde ao tamanho da string representando o numero na base desejada
Retorno
Tipo Descriccedilatildeo
Caracter cString corresponde ao numero convertido para a base numeacuterica especificada como paracircmetro
Descriccedilatildeo
A Funccedilatildeo NTOC converte um nuacutemero em notaccedilatildeo decimal para um nuacutemero representado por String utilizando uma base numeacuterica entre 2 e 36 preenchendo-o com ldquo0rdquo (zeros) agrave esquerda do tamanho especificado
Observaccedilatildeo O Paracircmetro nBase deve ser especificado com um nuacutemero entre 2 e 36 Caso seja passado como paracircmetro um nuacutemero base fora desta faixa o processamento eacute abortado com a ocorrecircncia de erro
[APWEXERR_0022] INVALID NTOC BASE [X] onde ltXgt foi a base passada como argumento
REDIRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
REDIRPAGE ( lt cUrl gt [ cTarget ] [ nTime ] ) --gt cScript
Paracircmetros
Argumento Tipo Descriccedilatildeo
cUrl Caracter Link para onde o script deve apontar o redirecionamento
cTarget Caracter Destino do redirecionamento Caso natildeo especificado o default eacute _self
nTime Numeacuterico Tempo (em segundos) de delay antes do redirecionamento ser executado
Retorno
Tipo Descriccedilatildeo
Caracter Script Html JavaScript que ao ser executado no Browser (client) chama a paacuteginaobjeto chamado no Link
Descriccedilatildeo
A funccedilatildeo RedirPage eacute utilizada quando desejamos devolver ao Browser um script que ao ser executado redirecionaraacute o Browser agrave abertura de um link passado como paracircmetro
RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLACE ( lt cStrFind gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrFind Caracter cStrFind corresponde agrave sequecircncia de caracteres a ser procurada podendo conter caracteres maiuacutesculos e minuacutesculos com ou sem acentuaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cStrQuery corresponde agrave string de busca a ser utilizada na query utilizando caracteres em minuacutesculo
Descriccedilatildeo
A funccedilatildeo RetSqlAce eacute utilizada para auxiliar de montagem de querys de busca de caracteres acentuados em bases de dados A funccedilatildeo automaticamente trata a string original removendo os acentos convertendo todos
os caracteres para minuacutesculas e trocando todas as vogais e cedilhas da string original por uma sequecircncia de caracteres acentuados em munuacutescilas para busca posicional
20
RETSQLCOND
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLCOND ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlCond() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga e o Makira Hypersite utilizando aliases de 3
caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar a filial atual ( xFilial ) de acordo com o modo do arquivo ( X2_MODO ) e para sempre desconsiderar
registros deletados
Observaccedilotildees
Esta funccedilatildeo foi mantida apenas por compatibilidade pois a ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do
banco para efeitos de performance Para ganharmos performance nas Querys devemos ao inveacutes de utilizar a funccedilatildeo RetSqlCond() utilizar como primeira clauacutesula WHERE o retorno da funccedilatildeo RetSqlFil() (
comparaccedilatildeo dos campos _FILIAL os primeiros do(s) iacutendice(s) do ERP ) que retorna apenas as comparaccedilotildees de Filial e por uacuteltimo a funccedilatildeo RetSqlDel que retorna o script para verificaccedilatildeo dos campos deletados (
que eacute o uacuteltimo campo das chaves de iacutendice do ERP utilizando TopConnect )
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlCond() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de
modo que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute
retorna os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLDEL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLDEL ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlDel() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo D_E_L_E_T_ da(s) tabela(s) passada(s) como paracircmetro
Observaccedilotildees
A ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do banco para efeitos de performance Para ganharmos performance
nas Querys devemos utilizar a funccedilatildeo RetSqlDEl() na montagem das ultimas consistecircncias da claacuteusula WHERE de uma Query
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlDel() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo
que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna
os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLFIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLFIL ( lt cAliases gt [ cCompFil ] ) --gt cSQlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
cCompFil Caracter
Atraveacutes de cCompFil eacute possiacutevel especificar uma Filial FIXA a ser comparada com os campos FILIAL do(s) alias(es) passados no paracircmetro cAliases
Caso natildeo informado os campos _FILIAL da(s) tabela(s) passadas como paracircmetro em cAliases seratildeo comparados com o retorno da funccedilatildeo xFilial() de
cada alias respectivamente
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo filial atual ( xFilial ) de acordo com o modo de abertura do arquivo no ERP ( X2_MODO )
Observaccedilatildeo
Devemos atentar ao fato que a funccedilatildeo RetSqlFil() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo que estes
alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna os
nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLTAB
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLTAB ( lt cAliasList gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliasList Caracter String contendo um ou mais alias separados por virgula a terem seus nomes fiacutesicos determinados
Retorno
Tipo Descriccedilatildeo
Caracter String contendo nomes fisicos e alias identificadores dos aliases recebidos como paracircmetro
Descriccedilatildeo
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
12
Infra-Estrutura APWEBEX - EnvUserAPL - Exemplo de Uso com ERP
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo praacutetico abaixo utilizamos em um coacutedigo fonte Advpl os pontos de entrada disponibilizados na Infra-Estrutura APWEBEX para realizar a preparaccedilatildeo de um ambiente ERP Reset de Ambiente
finalizaccedilatildeo de Thread finalizaccedilatildeo de sessions por time-out e customizaccedilatildeo de mensagem de erro para o desenvolvimento de um projeto de Web Site integrado com o ERP Microsiga
Devemos adotar como padratildeo para projetos que utilizam APWEBEX a criaccedilatildeo do arquivo EnvUserapl especificamente para a definiccedilatildeo dos pontos de entrada utilizados pela Infra-Estrutura
APWEBEX e devemos apenas compilar os fontes dos pontos de entrada realmente necessaacuterios agraveo projeto INCLUDE PROTHEUSCH
INCLUDE APWEBEXCH
====================================================================================
Exemplo de Arquivo de Lib de Projeto APWEBEX utilizando os pontos de entrada
da lib para preparaccedilatildeo de ambiente reset de ambiente e tratamento de erro
utilizando APWEBEX em conjunto com o ERP Microsiga
====================================================================================
----------------------------------------------------------------------------
Ponto de Entrada StartWebEx( NIL ) =gt T ou F
Ponto de entrada executado na inicializaccedilatildeo de cada Working Thread ( ONSTART )
Eacute a responsaacutevel por preparar o ambiente para atender agraves requisiccedilotildees WEB de links apw
Natildeo recebe paracircmetro algum da lib e deve retornar T caso tenha inicialziado com sucesso
ou F em caso de falha de inicializaccedilatildeo
----------------------------------------------------------------------------
USER Function StartWebEx()
Prepara o Ambiente ERP
PREPARE ENVIRONMENT
EMPRESA 01
FILIAL 01
TABLES ZX1ZX2ZX3ZX4ZZ1ZZ2ZZ3ZZ4ZZ5
Return T
-------------------------------------------------------------------------------
Ponto de Entrada ConnectWebEx(cFnName) =gt cHtml ou
Ponto de entrada executado imediatamente antes do processamento de uma requisiccedilatildeo de um link APW
Recebe como paracircmetro o nome da funccedilatildeo a ser executada passada no link
Deve retornar uma String que seraacute retornada ao ao Browser solicitante Caso retorne uma string
em branco (vazia) a funccedilatildeo originalmente solicitada eacute executada pela lib
Caso contraacuterio a funccedilatildeo original natildeo eacute executada e a string retornada eacute enviada ao Browser
-------------------------------------------------------------------------------
USER Function ConnectWebEx(cFnName)
Local cHtmlConn =
conout(Vou executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada ResetWebEx(cFnName) =gt cHtml ou
Funccedilatildeo chamada imediatamente Apos a execuccedilatildeo de uma requisiccedilatildeo APW
Recebe como paracircmetro o nome da funccedilatildeo executada e permite tambeacutem que seja acrescentado
algo a mais no Html a ser retornado ao Browser
-------------------------------------------------------------------------------
USER Function ResetWebEx(cFnName)
Local cHtmlConn =
conout(Terminei de executar +cFnName)
Return cHtmlConn
-------------------------------------------------------------------------------
Ponto de Entrada FINISHWEBEX()
Funccedilatildeo chamada no fechamendo do ambiente de uma working Thread Apos a execuccedilatildeo deste
a Thread utilizada eacute eliminada da memoacuteria
-------------------------------------------------------------------------------
USER Function FINISHWEBEX()
conout(Finalizando a Working Thread)
Return
-------------------------------------------------------------------------------
Ponto de Entrada ENDSESSION(cSessionId) =gt NIL
Ponto de entrada chamado em uma working Thread quando a session de um usuaacuterio seraacute
eliminada da memoacuteria por time-out Recebe como parametro o Id de sessions de usuario
que estaacute sendo finalizado
-------------------------------------------------------------------------------
USER Function ENDSESSION(cSessionId)
Conout(Sesssion +cSessionId+ limpa da memoacuteria)
Return
----------------------------------------------------------------------------
Ponto de Entrada WebExError(ecErrorLogcHtml) =gt cCustomHtml ou
Esta funcao eacute chamada pela rotina de tratamento de erro WEBEX quando ocorre um erro fatal
e permite que seja retornado um Html de tratamento de erro diferenciado Ela recebe como
parametro o objeto do erro a mensagem ASCII que foi acrescentada ao arquivo errorlog
e o Html original montado pela rotina de tratamento de erro default
IMPORTANTE Por sem um ponto de entrada executado em um momento criacutetico (tratamento
de erro ) esta funccedilatildeo deve ser o mais suscinta e simples possiacutevel natildeo utilizando
sessions banco de dados etc
----------------------------------------------------------------------------
USER Function WebExError(oErrorcErrorLogcHtml)
Local cCustomHtml =
Monta mensagem de erro mais amigavel
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
13
Ocorreu um erro inesperado no
cCustomHtml += processamento desta paacutegina O Administrador do sistema seraacute notificado desta
cCustomHtml += ocorrecircncia Recomendamos fortemente que esta janela do navegador seja cCustomHtml += fechada e uma nova janela seja aberta para retornar agrave navegaccedilatildeo do site
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
Return cCustomHtml
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Nos exemplo abaixo utilizamos a funccedilatildeo escape() para formatar paracircmetros para inserir em uma URL cUrl = httplocalhostwebinfoapw
cPAram1 = Teste de Parametro 01-02
cPAram2 = reserva
cPAram3 = 1+2+3
cUrl += Par01= + escape(cPAram1) + ampPAr02= + escape(cPAram2) + ampPar03= + escape(cPAram3)
O conteudo de cUrl deveraacute ser httplocalhostwebinfoapwPar01=Teste20de20Parametro2001-02ampPAr02=23reserva23ampPar03=12B22B3
proacuteprio para a monyahem de um link
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETJOBPROFSTRING
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
O exemplo abaixo executado em uma thread iniciada a partir de um JOB WEBEX recupera algumas configuraccedilotildees atuais em uso para este JOB cJobType = GetJobProfString(type(empty) )
cInstances = GetJobProfString(Instances(empty) )
cInacTime = GetJobProfString(InactiveTimeout(default) )
cExpTime = GetJobProfString(ExpirationTime(default) )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETPARVALUE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo satildeo montados dois arrays multi-dimensionais com 2 dimensotildees e satildeo realizadas buscas nos mesmos explorando todas as possibilidades de uso da funccedilatildeo GetParValue() Local aTeste1 =
Local aTeste2 =
Aadd(aTeste1AliasTMP1)
Aadd(aTeste1Relacao2x3)
Aadd(aTeste2AliasTMP2)
Aadd(aTeste2Info---Informaccedilatildeo adicional---)
Busca apenas no array ateste1
cAlias = GetParValue(ALIASaTeste1)
cRelacao = GetParValue(RELACAOaTeste1)
cInfo = GetParValue(INFOaTeste1)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) (nao encontrado)
Busca apenas no array ateste2
cAlias = GetParValue(ALIASaTeste2)
cRelacao = GetParValue(RELACAOaTeste2)
cInfo = GetParValue(INFOaTeste2)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP2
conout(cRelacao) (nao encontrado)
conout(cInfo) ---Informaccedilatildeo Adicional---
Busca em ambos os Arrays
Primeiro no aTeste1 e depois no aTeste2
cAlias = GetParValue(ALIASaTeste1aTeste2)
cRelacao = GetParValue(RELACAOaTeste1aTeste2)
cInfo = GetParValue(INFOaTeste1aTeste2)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) ---Informaccedilatildeo Adicional---
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo abaixo geramos a string com o DUMP de um arquivo HTML salvo na pasta WEB a partir do RootPath do Environment O Dump do arquivo seraacute mostrado no Console do servidor e no Web
Browser que solicitou a funccedilatildeo U_DumpTestapw
include protheusch
include apwebexch
User Function DumpTest()
Local cHtml =
Local cTXTFile =
Local cDump =
WEB EXTENDED INIT cHtml
14
Le o arquivo
cTTXFile = memoread(WebDefaulthtm)
Gera a string com o Dump do arquivo
cDump = HExStrDump(cTTXFile)
Mostra o Dump no console
conout(cDump)
Gera HTML para a visualizaccedilatildeo do DUMP
cHtml = VarInfo(DUMPHtmlnotags(cDump)tf)
WEB EXTENDED END
Return cHtml
Exemplo do Texto mostrado no Console
HexSTRDump ( String 237 Start 1 Length 237 )
-------------------------------------------------------------------------------
3C 48 54 4D 4C 3E 3C 48 45 41 44 3E 0D 0A 3C 4D | ltHTMLgtltHEADgt__ltM
45 54 41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 | ETA HTTP-EQUIV=
43 6F 6E 74 65 6E 74 2D 54 79 70 65 22 20 63 6F | Content-Type co
6E 74 65 6E 74 3D 22 74 65 78 74 2F 68 74 6D 6C | ntent=texthtml
22 0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 | __ltMETA HTTP-EQ
55 49 56 3D 22 70 72 61 67 6D 61 22 20 63 6F 6E | UIV=pragma con
74 65 6E 74 3D 22 6E 6F 2D 63 61 63 68 65 22 3E | tent=no-cachegt
0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 55 | __ltMETA HTTP-EQU
49 56 3D 22 45 78 70 69 72 65 73 22 20 63 6F 6E | IV=Expires con
74 65 6E 74 3D 22 2D 31 22 3E 0D 0A 3C 4D 45 54 | tent=-1gt__ltMET
41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 52 65 | A HTTP-EQUIV=Re
66 72 65 73 68 22 20 63 6F 6E 74 65 6E 74 3D 22 | fresh content=
30 3B 20 75 72 6C 3D 2F 77 5F 77 45 78 30 30 30 | 0 url=w_wEx000
2E 61 70 77 22 3E 3C 2F 48 45 41 44 3E 0D 0A 3C | apwgtltHEADgt__lt
2F 48 45 41 44 3E 3C 2F 48 54 4D 4C 3E | HEADgtltHTMLgt
-------------------------------------------------------------------------------
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HTMLNOTAGS
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo a funccedilatildeo HtmlNoTags eacute utilizada para permitir a utilizaccedilatildeo de caracteres especiais no conteuacutedo de um input para um formulaacuterio Html Local cHtml =
Local cInput =
Conteudo do campo com tags HTML intepretaacuteveis
cInput =
Ao montar o Input aplicar a HtmlNoTags() ao conteudo do mesmo
cHtml +=
+HtmlNoTags(cIn
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
15
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos a funccedilatildeo RetSqlAce para montar uma query de busca por tiacutetulo de uma determinada informaccedilatildeo considerando todas as possibilidades de acentuaccedilatildeo independentemente de como o
banco foi alimentado eou a string de busca foi digitada
IMPORTANTE Na expressatildeo da Query o campo da tabela deve ser passado pela funccedilatildeo LOWER do BAnco pois a funccedilatildeo retsqlace monta a string para busca com letras minuacutesculas cFind = acentuaccedilatildeo
cQuery = SELECT FROM + RetSqlTab(ZZ1)
cQuery += WHERE LOWER(ZZ1_TITULO) LIKE +RetSqlAce(cFind)+
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VALTOSQL
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = + ValToSql(02)
cQuery += AND FA2_DTINC lt= + ValToSql(date())
O exemplo acima caso escrito de forma a realizar as conversotildees especiacuteficas para cada tipo de conteuacutedo seria o equivalemte ao coacutedigo abaixo
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = 02
cQuery += AND FA2_DTINC lt= + DTOS( date() )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VARINFO
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo eacute gerada uma string HTML com as informaccedilotildees do retorno da chamada de duas funccedilotildees baacutesicas da Linguagem Advpl User Function InfoTeste()
Local cHtml =
cHtml += VarInfo(lsquoDatersquodate())
cHtml += VarInfo(lsquoTimelsquotime())
Return cHtml
Deve ser gerado um echo no Console do Servidor parecido com este abaixo
Date -gt D ( 10) [08122003]
Time -gt C ( 8) [201748]
Infra-Estrutura APWEBEX - Exemplo das funccedilotildees de acentuaccedilatildeo ApWebEX
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo vemos a diferenccedila de comportamento entre as funccedilotildees baacutesicas da Linguagem Advpl Upper() e Lower() e a funccedilatildeo de Infra-estrutura Capital() em relaccedilatildeo agraves funccedilotildees da Infra-estrutura
APWEBEX UpperAce() LowerAce() e CApitalAce() quando utilizamos caracteres acentuados cRetorno =
cFrase = natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
cRetorno += Original + cFrase + CRLF
cRetorno += Upper() + upper(cFrase) + CRLF
cRetorno += Lower() + lower(cFrase) + CRLF
cRetorno += Capital() + capital(cFrase) + CRLF
cRetorno += UPPERACE() + UPPERACE(cFrase) + CRLF
cRetorno += LOWERACE() + LOWERACE(cFrase) + CRLF
cRetorno += CAPITALACE() + CAPITALACE(cFrase) + CRLF
Neste ponto a variaacutevel cRetorno deveraacute conter
Original natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
Upper() NatildeO Haacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSotildeES PARA O INEXPLICaacuteVEL
Lower() natildeo haacute explicaCcedilOtildees considerando excessotildees para o inexplicaacutevel
Capital() Natildeo Haacute ExplicaCcedilOtildees Considerando Excessotildees Para O Inexplicaacutevel
UPPERACE() NAtildeO HAacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSOtildeES PARA O INEXPLICAacuteVEL
LOWERACE() natildeo haacute explicaccedilotildees considerando excessotildees para o inexplicaacutevel
CAPITALACE() Natildeo Haacute Explicaccedilotildees Considerando Excessotildees Para O Inexplicaacutevel
Infra-Estrutura APWEBEX - Exemplos das funccedilotildees NTOC e CTON
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos as funccedilotildees cton e ntoc para realizar conversotildees de nuacutemeros em base decimal para outras bases numeacutericas e vice-versa
16
nNum1 = CTON(011010012) Converte binaacuterio para decimal
nNum2 = CTON(00DA25FE16) Converte Hexadecimal para decimal
nNum1++ Soma 1 ao numero em nNum1
nNum2++ Soma 1 ao numero em nNum2
cNum1 = NtoC(nNum128) Converte para binaacuterio novamente
cNum2 = NtoC(nNum2168) Converte para Hexa novamente
-------------------------------------------------------------------------
Ao final do programa cNum1 seraacute 01101010 e cNum2 seraacute 00DA25FF
-------------------------------------------------------------------------
APWEXADDERR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
APWEXADDERR ( [ cTitulo ] [ cInfo ] ) --gt T
Paracircmetros
Argumento Tipo Descriccedilatildeo
cTitulo Caracter cTitulo corresponde a um tiacutetulo identificador da informaccedilatildeo Deve ter no maacuteximo 20 caracteres Os caracteres acima da vigeacutesima posiccedilatildeo seratildeo
ignorados
cInfo Caracter cInfo corresponde agrave Informaccedilatildeo a ser acrescentada ao ERRORLOG em caso de erro
Retorno
Tipo Descriccedilatildeo
Loacutegico Esta funccedilatildeo sempre retorna T
Descriccedilatildeo
Atraveacutes da funccedilatildeo ApWExAddErr() podemos acrescentar uma string de informaccedilotildees adicionais em um buffer em memoacuteria descarregado na geraccedilatildeo do ERRORLOG no caso de uma ocorrecircncia de erro fatal na
working thread atual
Caso a funccedilatildeo seja chamada sem nenhum paracircmetro a uacuteltima ocorrecircncia acrescentada pela funccedilatildeo eacute eliminada da pilha interna de informaccedilotildees
ATENCcedilAtildeO Esta funccedilatildeo deve ser apenas utilizada em casos de necessidade de obtenccedilatildeo de informaccedilotildees especiacuteficas acerca de uma ocorrecircncia de erro natildeo reproduzida em ambiente de testes eou natildeo depuraacutevel pois
seu uso desnecessaacuterio prejudica a performance da aplicaccedilatildeo final
CAPITALACE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CAPITALACE ( lt cString gt ) --gt cStrCapital
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida
Retorno
Tipo Descriccedilatildeo
Caracter String resultante convertida para munuacutesculo com as primeiras letras das palavras significantes em maiuacutesculo
Descriccedilatildeo
Semelhante agrave funccedilatildeo de Infra-estrutura Capital() poreacutem converte tambeacutem caracteres acentuados
A funccedilatildeo CapitalAce() converte todos os caracteres de uma String para minuacutesculo e a primeira letra das palavras significantes para maiuacutesculo semelhante agrave funccedilatildeo Capital() poreacutem considera e converte tambeacutem
caracteres acentuados em OEM eou ANSI
CTON
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CTON ( lt cString gt lt nBase gt ) --gt nNumero
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave representaccedilatildeo de um nuacutemero em outra base numeacuterica compreendida entre 2 e 36
nBase Numeacuterico nBase corresponde agrave base numeacuterica utilizada pelo numero representado em cString
Retorno
Tipo Descriccedilatildeo
Numeacuterico Nuacutemero recebido como paracircmetro em notaccedilatildeo decimal ( Base 10 )
Descriccedilatildeo
Converte um nuacutemero representado em String de base 2 a 36 para um nuacutemero em base decimal (10)
Observaccedilatildeo Importante
Satildeo considerados caracteres vaacutelidos para compor um nuacutemero de base 36 os 10 algarismos numeacutericos de 0 a 9 e os 26 caracteres alfabeacuteticos maiuacutesculos compreendidos entre A e Z Quaisquer caractetes presentes na
String de paracircmetro fora desta faixa de dados eou fora da base ( por exemplo uma conversatildeo de string base 2 - binaacuterio - da string 01001020 ) retornaraacute -1 ( menos um )
ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
ESCAPE ( lt cString gt ) --gt cEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute uma sequecircncia de caracteres a ser processada
Retorno
Tipo Descriccedilatildeo
Caracter cEscaped corresponde agrave string original com os caracteres reservados utilizando a notaccedilatildeo HH
Descriccedilatildeo
A funccedilatildeo Escape() deve ser utilizada para realizar conversotildees de caracteres especiais e reservados quando da necessidade de passagem de paracircmetros via URL
A sintaxe de uma requisiccedilatildeo via URL para a passagem de paracircmetros eacute
(link)param=conteudoampparam2=conteudo2amp
Quando passamos paracircmetros via url devemos tomar o cuidado de natildeo utilizar caracteres reservados e especiais nos nomes e conteuacutedos de paracircmetros Para realizar estas conversotildees utilizamos a funccedilatildeo Escape()
17
EXECINPAGE
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXECINPAGE ( lt cAPHPage gt ) --gt cHTMLPage
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAPHPage Caracter Corresponde agraveo nome do APH que deve ser executado sem a extensatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cHtmlPage corresponde agrave string HTML gerada pela paacutegina APH AHU
Descriccedilatildeo
Atraveacutes da funccedilatildeo ExecInPage() executamos uma paacutegina APH passada como paracircmetro A funccedilatildeo deveraacute retornar a String HTML correspondente agrave paacutegina processada
Poreacutem a funccedilatildeo ExecInPage() realiza tratamentos adicionais padratildeo relacionaodo agraveo comportamento dos Projetos WEB referentes agrave customizaccedilotildees da segunte maneira
1 Primeiro eacute verificado se existe uma paacutegina AHU compilada com o nome cAPHPage Caso exista a mesma seraacute executada pela execinpage
2 Caso natildeo exista AHU com este nome eacute procurado pelo APH Caso o APH exista o mesmo seraacute executado pela ExecInPage
3 Caso natildeo existam no RPO atual o APH nem o AHU com o nome especificado no paracircmetro cAPHFile o processamento eacute abortado com a ocorrecircncia de erro [APWEXERR_0007] APH page
[ltcAPHPagegt] not found in RPO 4 Antes de executar o APH ou AHU identificado nos passos anteriores eacute verificado se existe um ponto de entrada ( User Function ) compilado com o mesmo nome do APH Caso exista o ponto de
entrada eacute executado Ele deveraacute retornar uma String HTML Se for retornada alguma string a funccedilatildeo retorna a tring retornada e natildeo processa o APH AHU Observaccedilatildeo A funccedilatildeo ExecInPage natildeo iraacute executar este
tratamento da User Function com o nome de cAPHPage caso a funccedilatildeo ExecInPage() esteja sendo executada atraveacutes de uma USER FUNCTION
Observaccedilatildeo Importante - Envio parcial de HTML agraveo Browser A funccedilatildeo ExecInpage() juntamente com o APH compilado ao serem processados iratildeo tentar enviar o conteuacutedo HTML para o Browser solicitante durante o processamento de modo que a funccedilatildeo normalmente iraacute
retornar uma String vazia
Caso seja necessaacuteria a execuccedilatildeo de uma paacutegina APH ou AHU e o natildeo-envio da mesma para o Browse por exemplo para a geraccedilatildeo de um coacutedigo HTML a ser enviado via e-mail revemos utilizar a funccedilatildeo
HttpSetPart() realizando uma chamada da mesma antes da ExecInPage() passando o paracircmetro F para desabilitar temporariamente o envio de HTML simultacircneo ao Browser e apoacutes a execuccedilatildeo da ExecInPage()
devemos re-habilitar o envio simultacircneo atraveacutes da chamada da funccedilatildeo HttpSetPart() com o paracircmetro T
EXISTPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTPAGE ( lt cAphFile gt ) --gt lFound
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAphFile Caracter Nome do arquivo APH sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Caracter Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistPage() para identificarmos no ambiente atual se um determinado arquivo APH encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistPage(teste)
conout(testeaph compilado neste RPO)
Else
conout(testeaph NAO compilado neste RPO)
Endif
EXISTUSRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTUSRPAGE ( lt cAhuFile gt ) --gt lExist
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAhuFile Caracter Nome do arquivo AHU sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Loacutegico Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistUSRPage() para identificarmos no ambiente atual se um determinado arquivo AHU encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistUSRPage(teste)
conout(testeahu compilado neste RPO)
Else
conout(testeahu NAO compilado neste RPO)
Endif
GETJOBPROFSTRING
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETJOBPROFSTRING ( lt cKey gt lt cDefault gt ) --gt cKeyValue
Paracircmetros
Argumento Tipo Descriccedilatildeo
cKey Caracter cKey corresponde agrave chave da seccedilatildeo de configuraccedilatildeo da Working Thread atual a ser retornada
cDefault Caracter Valor default (string) a ser retornado pela funccedilatildeo caso a chave especificada natildeo sehja encontrada no INI
Retorno
Tipo Descriccedilatildeo
Caracter Conteudo da Chave solicitada Caso a chave natildeo seja encontrada eacute retornado o conteudo de cDefault Caso esta funccedilatildeo natildeo seja executada a partir de uma Working Thread ela
18
retornaraacute uma string em branco ()
Descriccedilatildeo
Atraveacutes desta funccedilatildeo podemos recuperar as configuraccedilotildees do Job da Working Thread atual
GETWEXVERSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETWEXVERSION ( ) --gt cBuildId
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave String Identificadora da versatildeo no formato ltLIBgt VAAMMDDHHmm Vide Tabela A
Descriccedilatildeo
Esta funccedilatildeo natildeo requer argumentos e retorna o Identificador do build versatildeo de Release das funccedilotildees de Infra-Estrutura APWEBEX
Observaccedilatildeo A data informada pela versatildeo natildeo corresponde agrave ultima compilaccedilatildeo do RPO de um determinado Projeto WEB mas sim agrave data de release da LIB de Infra-Estrutura APWEBEX
Tabela A
Simbolo Descriccedilatildeo
AA Ano de geraccedilatildeo da Lib
MM Mecircs da geraccedilatildeo da Lib
DD Dia da geraccedilatildeo da Lib
HH Horaacuterio da geraccedilatildeo da Lib
mm Minutos do Horaacuterio de Geraccedilatildeo da Lib
(HTTP) Indica que a versatildeo foi compilada com a configuracatildeo de envio progressivo de HTML simultacircneo para o Browse Esta opccedilatildeo eacute imprescindiacutevel para projetos que se utilizam desta LIB
Por exemplo
APWEBEX Version 30312021900 (HTTP)
HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HEXSTRDUMP ( lt cString gt [ nStart ] [ nLength ] ) --gt cHExDump
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser lida para a geraccedilatildeo do Dump
nStart Numeacuterico Corresponde agrave posiccedilatildeo inicial de cString a ser considerada para a geraccedilatildeo do Dump a partir da posiccedilatildeo 1 Caso este paracircmetro natildeo seja informado o
Default eacute a posiccedilatildeo 1 da string
nLength Numeacuterico nLength corresponde agraveo tamanho a ser considerado para a geraccedilatildeo do DUMP a partir da posiccedilatildeo inicial recebida em nStart Caso este paracircmetro natildeo
seja informado eacute considerado o tamanho ateacute o final da String
Retorno
Tipo Descriccedilatildeo
Caracter O retorno da funccedilatildeo corresponde agrave uma string Advpl formatadas em 16 bytes em hexadecimal por linha mais o separador pipe (|) mais os 16 caracteres em Ansi Os caracteres de
controle ( codigo ascii menor que 32 ) satildeo convertidos para visualizaccedilatildeo para o caractere underline (_)
Descriccedilatildeo
Atraveacutes da funccedilatildeo HexStrDump() podemos gerar uma string em Advpl em formato de Dump Hexadecimal a partir da string informada como paracircmetro a partir de uma determinada posiccedilatildeo da string considerando um
nuacutemero de bytes informado
Caso os paracircmetros nPosIni e nTamString natildeo sejam informados o dump gerado corresponde a string recebida como paracircmetro em sua totalidade
Observaccedilatildeo
Natildeo devemos pasar para a funccedilatildeo HexStrDump uma string maior que 240 Kb pois a geraccedilatildeo da String de dump eacute realizada em memoacuteria sendo a string final gerada em meacutedia 42 vezes maior que a string passada
como paracircmetro Caso a string passada como paracircmetro seja maior que 240 Kb a execuccedilatildeo seraacute abortada com a ocorrecircncia de erro fatal string size overflow
HTMLNOTAGS
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HTMLNOTAGS ( lt cStrHtml gt ) --gt cStrNoTags
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrHtml Caracter cStrHtml corresponde a uma String que natildeo pode conter caracteres Html interpretaacuteveis
Retorno
Tipo Descriccedilatildeo
Caracter String original com os caracteres interpretaacuteveis Html lt gt amp convertidos para caracteres natildeo-interpretaacuteveis
Descriccedilatildeo
A Funccedilatildeo HTMLNOTAGS converte as Tags interpretaacuteveis de uma String HTML para TAGS natildeo interpretaacuteveis Este recurso eacute normalmente utilizado quando precisamos montar um input Html com um conteudo que
nao pode ser interpretado pelo browser como uma Tag Esta funccedilatildeo apenas converte os caracteres lt ( menor que ) gt ( maior que ) amp ( e comercial ) e ldquo ( aspas duplas )
Recomenda-se fortemente que na montagem do value de um input html o conteuacutedo do mesmo seja colocado entre aspas duplas pois caso o conteuacutedo do value inicial do campo contenha aspas simples (
natildeo convertidas pela funccedilatildeo HtmlNoTags) isto poderaacute ocasionar perda de dados e erro de sintaxe no formulaacuterio Html
HTTPISWEBEX
Revisatildeo 12122003
Sintaxe
HTTPISWEBEX ( ) --gt lIsApWEBEX
Retorno
Tipo Descriccedilatildeo
Loacutegico A funccedilatildeo retornaraacute T caso o ambiente de execuccedilatildeo atual seja uma Working Thread WEBEX inicializada pela funccedilatildeo de infra-estrutura STARTWEBEX
Descriccedilatildeo
Atraveacutes da funccedilatildeo HttpIsWebEx() eacute possiacutevel identificarmos se o programa atual estaacute sendo executado atraveacutes de uma Working Thread inicializada utilizando-se as funccedilotildees de Infra-Estrutura APWEBEX
ISEMAIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
19
Sintaxe
ISEMAIL ( lt cEMail gt ) --gt lEmailOk
Paracircmetros
Argumento Tipo Descriccedilatildeo
cEMail Caracter cEmail corresponde a string a ser analizada contendo um e apenas um endereccedilo de e-mail
Retorno
Tipo Descriccedilatildeo
Caracter Retorna T caso a sring recebida como paracircmetro atenda agraves definiccedilotildees de nomenclatura vaacutelidos para um endereccedilo de e-mail
Descriccedilatildeo
Utilizada para validar e-mails em Advpl a funccedilatildeo ISEMAIL recebe como paracircmetro uma string contendo um e-mail retornando T caso a string esteja em um formaacuteto vaacutelido respeitando a regra para nomenclatura de
endereccedilos de e-mail
Regra Um e-mail eacute considerado vaacutelido caso seja iniciado por um caracter apenas contenha caracteres asc de a a z e 0 a 9 e os caracteres (arroba) (ponto) - ( hiacutefen) ou _ (underline) e deve conter uma e
apenas uma arroba e no minimo um ponto apos a arroba intercalado por um caracter
LOWERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
LOWERACE ( lt cString gt ) --gt cStrLower
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a sequecircncia de caracteres a ser convertida para letras minuacutesculas
Retorno
Tipo Descriccedilatildeo
Caracter String original em letras minuacutesculas
Descriccedilatildeo
A Funccedilatildeo LOWERACE converte todos os caracteres de uma String para ldquominusculordquo semelhante agrave funccedilatildeo LOWER() poreacutem considera e converte tambeacutem caracteres acentuados em ANSI
NTOC
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
NTOC ( lt nNumero gt lt nBase gt lt nTamStr gt ) --gt cString
Paracircmetros
Argumento Tipo Descriccedilatildeo
nNumero Numeacuterico nNumero eacute o valor numeacuterico em base devimal a ser convertido
nBase Numeacuterico nBase corresponde agrave base binaacuteria a ser utilizada para converter nNumero
nTamStr Numeacuterico nTamStr corresponde ao tamanho da string representando o numero na base desejada
Retorno
Tipo Descriccedilatildeo
Caracter cString corresponde ao numero convertido para a base numeacuterica especificada como paracircmetro
Descriccedilatildeo
A Funccedilatildeo NTOC converte um nuacutemero em notaccedilatildeo decimal para um nuacutemero representado por String utilizando uma base numeacuterica entre 2 e 36 preenchendo-o com ldquo0rdquo (zeros) agrave esquerda do tamanho especificado
Observaccedilatildeo O Paracircmetro nBase deve ser especificado com um nuacutemero entre 2 e 36 Caso seja passado como paracircmetro um nuacutemero base fora desta faixa o processamento eacute abortado com a ocorrecircncia de erro
[APWEXERR_0022] INVALID NTOC BASE [X] onde ltXgt foi a base passada como argumento
REDIRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
REDIRPAGE ( lt cUrl gt [ cTarget ] [ nTime ] ) --gt cScript
Paracircmetros
Argumento Tipo Descriccedilatildeo
cUrl Caracter Link para onde o script deve apontar o redirecionamento
cTarget Caracter Destino do redirecionamento Caso natildeo especificado o default eacute _self
nTime Numeacuterico Tempo (em segundos) de delay antes do redirecionamento ser executado
Retorno
Tipo Descriccedilatildeo
Caracter Script Html JavaScript que ao ser executado no Browser (client) chama a paacuteginaobjeto chamado no Link
Descriccedilatildeo
A funccedilatildeo RedirPage eacute utilizada quando desejamos devolver ao Browser um script que ao ser executado redirecionaraacute o Browser agrave abertura de um link passado como paracircmetro
RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLACE ( lt cStrFind gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrFind Caracter cStrFind corresponde agrave sequecircncia de caracteres a ser procurada podendo conter caracteres maiuacutesculos e minuacutesculos com ou sem acentuaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cStrQuery corresponde agrave string de busca a ser utilizada na query utilizando caracteres em minuacutesculo
Descriccedilatildeo
A funccedilatildeo RetSqlAce eacute utilizada para auxiliar de montagem de querys de busca de caracteres acentuados em bases de dados A funccedilatildeo automaticamente trata a string original removendo os acentos convertendo todos
os caracteres para minuacutesculas e trocando todas as vogais e cedilhas da string original por uma sequecircncia de caracteres acentuados em munuacutescilas para busca posicional
20
RETSQLCOND
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLCOND ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlCond() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga e o Makira Hypersite utilizando aliases de 3
caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar a filial atual ( xFilial ) de acordo com o modo do arquivo ( X2_MODO ) e para sempre desconsiderar
registros deletados
Observaccedilotildees
Esta funccedilatildeo foi mantida apenas por compatibilidade pois a ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do
banco para efeitos de performance Para ganharmos performance nas Querys devemos ao inveacutes de utilizar a funccedilatildeo RetSqlCond() utilizar como primeira clauacutesula WHERE o retorno da funccedilatildeo RetSqlFil() (
comparaccedilatildeo dos campos _FILIAL os primeiros do(s) iacutendice(s) do ERP ) que retorna apenas as comparaccedilotildees de Filial e por uacuteltimo a funccedilatildeo RetSqlDel que retorna o script para verificaccedilatildeo dos campos deletados (
que eacute o uacuteltimo campo das chaves de iacutendice do ERP utilizando TopConnect )
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlCond() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de
modo que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute
retorna os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLDEL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLDEL ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlDel() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo D_E_L_E_T_ da(s) tabela(s) passada(s) como paracircmetro
Observaccedilotildees
A ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do banco para efeitos de performance Para ganharmos performance
nas Querys devemos utilizar a funccedilatildeo RetSqlDEl() na montagem das ultimas consistecircncias da claacuteusula WHERE de uma Query
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlDel() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo
que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna
os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLFIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLFIL ( lt cAliases gt [ cCompFil ] ) --gt cSQlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
cCompFil Caracter
Atraveacutes de cCompFil eacute possiacutevel especificar uma Filial FIXA a ser comparada com os campos FILIAL do(s) alias(es) passados no paracircmetro cAliases
Caso natildeo informado os campos _FILIAL da(s) tabela(s) passadas como paracircmetro em cAliases seratildeo comparados com o retorno da funccedilatildeo xFilial() de
cada alias respectivamente
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo filial atual ( xFilial ) de acordo com o modo de abertura do arquivo no ERP ( X2_MODO )
Observaccedilatildeo
Devemos atentar ao fato que a funccedilatildeo RetSqlFil() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo que estes
alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna os
nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLTAB
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLTAB ( lt cAliasList gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliasList Caracter String contendo um ou mais alias separados por virgula a terem seus nomes fiacutesicos determinados
Retorno
Tipo Descriccedilatildeo
Caracter String contendo nomes fisicos e alias identificadores dos aliases recebidos como paracircmetro
Descriccedilatildeo
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
13
Ocorreu um erro inesperado no
cCustomHtml += processamento desta paacutegina O Administrador do sistema seraacute notificado desta
cCustomHtml += ocorrecircncia Recomendamos fortemente que esta janela do navegador seja cCustomHtml += fechada e uma nova janela seja aberta para retornar agrave navegaccedilatildeo do site
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
cCustomHtml +=
Return cCustomHtml
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Nos exemplo abaixo utilizamos a funccedilatildeo escape() para formatar paracircmetros para inserir em uma URL cUrl = httplocalhostwebinfoapw
cPAram1 = Teste de Parametro 01-02
cPAram2 = reserva
cPAram3 = 1+2+3
cUrl += Par01= + escape(cPAram1) + ampPAr02= + escape(cPAram2) + ampPar03= + escape(cPAram3)
O conteudo de cUrl deveraacute ser httplocalhostwebinfoapwPar01=Teste20de20Parametro2001-02ampPAr02=23reserva23ampPar03=12B22B3
proacuteprio para a monyahem de um link
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETJOBPROFSTRING
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
O exemplo abaixo executado em uma thread iniciada a partir de um JOB WEBEX recupera algumas configuraccedilotildees atuais em uso para este JOB cJobType = GetJobProfString(type(empty) )
cInstances = GetJobProfString(Instances(empty) )
cInacTime = GetJobProfString(InactiveTimeout(default) )
cExpTime = GetJobProfString(ExpirationTime(default) )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo GETPARVALUE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo satildeo montados dois arrays multi-dimensionais com 2 dimensotildees e satildeo realizadas buscas nos mesmos explorando todas as possibilidades de uso da funccedilatildeo GetParValue() Local aTeste1 =
Local aTeste2 =
Aadd(aTeste1AliasTMP1)
Aadd(aTeste1Relacao2x3)
Aadd(aTeste2AliasTMP2)
Aadd(aTeste2Info---Informaccedilatildeo adicional---)
Busca apenas no array ateste1
cAlias = GetParValue(ALIASaTeste1)
cRelacao = GetParValue(RELACAOaTeste1)
cInfo = GetParValue(INFOaTeste1)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) (nao encontrado)
Busca apenas no array ateste2
cAlias = GetParValue(ALIASaTeste2)
cRelacao = GetParValue(RELACAOaTeste2)
cInfo = GetParValue(INFOaTeste2)
DEFAULT cAlias = (nao encontrado)
DEFAULT cRelacao = (nao encontrado)
DEFAULT cInfo = (nao encontrado)
conout(cAlias) TMP2
conout(cRelacao) (nao encontrado)
conout(cInfo) ---Informaccedilatildeo Adicional---
Busca em ambos os Arrays
Primeiro no aTeste1 e depois no aTeste2
cAlias = GetParValue(ALIASaTeste1aTeste2)
cRelacao = GetParValue(RELACAOaTeste1aTeste2)
cInfo = GetParValue(INFOaTeste1aTeste2)
conout(cAlias) TMP1
conout(cRelacao) 2x3
conout(cInfo) ---Informaccedilatildeo Adicional---
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Atraveacutes do exemplo abaixo geramos a string com o DUMP de um arquivo HTML salvo na pasta WEB a partir do RootPath do Environment O Dump do arquivo seraacute mostrado no Console do servidor e no Web
Browser que solicitou a funccedilatildeo U_DumpTestapw
include protheusch
include apwebexch
User Function DumpTest()
Local cHtml =
Local cTXTFile =
Local cDump =
WEB EXTENDED INIT cHtml
14
Le o arquivo
cTTXFile = memoread(WebDefaulthtm)
Gera a string com o Dump do arquivo
cDump = HExStrDump(cTTXFile)
Mostra o Dump no console
conout(cDump)
Gera HTML para a visualizaccedilatildeo do DUMP
cHtml = VarInfo(DUMPHtmlnotags(cDump)tf)
WEB EXTENDED END
Return cHtml
Exemplo do Texto mostrado no Console
HexSTRDump ( String 237 Start 1 Length 237 )
-------------------------------------------------------------------------------
3C 48 54 4D 4C 3E 3C 48 45 41 44 3E 0D 0A 3C 4D | ltHTMLgtltHEADgt__ltM
45 54 41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 | ETA HTTP-EQUIV=
43 6F 6E 74 65 6E 74 2D 54 79 70 65 22 20 63 6F | Content-Type co
6E 74 65 6E 74 3D 22 74 65 78 74 2F 68 74 6D 6C | ntent=texthtml
22 0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 | __ltMETA HTTP-EQ
55 49 56 3D 22 70 72 61 67 6D 61 22 20 63 6F 6E | UIV=pragma con
74 65 6E 74 3D 22 6E 6F 2D 63 61 63 68 65 22 3E | tent=no-cachegt
0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 55 | __ltMETA HTTP-EQU
49 56 3D 22 45 78 70 69 72 65 73 22 20 63 6F 6E | IV=Expires con
74 65 6E 74 3D 22 2D 31 22 3E 0D 0A 3C 4D 45 54 | tent=-1gt__ltMET
41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 52 65 | A HTTP-EQUIV=Re
66 72 65 73 68 22 20 63 6F 6E 74 65 6E 74 3D 22 | fresh content=
30 3B 20 75 72 6C 3D 2F 77 5F 77 45 78 30 30 30 | 0 url=w_wEx000
2E 61 70 77 22 3E 3C 2F 48 45 41 44 3E 0D 0A 3C | apwgtltHEADgt__lt
2F 48 45 41 44 3E 3C 2F 48 54 4D 4C 3E | HEADgtltHTMLgt
-------------------------------------------------------------------------------
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HTMLNOTAGS
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo a funccedilatildeo HtmlNoTags eacute utilizada para permitir a utilizaccedilatildeo de caracteres especiais no conteuacutedo de um input para um formulaacuterio Html Local cHtml =
Local cInput =
Conteudo do campo com tags HTML intepretaacuteveis
cInput =
Ao montar o Input aplicar a HtmlNoTags() ao conteudo do mesmo
cHtml +=
+HtmlNoTags(cIn
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
15
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos a funccedilatildeo RetSqlAce para montar uma query de busca por tiacutetulo de uma determinada informaccedilatildeo considerando todas as possibilidades de acentuaccedilatildeo independentemente de como o
banco foi alimentado eou a string de busca foi digitada
IMPORTANTE Na expressatildeo da Query o campo da tabela deve ser passado pela funccedilatildeo LOWER do BAnco pois a funccedilatildeo retsqlace monta a string para busca com letras minuacutesculas cFind = acentuaccedilatildeo
cQuery = SELECT FROM + RetSqlTab(ZZ1)
cQuery += WHERE LOWER(ZZ1_TITULO) LIKE +RetSqlAce(cFind)+
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VALTOSQL
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = + ValToSql(02)
cQuery += AND FA2_DTINC lt= + ValToSql(date())
O exemplo acima caso escrito de forma a realizar as conversotildees especiacuteficas para cada tipo de conteuacutedo seria o equivalemte ao coacutedigo abaixo
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = 02
cQuery += AND FA2_DTINC lt= + DTOS( date() )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VARINFO
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo eacute gerada uma string HTML com as informaccedilotildees do retorno da chamada de duas funccedilotildees baacutesicas da Linguagem Advpl User Function InfoTeste()
Local cHtml =
cHtml += VarInfo(lsquoDatersquodate())
cHtml += VarInfo(lsquoTimelsquotime())
Return cHtml
Deve ser gerado um echo no Console do Servidor parecido com este abaixo
Date -gt D ( 10) [08122003]
Time -gt C ( 8) [201748]
Infra-Estrutura APWEBEX - Exemplo das funccedilotildees de acentuaccedilatildeo ApWebEX
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo vemos a diferenccedila de comportamento entre as funccedilotildees baacutesicas da Linguagem Advpl Upper() e Lower() e a funccedilatildeo de Infra-estrutura Capital() em relaccedilatildeo agraves funccedilotildees da Infra-estrutura
APWEBEX UpperAce() LowerAce() e CApitalAce() quando utilizamos caracteres acentuados cRetorno =
cFrase = natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
cRetorno += Original + cFrase + CRLF
cRetorno += Upper() + upper(cFrase) + CRLF
cRetorno += Lower() + lower(cFrase) + CRLF
cRetorno += Capital() + capital(cFrase) + CRLF
cRetorno += UPPERACE() + UPPERACE(cFrase) + CRLF
cRetorno += LOWERACE() + LOWERACE(cFrase) + CRLF
cRetorno += CAPITALACE() + CAPITALACE(cFrase) + CRLF
Neste ponto a variaacutevel cRetorno deveraacute conter
Original natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
Upper() NatildeO Haacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSotildeES PARA O INEXPLICaacuteVEL
Lower() natildeo haacute explicaCcedilOtildees considerando excessotildees para o inexplicaacutevel
Capital() Natildeo Haacute ExplicaCcedilOtildees Considerando Excessotildees Para O Inexplicaacutevel
UPPERACE() NAtildeO HAacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSOtildeES PARA O INEXPLICAacuteVEL
LOWERACE() natildeo haacute explicaccedilotildees considerando excessotildees para o inexplicaacutevel
CAPITALACE() Natildeo Haacute Explicaccedilotildees Considerando Excessotildees Para O Inexplicaacutevel
Infra-Estrutura APWEBEX - Exemplos das funccedilotildees NTOC e CTON
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos as funccedilotildees cton e ntoc para realizar conversotildees de nuacutemeros em base decimal para outras bases numeacutericas e vice-versa
16
nNum1 = CTON(011010012) Converte binaacuterio para decimal
nNum2 = CTON(00DA25FE16) Converte Hexadecimal para decimal
nNum1++ Soma 1 ao numero em nNum1
nNum2++ Soma 1 ao numero em nNum2
cNum1 = NtoC(nNum128) Converte para binaacuterio novamente
cNum2 = NtoC(nNum2168) Converte para Hexa novamente
-------------------------------------------------------------------------
Ao final do programa cNum1 seraacute 01101010 e cNum2 seraacute 00DA25FF
-------------------------------------------------------------------------
APWEXADDERR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
APWEXADDERR ( [ cTitulo ] [ cInfo ] ) --gt T
Paracircmetros
Argumento Tipo Descriccedilatildeo
cTitulo Caracter cTitulo corresponde a um tiacutetulo identificador da informaccedilatildeo Deve ter no maacuteximo 20 caracteres Os caracteres acima da vigeacutesima posiccedilatildeo seratildeo
ignorados
cInfo Caracter cInfo corresponde agrave Informaccedilatildeo a ser acrescentada ao ERRORLOG em caso de erro
Retorno
Tipo Descriccedilatildeo
Loacutegico Esta funccedilatildeo sempre retorna T
Descriccedilatildeo
Atraveacutes da funccedilatildeo ApWExAddErr() podemos acrescentar uma string de informaccedilotildees adicionais em um buffer em memoacuteria descarregado na geraccedilatildeo do ERRORLOG no caso de uma ocorrecircncia de erro fatal na
working thread atual
Caso a funccedilatildeo seja chamada sem nenhum paracircmetro a uacuteltima ocorrecircncia acrescentada pela funccedilatildeo eacute eliminada da pilha interna de informaccedilotildees
ATENCcedilAtildeO Esta funccedilatildeo deve ser apenas utilizada em casos de necessidade de obtenccedilatildeo de informaccedilotildees especiacuteficas acerca de uma ocorrecircncia de erro natildeo reproduzida em ambiente de testes eou natildeo depuraacutevel pois
seu uso desnecessaacuterio prejudica a performance da aplicaccedilatildeo final
CAPITALACE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CAPITALACE ( lt cString gt ) --gt cStrCapital
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida
Retorno
Tipo Descriccedilatildeo
Caracter String resultante convertida para munuacutesculo com as primeiras letras das palavras significantes em maiuacutesculo
Descriccedilatildeo
Semelhante agrave funccedilatildeo de Infra-estrutura Capital() poreacutem converte tambeacutem caracteres acentuados
A funccedilatildeo CapitalAce() converte todos os caracteres de uma String para minuacutesculo e a primeira letra das palavras significantes para maiuacutesculo semelhante agrave funccedilatildeo Capital() poreacutem considera e converte tambeacutem
caracteres acentuados em OEM eou ANSI
CTON
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CTON ( lt cString gt lt nBase gt ) --gt nNumero
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave representaccedilatildeo de um nuacutemero em outra base numeacuterica compreendida entre 2 e 36
nBase Numeacuterico nBase corresponde agrave base numeacuterica utilizada pelo numero representado em cString
Retorno
Tipo Descriccedilatildeo
Numeacuterico Nuacutemero recebido como paracircmetro em notaccedilatildeo decimal ( Base 10 )
Descriccedilatildeo
Converte um nuacutemero representado em String de base 2 a 36 para um nuacutemero em base decimal (10)
Observaccedilatildeo Importante
Satildeo considerados caracteres vaacutelidos para compor um nuacutemero de base 36 os 10 algarismos numeacutericos de 0 a 9 e os 26 caracteres alfabeacuteticos maiuacutesculos compreendidos entre A e Z Quaisquer caractetes presentes na
String de paracircmetro fora desta faixa de dados eou fora da base ( por exemplo uma conversatildeo de string base 2 - binaacuterio - da string 01001020 ) retornaraacute -1 ( menos um )
ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
ESCAPE ( lt cString gt ) --gt cEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute uma sequecircncia de caracteres a ser processada
Retorno
Tipo Descriccedilatildeo
Caracter cEscaped corresponde agrave string original com os caracteres reservados utilizando a notaccedilatildeo HH
Descriccedilatildeo
A funccedilatildeo Escape() deve ser utilizada para realizar conversotildees de caracteres especiais e reservados quando da necessidade de passagem de paracircmetros via URL
A sintaxe de uma requisiccedilatildeo via URL para a passagem de paracircmetros eacute
(link)param=conteudoampparam2=conteudo2amp
Quando passamos paracircmetros via url devemos tomar o cuidado de natildeo utilizar caracteres reservados e especiais nos nomes e conteuacutedos de paracircmetros Para realizar estas conversotildees utilizamos a funccedilatildeo Escape()
17
EXECINPAGE
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXECINPAGE ( lt cAPHPage gt ) --gt cHTMLPage
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAPHPage Caracter Corresponde agraveo nome do APH que deve ser executado sem a extensatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cHtmlPage corresponde agrave string HTML gerada pela paacutegina APH AHU
Descriccedilatildeo
Atraveacutes da funccedilatildeo ExecInPage() executamos uma paacutegina APH passada como paracircmetro A funccedilatildeo deveraacute retornar a String HTML correspondente agrave paacutegina processada
Poreacutem a funccedilatildeo ExecInPage() realiza tratamentos adicionais padratildeo relacionaodo agraveo comportamento dos Projetos WEB referentes agrave customizaccedilotildees da segunte maneira
1 Primeiro eacute verificado se existe uma paacutegina AHU compilada com o nome cAPHPage Caso exista a mesma seraacute executada pela execinpage
2 Caso natildeo exista AHU com este nome eacute procurado pelo APH Caso o APH exista o mesmo seraacute executado pela ExecInPage
3 Caso natildeo existam no RPO atual o APH nem o AHU com o nome especificado no paracircmetro cAPHFile o processamento eacute abortado com a ocorrecircncia de erro [APWEXERR_0007] APH page
[ltcAPHPagegt] not found in RPO 4 Antes de executar o APH ou AHU identificado nos passos anteriores eacute verificado se existe um ponto de entrada ( User Function ) compilado com o mesmo nome do APH Caso exista o ponto de
entrada eacute executado Ele deveraacute retornar uma String HTML Se for retornada alguma string a funccedilatildeo retorna a tring retornada e natildeo processa o APH AHU Observaccedilatildeo A funccedilatildeo ExecInPage natildeo iraacute executar este
tratamento da User Function com o nome de cAPHPage caso a funccedilatildeo ExecInPage() esteja sendo executada atraveacutes de uma USER FUNCTION
Observaccedilatildeo Importante - Envio parcial de HTML agraveo Browser A funccedilatildeo ExecInpage() juntamente com o APH compilado ao serem processados iratildeo tentar enviar o conteuacutedo HTML para o Browser solicitante durante o processamento de modo que a funccedilatildeo normalmente iraacute
retornar uma String vazia
Caso seja necessaacuteria a execuccedilatildeo de uma paacutegina APH ou AHU e o natildeo-envio da mesma para o Browse por exemplo para a geraccedilatildeo de um coacutedigo HTML a ser enviado via e-mail revemos utilizar a funccedilatildeo
HttpSetPart() realizando uma chamada da mesma antes da ExecInPage() passando o paracircmetro F para desabilitar temporariamente o envio de HTML simultacircneo ao Browser e apoacutes a execuccedilatildeo da ExecInPage()
devemos re-habilitar o envio simultacircneo atraveacutes da chamada da funccedilatildeo HttpSetPart() com o paracircmetro T
EXISTPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTPAGE ( lt cAphFile gt ) --gt lFound
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAphFile Caracter Nome do arquivo APH sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Caracter Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistPage() para identificarmos no ambiente atual se um determinado arquivo APH encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistPage(teste)
conout(testeaph compilado neste RPO)
Else
conout(testeaph NAO compilado neste RPO)
Endif
EXISTUSRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTUSRPAGE ( lt cAhuFile gt ) --gt lExist
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAhuFile Caracter Nome do arquivo AHU sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Loacutegico Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistUSRPage() para identificarmos no ambiente atual se um determinado arquivo AHU encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistUSRPage(teste)
conout(testeahu compilado neste RPO)
Else
conout(testeahu NAO compilado neste RPO)
Endif
GETJOBPROFSTRING
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETJOBPROFSTRING ( lt cKey gt lt cDefault gt ) --gt cKeyValue
Paracircmetros
Argumento Tipo Descriccedilatildeo
cKey Caracter cKey corresponde agrave chave da seccedilatildeo de configuraccedilatildeo da Working Thread atual a ser retornada
cDefault Caracter Valor default (string) a ser retornado pela funccedilatildeo caso a chave especificada natildeo sehja encontrada no INI
Retorno
Tipo Descriccedilatildeo
Caracter Conteudo da Chave solicitada Caso a chave natildeo seja encontrada eacute retornado o conteudo de cDefault Caso esta funccedilatildeo natildeo seja executada a partir de uma Working Thread ela
18
retornaraacute uma string em branco ()
Descriccedilatildeo
Atraveacutes desta funccedilatildeo podemos recuperar as configuraccedilotildees do Job da Working Thread atual
GETWEXVERSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETWEXVERSION ( ) --gt cBuildId
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave String Identificadora da versatildeo no formato ltLIBgt VAAMMDDHHmm Vide Tabela A
Descriccedilatildeo
Esta funccedilatildeo natildeo requer argumentos e retorna o Identificador do build versatildeo de Release das funccedilotildees de Infra-Estrutura APWEBEX
Observaccedilatildeo A data informada pela versatildeo natildeo corresponde agrave ultima compilaccedilatildeo do RPO de um determinado Projeto WEB mas sim agrave data de release da LIB de Infra-Estrutura APWEBEX
Tabela A
Simbolo Descriccedilatildeo
AA Ano de geraccedilatildeo da Lib
MM Mecircs da geraccedilatildeo da Lib
DD Dia da geraccedilatildeo da Lib
HH Horaacuterio da geraccedilatildeo da Lib
mm Minutos do Horaacuterio de Geraccedilatildeo da Lib
(HTTP) Indica que a versatildeo foi compilada com a configuracatildeo de envio progressivo de HTML simultacircneo para o Browse Esta opccedilatildeo eacute imprescindiacutevel para projetos que se utilizam desta LIB
Por exemplo
APWEBEX Version 30312021900 (HTTP)
HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HEXSTRDUMP ( lt cString gt [ nStart ] [ nLength ] ) --gt cHExDump
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser lida para a geraccedilatildeo do Dump
nStart Numeacuterico Corresponde agrave posiccedilatildeo inicial de cString a ser considerada para a geraccedilatildeo do Dump a partir da posiccedilatildeo 1 Caso este paracircmetro natildeo seja informado o
Default eacute a posiccedilatildeo 1 da string
nLength Numeacuterico nLength corresponde agraveo tamanho a ser considerado para a geraccedilatildeo do DUMP a partir da posiccedilatildeo inicial recebida em nStart Caso este paracircmetro natildeo
seja informado eacute considerado o tamanho ateacute o final da String
Retorno
Tipo Descriccedilatildeo
Caracter O retorno da funccedilatildeo corresponde agrave uma string Advpl formatadas em 16 bytes em hexadecimal por linha mais o separador pipe (|) mais os 16 caracteres em Ansi Os caracteres de
controle ( codigo ascii menor que 32 ) satildeo convertidos para visualizaccedilatildeo para o caractere underline (_)
Descriccedilatildeo
Atraveacutes da funccedilatildeo HexStrDump() podemos gerar uma string em Advpl em formato de Dump Hexadecimal a partir da string informada como paracircmetro a partir de uma determinada posiccedilatildeo da string considerando um
nuacutemero de bytes informado
Caso os paracircmetros nPosIni e nTamString natildeo sejam informados o dump gerado corresponde a string recebida como paracircmetro em sua totalidade
Observaccedilatildeo
Natildeo devemos pasar para a funccedilatildeo HexStrDump uma string maior que 240 Kb pois a geraccedilatildeo da String de dump eacute realizada em memoacuteria sendo a string final gerada em meacutedia 42 vezes maior que a string passada
como paracircmetro Caso a string passada como paracircmetro seja maior que 240 Kb a execuccedilatildeo seraacute abortada com a ocorrecircncia de erro fatal string size overflow
HTMLNOTAGS
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HTMLNOTAGS ( lt cStrHtml gt ) --gt cStrNoTags
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrHtml Caracter cStrHtml corresponde a uma String que natildeo pode conter caracteres Html interpretaacuteveis
Retorno
Tipo Descriccedilatildeo
Caracter String original com os caracteres interpretaacuteveis Html lt gt amp convertidos para caracteres natildeo-interpretaacuteveis
Descriccedilatildeo
A Funccedilatildeo HTMLNOTAGS converte as Tags interpretaacuteveis de uma String HTML para TAGS natildeo interpretaacuteveis Este recurso eacute normalmente utilizado quando precisamos montar um input Html com um conteudo que
nao pode ser interpretado pelo browser como uma Tag Esta funccedilatildeo apenas converte os caracteres lt ( menor que ) gt ( maior que ) amp ( e comercial ) e ldquo ( aspas duplas )
Recomenda-se fortemente que na montagem do value de um input html o conteuacutedo do mesmo seja colocado entre aspas duplas pois caso o conteuacutedo do value inicial do campo contenha aspas simples (
natildeo convertidas pela funccedilatildeo HtmlNoTags) isto poderaacute ocasionar perda de dados e erro de sintaxe no formulaacuterio Html
HTTPISWEBEX
Revisatildeo 12122003
Sintaxe
HTTPISWEBEX ( ) --gt lIsApWEBEX
Retorno
Tipo Descriccedilatildeo
Loacutegico A funccedilatildeo retornaraacute T caso o ambiente de execuccedilatildeo atual seja uma Working Thread WEBEX inicializada pela funccedilatildeo de infra-estrutura STARTWEBEX
Descriccedilatildeo
Atraveacutes da funccedilatildeo HttpIsWebEx() eacute possiacutevel identificarmos se o programa atual estaacute sendo executado atraveacutes de uma Working Thread inicializada utilizando-se as funccedilotildees de Infra-Estrutura APWEBEX
ISEMAIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
19
Sintaxe
ISEMAIL ( lt cEMail gt ) --gt lEmailOk
Paracircmetros
Argumento Tipo Descriccedilatildeo
cEMail Caracter cEmail corresponde a string a ser analizada contendo um e apenas um endereccedilo de e-mail
Retorno
Tipo Descriccedilatildeo
Caracter Retorna T caso a sring recebida como paracircmetro atenda agraves definiccedilotildees de nomenclatura vaacutelidos para um endereccedilo de e-mail
Descriccedilatildeo
Utilizada para validar e-mails em Advpl a funccedilatildeo ISEMAIL recebe como paracircmetro uma string contendo um e-mail retornando T caso a string esteja em um formaacuteto vaacutelido respeitando a regra para nomenclatura de
endereccedilos de e-mail
Regra Um e-mail eacute considerado vaacutelido caso seja iniciado por um caracter apenas contenha caracteres asc de a a z e 0 a 9 e os caracteres (arroba) (ponto) - ( hiacutefen) ou _ (underline) e deve conter uma e
apenas uma arroba e no minimo um ponto apos a arroba intercalado por um caracter
LOWERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
LOWERACE ( lt cString gt ) --gt cStrLower
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a sequecircncia de caracteres a ser convertida para letras minuacutesculas
Retorno
Tipo Descriccedilatildeo
Caracter String original em letras minuacutesculas
Descriccedilatildeo
A Funccedilatildeo LOWERACE converte todos os caracteres de uma String para ldquominusculordquo semelhante agrave funccedilatildeo LOWER() poreacutem considera e converte tambeacutem caracteres acentuados em ANSI
NTOC
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
NTOC ( lt nNumero gt lt nBase gt lt nTamStr gt ) --gt cString
Paracircmetros
Argumento Tipo Descriccedilatildeo
nNumero Numeacuterico nNumero eacute o valor numeacuterico em base devimal a ser convertido
nBase Numeacuterico nBase corresponde agrave base binaacuteria a ser utilizada para converter nNumero
nTamStr Numeacuterico nTamStr corresponde ao tamanho da string representando o numero na base desejada
Retorno
Tipo Descriccedilatildeo
Caracter cString corresponde ao numero convertido para a base numeacuterica especificada como paracircmetro
Descriccedilatildeo
A Funccedilatildeo NTOC converte um nuacutemero em notaccedilatildeo decimal para um nuacutemero representado por String utilizando uma base numeacuterica entre 2 e 36 preenchendo-o com ldquo0rdquo (zeros) agrave esquerda do tamanho especificado
Observaccedilatildeo O Paracircmetro nBase deve ser especificado com um nuacutemero entre 2 e 36 Caso seja passado como paracircmetro um nuacutemero base fora desta faixa o processamento eacute abortado com a ocorrecircncia de erro
[APWEXERR_0022] INVALID NTOC BASE [X] onde ltXgt foi a base passada como argumento
REDIRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
REDIRPAGE ( lt cUrl gt [ cTarget ] [ nTime ] ) --gt cScript
Paracircmetros
Argumento Tipo Descriccedilatildeo
cUrl Caracter Link para onde o script deve apontar o redirecionamento
cTarget Caracter Destino do redirecionamento Caso natildeo especificado o default eacute _self
nTime Numeacuterico Tempo (em segundos) de delay antes do redirecionamento ser executado
Retorno
Tipo Descriccedilatildeo
Caracter Script Html JavaScript que ao ser executado no Browser (client) chama a paacuteginaobjeto chamado no Link
Descriccedilatildeo
A funccedilatildeo RedirPage eacute utilizada quando desejamos devolver ao Browser um script que ao ser executado redirecionaraacute o Browser agrave abertura de um link passado como paracircmetro
RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLACE ( lt cStrFind gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrFind Caracter cStrFind corresponde agrave sequecircncia de caracteres a ser procurada podendo conter caracteres maiuacutesculos e minuacutesculos com ou sem acentuaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cStrQuery corresponde agrave string de busca a ser utilizada na query utilizando caracteres em minuacutesculo
Descriccedilatildeo
A funccedilatildeo RetSqlAce eacute utilizada para auxiliar de montagem de querys de busca de caracteres acentuados em bases de dados A funccedilatildeo automaticamente trata a string original removendo os acentos convertendo todos
os caracteres para minuacutesculas e trocando todas as vogais e cedilhas da string original por uma sequecircncia de caracteres acentuados em munuacutescilas para busca posicional
20
RETSQLCOND
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLCOND ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlCond() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga e o Makira Hypersite utilizando aliases de 3
caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar a filial atual ( xFilial ) de acordo com o modo do arquivo ( X2_MODO ) e para sempre desconsiderar
registros deletados
Observaccedilotildees
Esta funccedilatildeo foi mantida apenas por compatibilidade pois a ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do
banco para efeitos de performance Para ganharmos performance nas Querys devemos ao inveacutes de utilizar a funccedilatildeo RetSqlCond() utilizar como primeira clauacutesula WHERE o retorno da funccedilatildeo RetSqlFil() (
comparaccedilatildeo dos campos _FILIAL os primeiros do(s) iacutendice(s) do ERP ) que retorna apenas as comparaccedilotildees de Filial e por uacuteltimo a funccedilatildeo RetSqlDel que retorna o script para verificaccedilatildeo dos campos deletados (
que eacute o uacuteltimo campo das chaves de iacutendice do ERP utilizando TopConnect )
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlCond() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de
modo que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute
retorna os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLDEL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLDEL ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlDel() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo D_E_L_E_T_ da(s) tabela(s) passada(s) como paracircmetro
Observaccedilotildees
A ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do banco para efeitos de performance Para ganharmos performance
nas Querys devemos utilizar a funccedilatildeo RetSqlDEl() na montagem das ultimas consistecircncias da claacuteusula WHERE de uma Query
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlDel() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo
que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna
os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLFIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLFIL ( lt cAliases gt [ cCompFil ] ) --gt cSQlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
cCompFil Caracter
Atraveacutes de cCompFil eacute possiacutevel especificar uma Filial FIXA a ser comparada com os campos FILIAL do(s) alias(es) passados no paracircmetro cAliases
Caso natildeo informado os campos _FILIAL da(s) tabela(s) passadas como paracircmetro em cAliases seratildeo comparados com o retorno da funccedilatildeo xFilial() de
cada alias respectivamente
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo filial atual ( xFilial ) de acordo com o modo de abertura do arquivo no ERP ( X2_MODO )
Observaccedilatildeo
Devemos atentar ao fato que a funccedilatildeo RetSqlFil() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo que estes
alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna os
nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLTAB
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLTAB ( lt cAliasList gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliasList Caracter String contendo um ou mais alias separados por virgula a terem seus nomes fiacutesicos determinados
Retorno
Tipo Descriccedilatildeo
Caracter String contendo nomes fisicos e alias identificadores dos aliases recebidos como paracircmetro
Descriccedilatildeo
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
14
Le o arquivo
cTTXFile = memoread(WebDefaulthtm)
Gera a string com o Dump do arquivo
cDump = HExStrDump(cTTXFile)
Mostra o Dump no console
conout(cDump)
Gera HTML para a visualizaccedilatildeo do DUMP
cHtml = VarInfo(DUMPHtmlnotags(cDump)tf)
WEB EXTENDED END
Return cHtml
Exemplo do Texto mostrado no Console
HexSTRDump ( String 237 Start 1 Length 237 )
-------------------------------------------------------------------------------
3C 48 54 4D 4C 3E 3C 48 45 41 44 3E 0D 0A 3C 4D | ltHTMLgtltHEADgt__ltM
45 54 41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 | ETA HTTP-EQUIV=
43 6F 6E 74 65 6E 74 2D 54 79 70 65 22 20 63 6F | Content-Type co
6E 74 65 6E 74 3D 22 74 65 78 74 2F 68 74 6D 6C | ntent=texthtml
22 0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 | __ltMETA HTTP-EQ
55 49 56 3D 22 70 72 61 67 6D 61 22 20 63 6F 6E | UIV=pragma con
74 65 6E 74 3D 22 6E 6F 2D 63 61 63 68 65 22 3E | tent=no-cachegt
0D 0A 3C 4D 45 54 41 20 48 54 54 50 2D 45 51 55 | __ltMETA HTTP-EQU
49 56 3D 22 45 78 70 69 72 65 73 22 20 63 6F 6E | IV=Expires con
74 65 6E 74 3D 22 2D 31 22 3E 0D 0A 3C 4D 45 54 | tent=-1gt__ltMET
41 20 48 54 54 50 2D 45 51 55 49 56 3D 22 52 65 | A HTTP-EQUIV=Re
66 72 65 73 68 22 20 63 6F 6E 74 65 6E 74 3D 22 | fresh content=
30 3B 20 75 72 6C 3D 2F 77 5F 77 45 78 30 30 30 | 0 url=w_wEx000
2E 61 70 77 22 3E 3C 2F 48 45 41 44 3E 0D 0A 3C | apwgtltHEADgt__lt
2F 48 45 41 44 3E 3C 2F 48 54 4D 4C 3E | HEADgtltHTMLgt
-------------------------------------------------------------------------------
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo HTMLNOTAGS
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo a funccedilatildeo HtmlNoTags eacute utilizada para permitir a utilizaccedilatildeo de caracteres especiais no conteuacutedo de um input para um formulaacuterio Html Local cHtml =
Local cInput =
Conteudo do campo com tags HTML intepretaacuteveis
cInput =
Ao montar o Input aplicar a HtmlNoTags() ao conteudo do mesmo
cHtml +=
+HtmlNoTags(cIn
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo REDIRPAGE
Revisatildeo 10122003
Nos exemplos abaixo a funccedilatildeo redirpage eacute utilizada para gerar o script de redirecionamento em duas situaccedilotildees especiacuteficas
Em uma determinada funccedilatildeo caso um paracircmetro natildeo seja passado o usuaacuterio deveraacute retornar a uma outra tela
If empty(httpget-gtmeuparam)
Paracircmetro natildeo informado volta pro login
cHtml = RedirPage(W_Loginapw)
Else
Parametro Ok executa o APH formteste
cHtml = ExecInpage(FormTeste)
15
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos a funccedilatildeo RetSqlAce para montar uma query de busca por tiacutetulo de uma determinada informaccedilatildeo considerando todas as possibilidades de acentuaccedilatildeo independentemente de como o
banco foi alimentado eou a string de busca foi digitada
IMPORTANTE Na expressatildeo da Query o campo da tabela deve ser passado pela funccedilatildeo LOWER do BAnco pois a funccedilatildeo retsqlace monta a string para busca com letras minuacutesculas cFind = acentuaccedilatildeo
cQuery = SELECT FROM + RetSqlTab(ZZ1)
cQuery += WHERE LOWER(ZZ1_TITULO) LIKE +RetSqlAce(cFind)+
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VALTOSQL
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = + ValToSql(02)
cQuery += AND FA2_DTINC lt= + ValToSql(date())
O exemplo acima caso escrito de forma a realizar as conversotildees especiacuteficas para cada tipo de conteuacutedo seria o equivalemte ao coacutedigo abaixo
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = 02
cQuery += AND FA2_DTINC lt= + DTOS( date() )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VARINFO
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo eacute gerada uma string HTML com as informaccedilotildees do retorno da chamada de duas funccedilotildees baacutesicas da Linguagem Advpl User Function InfoTeste()
Local cHtml =
cHtml += VarInfo(lsquoDatersquodate())
cHtml += VarInfo(lsquoTimelsquotime())
Return cHtml
Deve ser gerado um echo no Console do Servidor parecido com este abaixo
Date -gt D ( 10) [08122003]
Time -gt C ( 8) [201748]
Infra-Estrutura APWEBEX - Exemplo das funccedilotildees de acentuaccedilatildeo ApWebEX
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo vemos a diferenccedila de comportamento entre as funccedilotildees baacutesicas da Linguagem Advpl Upper() e Lower() e a funccedilatildeo de Infra-estrutura Capital() em relaccedilatildeo agraves funccedilotildees da Infra-estrutura
APWEBEX UpperAce() LowerAce() e CApitalAce() quando utilizamos caracteres acentuados cRetorno =
cFrase = natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
cRetorno += Original + cFrase + CRLF
cRetorno += Upper() + upper(cFrase) + CRLF
cRetorno += Lower() + lower(cFrase) + CRLF
cRetorno += Capital() + capital(cFrase) + CRLF
cRetorno += UPPERACE() + UPPERACE(cFrase) + CRLF
cRetorno += LOWERACE() + LOWERACE(cFrase) + CRLF
cRetorno += CAPITALACE() + CAPITALACE(cFrase) + CRLF
Neste ponto a variaacutevel cRetorno deveraacute conter
Original natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
Upper() NatildeO Haacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSotildeES PARA O INEXPLICaacuteVEL
Lower() natildeo haacute explicaCcedilOtildees considerando excessotildees para o inexplicaacutevel
Capital() Natildeo Haacute ExplicaCcedilOtildees Considerando Excessotildees Para O Inexplicaacutevel
UPPERACE() NAtildeO HAacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSOtildeES PARA O INEXPLICAacuteVEL
LOWERACE() natildeo haacute explicaccedilotildees considerando excessotildees para o inexplicaacutevel
CAPITALACE() Natildeo Haacute Explicaccedilotildees Considerando Excessotildees Para O Inexplicaacutevel
Infra-Estrutura APWEBEX - Exemplos das funccedilotildees NTOC e CTON
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos as funccedilotildees cton e ntoc para realizar conversotildees de nuacutemeros em base decimal para outras bases numeacutericas e vice-versa
16
nNum1 = CTON(011010012) Converte binaacuterio para decimal
nNum2 = CTON(00DA25FE16) Converte Hexadecimal para decimal
nNum1++ Soma 1 ao numero em nNum1
nNum2++ Soma 1 ao numero em nNum2
cNum1 = NtoC(nNum128) Converte para binaacuterio novamente
cNum2 = NtoC(nNum2168) Converte para Hexa novamente
-------------------------------------------------------------------------
Ao final do programa cNum1 seraacute 01101010 e cNum2 seraacute 00DA25FF
-------------------------------------------------------------------------
APWEXADDERR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
APWEXADDERR ( [ cTitulo ] [ cInfo ] ) --gt T
Paracircmetros
Argumento Tipo Descriccedilatildeo
cTitulo Caracter cTitulo corresponde a um tiacutetulo identificador da informaccedilatildeo Deve ter no maacuteximo 20 caracteres Os caracteres acima da vigeacutesima posiccedilatildeo seratildeo
ignorados
cInfo Caracter cInfo corresponde agrave Informaccedilatildeo a ser acrescentada ao ERRORLOG em caso de erro
Retorno
Tipo Descriccedilatildeo
Loacutegico Esta funccedilatildeo sempre retorna T
Descriccedilatildeo
Atraveacutes da funccedilatildeo ApWExAddErr() podemos acrescentar uma string de informaccedilotildees adicionais em um buffer em memoacuteria descarregado na geraccedilatildeo do ERRORLOG no caso de uma ocorrecircncia de erro fatal na
working thread atual
Caso a funccedilatildeo seja chamada sem nenhum paracircmetro a uacuteltima ocorrecircncia acrescentada pela funccedilatildeo eacute eliminada da pilha interna de informaccedilotildees
ATENCcedilAtildeO Esta funccedilatildeo deve ser apenas utilizada em casos de necessidade de obtenccedilatildeo de informaccedilotildees especiacuteficas acerca de uma ocorrecircncia de erro natildeo reproduzida em ambiente de testes eou natildeo depuraacutevel pois
seu uso desnecessaacuterio prejudica a performance da aplicaccedilatildeo final
CAPITALACE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CAPITALACE ( lt cString gt ) --gt cStrCapital
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida
Retorno
Tipo Descriccedilatildeo
Caracter String resultante convertida para munuacutesculo com as primeiras letras das palavras significantes em maiuacutesculo
Descriccedilatildeo
Semelhante agrave funccedilatildeo de Infra-estrutura Capital() poreacutem converte tambeacutem caracteres acentuados
A funccedilatildeo CapitalAce() converte todos os caracteres de uma String para minuacutesculo e a primeira letra das palavras significantes para maiuacutesculo semelhante agrave funccedilatildeo Capital() poreacutem considera e converte tambeacutem
caracteres acentuados em OEM eou ANSI
CTON
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CTON ( lt cString gt lt nBase gt ) --gt nNumero
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave representaccedilatildeo de um nuacutemero em outra base numeacuterica compreendida entre 2 e 36
nBase Numeacuterico nBase corresponde agrave base numeacuterica utilizada pelo numero representado em cString
Retorno
Tipo Descriccedilatildeo
Numeacuterico Nuacutemero recebido como paracircmetro em notaccedilatildeo decimal ( Base 10 )
Descriccedilatildeo
Converte um nuacutemero representado em String de base 2 a 36 para um nuacutemero em base decimal (10)
Observaccedilatildeo Importante
Satildeo considerados caracteres vaacutelidos para compor um nuacutemero de base 36 os 10 algarismos numeacutericos de 0 a 9 e os 26 caracteres alfabeacuteticos maiuacutesculos compreendidos entre A e Z Quaisquer caractetes presentes na
String de paracircmetro fora desta faixa de dados eou fora da base ( por exemplo uma conversatildeo de string base 2 - binaacuterio - da string 01001020 ) retornaraacute -1 ( menos um )
ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
ESCAPE ( lt cString gt ) --gt cEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute uma sequecircncia de caracteres a ser processada
Retorno
Tipo Descriccedilatildeo
Caracter cEscaped corresponde agrave string original com os caracteres reservados utilizando a notaccedilatildeo HH
Descriccedilatildeo
A funccedilatildeo Escape() deve ser utilizada para realizar conversotildees de caracteres especiais e reservados quando da necessidade de passagem de paracircmetros via URL
A sintaxe de uma requisiccedilatildeo via URL para a passagem de paracircmetros eacute
(link)param=conteudoampparam2=conteudo2amp
Quando passamos paracircmetros via url devemos tomar o cuidado de natildeo utilizar caracteres reservados e especiais nos nomes e conteuacutedos de paracircmetros Para realizar estas conversotildees utilizamos a funccedilatildeo Escape()
17
EXECINPAGE
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXECINPAGE ( lt cAPHPage gt ) --gt cHTMLPage
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAPHPage Caracter Corresponde agraveo nome do APH que deve ser executado sem a extensatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cHtmlPage corresponde agrave string HTML gerada pela paacutegina APH AHU
Descriccedilatildeo
Atraveacutes da funccedilatildeo ExecInPage() executamos uma paacutegina APH passada como paracircmetro A funccedilatildeo deveraacute retornar a String HTML correspondente agrave paacutegina processada
Poreacutem a funccedilatildeo ExecInPage() realiza tratamentos adicionais padratildeo relacionaodo agraveo comportamento dos Projetos WEB referentes agrave customizaccedilotildees da segunte maneira
1 Primeiro eacute verificado se existe uma paacutegina AHU compilada com o nome cAPHPage Caso exista a mesma seraacute executada pela execinpage
2 Caso natildeo exista AHU com este nome eacute procurado pelo APH Caso o APH exista o mesmo seraacute executado pela ExecInPage
3 Caso natildeo existam no RPO atual o APH nem o AHU com o nome especificado no paracircmetro cAPHFile o processamento eacute abortado com a ocorrecircncia de erro [APWEXERR_0007] APH page
[ltcAPHPagegt] not found in RPO 4 Antes de executar o APH ou AHU identificado nos passos anteriores eacute verificado se existe um ponto de entrada ( User Function ) compilado com o mesmo nome do APH Caso exista o ponto de
entrada eacute executado Ele deveraacute retornar uma String HTML Se for retornada alguma string a funccedilatildeo retorna a tring retornada e natildeo processa o APH AHU Observaccedilatildeo A funccedilatildeo ExecInPage natildeo iraacute executar este
tratamento da User Function com o nome de cAPHPage caso a funccedilatildeo ExecInPage() esteja sendo executada atraveacutes de uma USER FUNCTION
Observaccedilatildeo Importante - Envio parcial de HTML agraveo Browser A funccedilatildeo ExecInpage() juntamente com o APH compilado ao serem processados iratildeo tentar enviar o conteuacutedo HTML para o Browser solicitante durante o processamento de modo que a funccedilatildeo normalmente iraacute
retornar uma String vazia
Caso seja necessaacuteria a execuccedilatildeo de uma paacutegina APH ou AHU e o natildeo-envio da mesma para o Browse por exemplo para a geraccedilatildeo de um coacutedigo HTML a ser enviado via e-mail revemos utilizar a funccedilatildeo
HttpSetPart() realizando uma chamada da mesma antes da ExecInPage() passando o paracircmetro F para desabilitar temporariamente o envio de HTML simultacircneo ao Browser e apoacutes a execuccedilatildeo da ExecInPage()
devemos re-habilitar o envio simultacircneo atraveacutes da chamada da funccedilatildeo HttpSetPart() com o paracircmetro T
EXISTPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTPAGE ( lt cAphFile gt ) --gt lFound
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAphFile Caracter Nome do arquivo APH sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Caracter Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistPage() para identificarmos no ambiente atual se um determinado arquivo APH encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistPage(teste)
conout(testeaph compilado neste RPO)
Else
conout(testeaph NAO compilado neste RPO)
Endif
EXISTUSRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTUSRPAGE ( lt cAhuFile gt ) --gt lExist
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAhuFile Caracter Nome do arquivo AHU sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Loacutegico Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistUSRPage() para identificarmos no ambiente atual se um determinado arquivo AHU encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistUSRPage(teste)
conout(testeahu compilado neste RPO)
Else
conout(testeahu NAO compilado neste RPO)
Endif
GETJOBPROFSTRING
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETJOBPROFSTRING ( lt cKey gt lt cDefault gt ) --gt cKeyValue
Paracircmetros
Argumento Tipo Descriccedilatildeo
cKey Caracter cKey corresponde agrave chave da seccedilatildeo de configuraccedilatildeo da Working Thread atual a ser retornada
cDefault Caracter Valor default (string) a ser retornado pela funccedilatildeo caso a chave especificada natildeo sehja encontrada no INI
Retorno
Tipo Descriccedilatildeo
Caracter Conteudo da Chave solicitada Caso a chave natildeo seja encontrada eacute retornado o conteudo de cDefault Caso esta funccedilatildeo natildeo seja executada a partir de uma Working Thread ela
18
retornaraacute uma string em branco ()
Descriccedilatildeo
Atraveacutes desta funccedilatildeo podemos recuperar as configuraccedilotildees do Job da Working Thread atual
GETWEXVERSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETWEXVERSION ( ) --gt cBuildId
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave String Identificadora da versatildeo no formato ltLIBgt VAAMMDDHHmm Vide Tabela A
Descriccedilatildeo
Esta funccedilatildeo natildeo requer argumentos e retorna o Identificador do build versatildeo de Release das funccedilotildees de Infra-Estrutura APWEBEX
Observaccedilatildeo A data informada pela versatildeo natildeo corresponde agrave ultima compilaccedilatildeo do RPO de um determinado Projeto WEB mas sim agrave data de release da LIB de Infra-Estrutura APWEBEX
Tabela A
Simbolo Descriccedilatildeo
AA Ano de geraccedilatildeo da Lib
MM Mecircs da geraccedilatildeo da Lib
DD Dia da geraccedilatildeo da Lib
HH Horaacuterio da geraccedilatildeo da Lib
mm Minutos do Horaacuterio de Geraccedilatildeo da Lib
(HTTP) Indica que a versatildeo foi compilada com a configuracatildeo de envio progressivo de HTML simultacircneo para o Browse Esta opccedilatildeo eacute imprescindiacutevel para projetos que se utilizam desta LIB
Por exemplo
APWEBEX Version 30312021900 (HTTP)
HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HEXSTRDUMP ( lt cString gt [ nStart ] [ nLength ] ) --gt cHExDump
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser lida para a geraccedilatildeo do Dump
nStart Numeacuterico Corresponde agrave posiccedilatildeo inicial de cString a ser considerada para a geraccedilatildeo do Dump a partir da posiccedilatildeo 1 Caso este paracircmetro natildeo seja informado o
Default eacute a posiccedilatildeo 1 da string
nLength Numeacuterico nLength corresponde agraveo tamanho a ser considerado para a geraccedilatildeo do DUMP a partir da posiccedilatildeo inicial recebida em nStart Caso este paracircmetro natildeo
seja informado eacute considerado o tamanho ateacute o final da String
Retorno
Tipo Descriccedilatildeo
Caracter O retorno da funccedilatildeo corresponde agrave uma string Advpl formatadas em 16 bytes em hexadecimal por linha mais o separador pipe (|) mais os 16 caracteres em Ansi Os caracteres de
controle ( codigo ascii menor que 32 ) satildeo convertidos para visualizaccedilatildeo para o caractere underline (_)
Descriccedilatildeo
Atraveacutes da funccedilatildeo HexStrDump() podemos gerar uma string em Advpl em formato de Dump Hexadecimal a partir da string informada como paracircmetro a partir de uma determinada posiccedilatildeo da string considerando um
nuacutemero de bytes informado
Caso os paracircmetros nPosIni e nTamString natildeo sejam informados o dump gerado corresponde a string recebida como paracircmetro em sua totalidade
Observaccedilatildeo
Natildeo devemos pasar para a funccedilatildeo HexStrDump uma string maior que 240 Kb pois a geraccedilatildeo da String de dump eacute realizada em memoacuteria sendo a string final gerada em meacutedia 42 vezes maior que a string passada
como paracircmetro Caso a string passada como paracircmetro seja maior que 240 Kb a execuccedilatildeo seraacute abortada com a ocorrecircncia de erro fatal string size overflow
HTMLNOTAGS
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HTMLNOTAGS ( lt cStrHtml gt ) --gt cStrNoTags
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrHtml Caracter cStrHtml corresponde a uma String que natildeo pode conter caracteres Html interpretaacuteveis
Retorno
Tipo Descriccedilatildeo
Caracter String original com os caracteres interpretaacuteveis Html lt gt amp convertidos para caracteres natildeo-interpretaacuteveis
Descriccedilatildeo
A Funccedilatildeo HTMLNOTAGS converte as Tags interpretaacuteveis de uma String HTML para TAGS natildeo interpretaacuteveis Este recurso eacute normalmente utilizado quando precisamos montar um input Html com um conteudo que
nao pode ser interpretado pelo browser como uma Tag Esta funccedilatildeo apenas converte os caracteres lt ( menor que ) gt ( maior que ) amp ( e comercial ) e ldquo ( aspas duplas )
Recomenda-se fortemente que na montagem do value de um input html o conteuacutedo do mesmo seja colocado entre aspas duplas pois caso o conteuacutedo do value inicial do campo contenha aspas simples (
natildeo convertidas pela funccedilatildeo HtmlNoTags) isto poderaacute ocasionar perda de dados e erro de sintaxe no formulaacuterio Html
HTTPISWEBEX
Revisatildeo 12122003
Sintaxe
HTTPISWEBEX ( ) --gt lIsApWEBEX
Retorno
Tipo Descriccedilatildeo
Loacutegico A funccedilatildeo retornaraacute T caso o ambiente de execuccedilatildeo atual seja uma Working Thread WEBEX inicializada pela funccedilatildeo de infra-estrutura STARTWEBEX
Descriccedilatildeo
Atraveacutes da funccedilatildeo HttpIsWebEx() eacute possiacutevel identificarmos se o programa atual estaacute sendo executado atraveacutes de uma Working Thread inicializada utilizando-se as funccedilotildees de Infra-Estrutura APWEBEX
ISEMAIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
19
Sintaxe
ISEMAIL ( lt cEMail gt ) --gt lEmailOk
Paracircmetros
Argumento Tipo Descriccedilatildeo
cEMail Caracter cEmail corresponde a string a ser analizada contendo um e apenas um endereccedilo de e-mail
Retorno
Tipo Descriccedilatildeo
Caracter Retorna T caso a sring recebida como paracircmetro atenda agraves definiccedilotildees de nomenclatura vaacutelidos para um endereccedilo de e-mail
Descriccedilatildeo
Utilizada para validar e-mails em Advpl a funccedilatildeo ISEMAIL recebe como paracircmetro uma string contendo um e-mail retornando T caso a string esteja em um formaacuteto vaacutelido respeitando a regra para nomenclatura de
endereccedilos de e-mail
Regra Um e-mail eacute considerado vaacutelido caso seja iniciado por um caracter apenas contenha caracteres asc de a a z e 0 a 9 e os caracteres (arroba) (ponto) - ( hiacutefen) ou _ (underline) e deve conter uma e
apenas uma arroba e no minimo um ponto apos a arroba intercalado por um caracter
LOWERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
LOWERACE ( lt cString gt ) --gt cStrLower
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a sequecircncia de caracteres a ser convertida para letras minuacutesculas
Retorno
Tipo Descriccedilatildeo
Caracter String original em letras minuacutesculas
Descriccedilatildeo
A Funccedilatildeo LOWERACE converte todos os caracteres de uma String para ldquominusculordquo semelhante agrave funccedilatildeo LOWER() poreacutem considera e converte tambeacutem caracteres acentuados em ANSI
NTOC
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
NTOC ( lt nNumero gt lt nBase gt lt nTamStr gt ) --gt cString
Paracircmetros
Argumento Tipo Descriccedilatildeo
nNumero Numeacuterico nNumero eacute o valor numeacuterico em base devimal a ser convertido
nBase Numeacuterico nBase corresponde agrave base binaacuteria a ser utilizada para converter nNumero
nTamStr Numeacuterico nTamStr corresponde ao tamanho da string representando o numero na base desejada
Retorno
Tipo Descriccedilatildeo
Caracter cString corresponde ao numero convertido para a base numeacuterica especificada como paracircmetro
Descriccedilatildeo
A Funccedilatildeo NTOC converte um nuacutemero em notaccedilatildeo decimal para um nuacutemero representado por String utilizando uma base numeacuterica entre 2 e 36 preenchendo-o com ldquo0rdquo (zeros) agrave esquerda do tamanho especificado
Observaccedilatildeo O Paracircmetro nBase deve ser especificado com um nuacutemero entre 2 e 36 Caso seja passado como paracircmetro um nuacutemero base fora desta faixa o processamento eacute abortado com a ocorrecircncia de erro
[APWEXERR_0022] INVALID NTOC BASE [X] onde ltXgt foi a base passada como argumento
REDIRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
REDIRPAGE ( lt cUrl gt [ cTarget ] [ nTime ] ) --gt cScript
Paracircmetros
Argumento Tipo Descriccedilatildeo
cUrl Caracter Link para onde o script deve apontar o redirecionamento
cTarget Caracter Destino do redirecionamento Caso natildeo especificado o default eacute _self
nTime Numeacuterico Tempo (em segundos) de delay antes do redirecionamento ser executado
Retorno
Tipo Descriccedilatildeo
Caracter Script Html JavaScript que ao ser executado no Browser (client) chama a paacuteginaobjeto chamado no Link
Descriccedilatildeo
A funccedilatildeo RedirPage eacute utilizada quando desejamos devolver ao Browser um script que ao ser executado redirecionaraacute o Browser agrave abertura de um link passado como paracircmetro
RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLACE ( lt cStrFind gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrFind Caracter cStrFind corresponde agrave sequecircncia de caracteres a ser procurada podendo conter caracteres maiuacutesculos e minuacutesculos com ou sem acentuaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cStrQuery corresponde agrave string de busca a ser utilizada na query utilizando caracteres em minuacutesculo
Descriccedilatildeo
A funccedilatildeo RetSqlAce eacute utilizada para auxiliar de montagem de querys de busca de caracteres acentuados em bases de dados A funccedilatildeo automaticamente trata a string original removendo os acentos convertendo todos
os caracteres para minuacutesculas e trocando todas as vogais e cedilhas da string original por uma sequecircncia de caracteres acentuados em munuacutescilas para busca posicional
20
RETSQLCOND
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLCOND ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlCond() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga e o Makira Hypersite utilizando aliases de 3
caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar a filial atual ( xFilial ) de acordo com o modo do arquivo ( X2_MODO ) e para sempre desconsiderar
registros deletados
Observaccedilotildees
Esta funccedilatildeo foi mantida apenas por compatibilidade pois a ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do
banco para efeitos de performance Para ganharmos performance nas Querys devemos ao inveacutes de utilizar a funccedilatildeo RetSqlCond() utilizar como primeira clauacutesula WHERE o retorno da funccedilatildeo RetSqlFil() (
comparaccedilatildeo dos campos _FILIAL os primeiros do(s) iacutendice(s) do ERP ) que retorna apenas as comparaccedilotildees de Filial e por uacuteltimo a funccedilatildeo RetSqlDel que retorna o script para verificaccedilatildeo dos campos deletados (
que eacute o uacuteltimo campo das chaves de iacutendice do ERP utilizando TopConnect )
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlCond() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de
modo que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute
retorna os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLDEL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLDEL ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlDel() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo D_E_L_E_T_ da(s) tabela(s) passada(s) como paracircmetro
Observaccedilotildees
A ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do banco para efeitos de performance Para ganharmos performance
nas Querys devemos utilizar a funccedilatildeo RetSqlDEl() na montagem das ultimas consistecircncias da claacuteusula WHERE de uma Query
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlDel() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo
que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna
os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLFIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLFIL ( lt cAliases gt [ cCompFil ] ) --gt cSQlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
cCompFil Caracter
Atraveacutes de cCompFil eacute possiacutevel especificar uma Filial FIXA a ser comparada com os campos FILIAL do(s) alias(es) passados no paracircmetro cAliases
Caso natildeo informado os campos _FILIAL da(s) tabela(s) passadas como paracircmetro em cAliases seratildeo comparados com o retorno da funccedilatildeo xFilial() de
cada alias respectivamente
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo filial atual ( xFilial ) de acordo com o modo de abertura do arquivo no ERP ( X2_MODO )
Observaccedilatildeo
Devemos atentar ao fato que a funccedilatildeo RetSqlFil() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo que estes
alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna os
nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLTAB
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLTAB ( lt cAliasList gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliasList Caracter String contendo um ou mais alias separados por virgula a terem seus nomes fiacutesicos determinados
Retorno
Tipo Descriccedilatildeo
Caracter String contendo nomes fisicos e alias identificadores dos aliases recebidos como paracircmetro
Descriccedilatildeo
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
15
Endif
Ao chamar uma tela de download mostrar uma mensahem e iniciar um download automaticamente
cHtml +=
mensagem de download
Devolve script de redirecionamento apontando para o arquivo
com o target _blank para ser aberto em uma nova janela
cHtml += RedirPage(downloadsarquivozip_blank)
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos a funccedilatildeo RetSqlAce para montar uma query de busca por tiacutetulo de uma determinada informaccedilatildeo considerando todas as possibilidades de acentuaccedilatildeo independentemente de como o
banco foi alimentado eou a string de busca foi digitada
IMPORTANTE Na expressatildeo da Query o campo da tabela deve ser passado pela funccedilatildeo LOWER do BAnco pois a funccedilatildeo retsqlace monta a string para busca com letras minuacutesculas cFind = acentuaccedilatildeo
cQuery = SELECT FROM + RetSqlTab(ZZ1)
cQuery += WHERE LOWER(ZZ1_TITULO) LIKE +RetSqlAce(cFind)+
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VALTOSQL
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = + ValToSql(02)
cQuery += AND FA2_DTINC lt= + ValToSql(date())
O exemplo acima caso escrito de forma a realizar as conversotildees especiacuteficas para cada tipo de conteuacutedo seria o equivalemte ao coacutedigo abaixo
cQuery = SELECT FROM FA2010
cQuery += WHERE FA2_FILIAL = 02
cQuery += AND FA2_DTINC lt= + DTOS( date() )
Infra-Estrutura APWEBEX - Exemplo da funccedilatildeo VARINFO
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo eacute gerada uma string HTML com as informaccedilotildees do retorno da chamada de duas funccedilotildees baacutesicas da Linguagem Advpl User Function InfoTeste()
Local cHtml =
cHtml += VarInfo(lsquoDatersquodate())
cHtml += VarInfo(lsquoTimelsquotime())
Return cHtml
Deve ser gerado um echo no Console do Servidor parecido com este abaixo
Date -gt D ( 10) [08122003]
Time -gt C ( 8) [201748]
Infra-Estrutura APWEBEX - Exemplo das funccedilotildees de acentuaccedilatildeo ApWebEX
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo vemos a diferenccedila de comportamento entre as funccedilotildees baacutesicas da Linguagem Advpl Upper() e Lower() e a funccedilatildeo de Infra-estrutura Capital() em relaccedilatildeo agraves funccedilotildees da Infra-estrutura
APWEBEX UpperAce() LowerAce() e CApitalAce() quando utilizamos caracteres acentuados cRetorno =
cFrase = natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
cRetorno += Original + cFrase + CRLF
cRetorno += Upper() + upper(cFrase) + CRLF
cRetorno += Lower() + lower(cFrase) + CRLF
cRetorno += Capital() + capital(cFrase) + CRLF
cRetorno += UPPERACE() + UPPERACE(cFrase) + CRLF
cRetorno += LOWERACE() + LOWERACE(cFrase) + CRLF
cRetorno += CAPITALACE() + CAPITALACE(cFrase) + CRLF
Neste ponto a variaacutevel cRetorno deveraacute conter
Original natildeo haacute EXPLICACcedilOtildeES considerando excessotildees PARA O inexplicaacutevel
Upper() NatildeO Haacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSotildeES PARA O INEXPLICaacuteVEL
Lower() natildeo haacute explicaCcedilOtildees considerando excessotildees para o inexplicaacutevel
Capital() Natildeo Haacute ExplicaCcedilOtildees Considerando Excessotildees Para O Inexplicaacutevel
UPPERACE() NAtildeO HAacute EXPLICACcedilOtildeES CONSIDERANDO EXCESSOtildeES PARA O INEXPLICAacuteVEL
LOWERACE() natildeo haacute explicaccedilotildees considerando excessotildees para o inexplicaacutevel
CAPITALACE() Natildeo Haacute Explicaccedilotildees Considerando Excessotildees Para O Inexplicaacutevel
Infra-Estrutura APWEBEX - Exemplos das funccedilotildees NTOC e CTON
Revisatildeo 16122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
No exemplo abaixo utilizamos as funccedilotildees cton e ntoc para realizar conversotildees de nuacutemeros em base decimal para outras bases numeacutericas e vice-versa
16
nNum1 = CTON(011010012) Converte binaacuterio para decimal
nNum2 = CTON(00DA25FE16) Converte Hexadecimal para decimal
nNum1++ Soma 1 ao numero em nNum1
nNum2++ Soma 1 ao numero em nNum2
cNum1 = NtoC(nNum128) Converte para binaacuterio novamente
cNum2 = NtoC(nNum2168) Converte para Hexa novamente
-------------------------------------------------------------------------
Ao final do programa cNum1 seraacute 01101010 e cNum2 seraacute 00DA25FF
-------------------------------------------------------------------------
APWEXADDERR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
APWEXADDERR ( [ cTitulo ] [ cInfo ] ) --gt T
Paracircmetros
Argumento Tipo Descriccedilatildeo
cTitulo Caracter cTitulo corresponde a um tiacutetulo identificador da informaccedilatildeo Deve ter no maacuteximo 20 caracteres Os caracteres acima da vigeacutesima posiccedilatildeo seratildeo
ignorados
cInfo Caracter cInfo corresponde agrave Informaccedilatildeo a ser acrescentada ao ERRORLOG em caso de erro
Retorno
Tipo Descriccedilatildeo
Loacutegico Esta funccedilatildeo sempre retorna T
Descriccedilatildeo
Atraveacutes da funccedilatildeo ApWExAddErr() podemos acrescentar uma string de informaccedilotildees adicionais em um buffer em memoacuteria descarregado na geraccedilatildeo do ERRORLOG no caso de uma ocorrecircncia de erro fatal na
working thread atual
Caso a funccedilatildeo seja chamada sem nenhum paracircmetro a uacuteltima ocorrecircncia acrescentada pela funccedilatildeo eacute eliminada da pilha interna de informaccedilotildees
ATENCcedilAtildeO Esta funccedilatildeo deve ser apenas utilizada em casos de necessidade de obtenccedilatildeo de informaccedilotildees especiacuteficas acerca de uma ocorrecircncia de erro natildeo reproduzida em ambiente de testes eou natildeo depuraacutevel pois
seu uso desnecessaacuterio prejudica a performance da aplicaccedilatildeo final
CAPITALACE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CAPITALACE ( lt cString gt ) --gt cStrCapital
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida
Retorno
Tipo Descriccedilatildeo
Caracter String resultante convertida para munuacutesculo com as primeiras letras das palavras significantes em maiuacutesculo
Descriccedilatildeo
Semelhante agrave funccedilatildeo de Infra-estrutura Capital() poreacutem converte tambeacutem caracteres acentuados
A funccedilatildeo CapitalAce() converte todos os caracteres de uma String para minuacutesculo e a primeira letra das palavras significantes para maiuacutesculo semelhante agrave funccedilatildeo Capital() poreacutem considera e converte tambeacutem
caracteres acentuados em OEM eou ANSI
CTON
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CTON ( lt cString gt lt nBase gt ) --gt nNumero
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave representaccedilatildeo de um nuacutemero em outra base numeacuterica compreendida entre 2 e 36
nBase Numeacuterico nBase corresponde agrave base numeacuterica utilizada pelo numero representado em cString
Retorno
Tipo Descriccedilatildeo
Numeacuterico Nuacutemero recebido como paracircmetro em notaccedilatildeo decimal ( Base 10 )
Descriccedilatildeo
Converte um nuacutemero representado em String de base 2 a 36 para um nuacutemero em base decimal (10)
Observaccedilatildeo Importante
Satildeo considerados caracteres vaacutelidos para compor um nuacutemero de base 36 os 10 algarismos numeacutericos de 0 a 9 e os 26 caracteres alfabeacuteticos maiuacutesculos compreendidos entre A e Z Quaisquer caractetes presentes na
String de paracircmetro fora desta faixa de dados eou fora da base ( por exemplo uma conversatildeo de string base 2 - binaacuterio - da string 01001020 ) retornaraacute -1 ( menos um )
ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
ESCAPE ( lt cString gt ) --gt cEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute uma sequecircncia de caracteres a ser processada
Retorno
Tipo Descriccedilatildeo
Caracter cEscaped corresponde agrave string original com os caracteres reservados utilizando a notaccedilatildeo HH
Descriccedilatildeo
A funccedilatildeo Escape() deve ser utilizada para realizar conversotildees de caracteres especiais e reservados quando da necessidade de passagem de paracircmetros via URL
A sintaxe de uma requisiccedilatildeo via URL para a passagem de paracircmetros eacute
(link)param=conteudoampparam2=conteudo2amp
Quando passamos paracircmetros via url devemos tomar o cuidado de natildeo utilizar caracteres reservados e especiais nos nomes e conteuacutedos de paracircmetros Para realizar estas conversotildees utilizamos a funccedilatildeo Escape()
17
EXECINPAGE
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXECINPAGE ( lt cAPHPage gt ) --gt cHTMLPage
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAPHPage Caracter Corresponde agraveo nome do APH que deve ser executado sem a extensatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cHtmlPage corresponde agrave string HTML gerada pela paacutegina APH AHU
Descriccedilatildeo
Atraveacutes da funccedilatildeo ExecInPage() executamos uma paacutegina APH passada como paracircmetro A funccedilatildeo deveraacute retornar a String HTML correspondente agrave paacutegina processada
Poreacutem a funccedilatildeo ExecInPage() realiza tratamentos adicionais padratildeo relacionaodo agraveo comportamento dos Projetos WEB referentes agrave customizaccedilotildees da segunte maneira
1 Primeiro eacute verificado se existe uma paacutegina AHU compilada com o nome cAPHPage Caso exista a mesma seraacute executada pela execinpage
2 Caso natildeo exista AHU com este nome eacute procurado pelo APH Caso o APH exista o mesmo seraacute executado pela ExecInPage
3 Caso natildeo existam no RPO atual o APH nem o AHU com o nome especificado no paracircmetro cAPHFile o processamento eacute abortado com a ocorrecircncia de erro [APWEXERR_0007] APH page
[ltcAPHPagegt] not found in RPO 4 Antes de executar o APH ou AHU identificado nos passos anteriores eacute verificado se existe um ponto de entrada ( User Function ) compilado com o mesmo nome do APH Caso exista o ponto de
entrada eacute executado Ele deveraacute retornar uma String HTML Se for retornada alguma string a funccedilatildeo retorna a tring retornada e natildeo processa o APH AHU Observaccedilatildeo A funccedilatildeo ExecInPage natildeo iraacute executar este
tratamento da User Function com o nome de cAPHPage caso a funccedilatildeo ExecInPage() esteja sendo executada atraveacutes de uma USER FUNCTION
Observaccedilatildeo Importante - Envio parcial de HTML agraveo Browser A funccedilatildeo ExecInpage() juntamente com o APH compilado ao serem processados iratildeo tentar enviar o conteuacutedo HTML para o Browser solicitante durante o processamento de modo que a funccedilatildeo normalmente iraacute
retornar uma String vazia
Caso seja necessaacuteria a execuccedilatildeo de uma paacutegina APH ou AHU e o natildeo-envio da mesma para o Browse por exemplo para a geraccedilatildeo de um coacutedigo HTML a ser enviado via e-mail revemos utilizar a funccedilatildeo
HttpSetPart() realizando uma chamada da mesma antes da ExecInPage() passando o paracircmetro F para desabilitar temporariamente o envio de HTML simultacircneo ao Browser e apoacutes a execuccedilatildeo da ExecInPage()
devemos re-habilitar o envio simultacircneo atraveacutes da chamada da funccedilatildeo HttpSetPart() com o paracircmetro T
EXISTPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTPAGE ( lt cAphFile gt ) --gt lFound
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAphFile Caracter Nome do arquivo APH sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Caracter Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistPage() para identificarmos no ambiente atual se um determinado arquivo APH encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistPage(teste)
conout(testeaph compilado neste RPO)
Else
conout(testeaph NAO compilado neste RPO)
Endif
EXISTUSRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTUSRPAGE ( lt cAhuFile gt ) --gt lExist
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAhuFile Caracter Nome do arquivo AHU sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Loacutegico Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistUSRPage() para identificarmos no ambiente atual se um determinado arquivo AHU encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistUSRPage(teste)
conout(testeahu compilado neste RPO)
Else
conout(testeahu NAO compilado neste RPO)
Endif
GETJOBPROFSTRING
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETJOBPROFSTRING ( lt cKey gt lt cDefault gt ) --gt cKeyValue
Paracircmetros
Argumento Tipo Descriccedilatildeo
cKey Caracter cKey corresponde agrave chave da seccedilatildeo de configuraccedilatildeo da Working Thread atual a ser retornada
cDefault Caracter Valor default (string) a ser retornado pela funccedilatildeo caso a chave especificada natildeo sehja encontrada no INI
Retorno
Tipo Descriccedilatildeo
Caracter Conteudo da Chave solicitada Caso a chave natildeo seja encontrada eacute retornado o conteudo de cDefault Caso esta funccedilatildeo natildeo seja executada a partir de uma Working Thread ela
18
retornaraacute uma string em branco ()
Descriccedilatildeo
Atraveacutes desta funccedilatildeo podemos recuperar as configuraccedilotildees do Job da Working Thread atual
GETWEXVERSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETWEXVERSION ( ) --gt cBuildId
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave String Identificadora da versatildeo no formato ltLIBgt VAAMMDDHHmm Vide Tabela A
Descriccedilatildeo
Esta funccedilatildeo natildeo requer argumentos e retorna o Identificador do build versatildeo de Release das funccedilotildees de Infra-Estrutura APWEBEX
Observaccedilatildeo A data informada pela versatildeo natildeo corresponde agrave ultima compilaccedilatildeo do RPO de um determinado Projeto WEB mas sim agrave data de release da LIB de Infra-Estrutura APWEBEX
Tabela A
Simbolo Descriccedilatildeo
AA Ano de geraccedilatildeo da Lib
MM Mecircs da geraccedilatildeo da Lib
DD Dia da geraccedilatildeo da Lib
HH Horaacuterio da geraccedilatildeo da Lib
mm Minutos do Horaacuterio de Geraccedilatildeo da Lib
(HTTP) Indica que a versatildeo foi compilada com a configuracatildeo de envio progressivo de HTML simultacircneo para o Browse Esta opccedilatildeo eacute imprescindiacutevel para projetos que se utilizam desta LIB
Por exemplo
APWEBEX Version 30312021900 (HTTP)
HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HEXSTRDUMP ( lt cString gt [ nStart ] [ nLength ] ) --gt cHExDump
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser lida para a geraccedilatildeo do Dump
nStart Numeacuterico Corresponde agrave posiccedilatildeo inicial de cString a ser considerada para a geraccedilatildeo do Dump a partir da posiccedilatildeo 1 Caso este paracircmetro natildeo seja informado o
Default eacute a posiccedilatildeo 1 da string
nLength Numeacuterico nLength corresponde agraveo tamanho a ser considerado para a geraccedilatildeo do DUMP a partir da posiccedilatildeo inicial recebida em nStart Caso este paracircmetro natildeo
seja informado eacute considerado o tamanho ateacute o final da String
Retorno
Tipo Descriccedilatildeo
Caracter O retorno da funccedilatildeo corresponde agrave uma string Advpl formatadas em 16 bytes em hexadecimal por linha mais o separador pipe (|) mais os 16 caracteres em Ansi Os caracteres de
controle ( codigo ascii menor que 32 ) satildeo convertidos para visualizaccedilatildeo para o caractere underline (_)
Descriccedilatildeo
Atraveacutes da funccedilatildeo HexStrDump() podemos gerar uma string em Advpl em formato de Dump Hexadecimal a partir da string informada como paracircmetro a partir de uma determinada posiccedilatildeo da string considerando um
nuacutemero de bytes informado
Caso os paracircmetros nPosIni e nTamString natildeo sejam informados o dump gerado corresponde a string recebida como paracircmetro em sua totalidade
Observaccedilatildeo
Natildeo devemos pasar para a funccedilatildeo HexStrDump uma string maior que 240 Kb pois a geraccedilatildeo da String de dump eacute realizada em memoacuteria sendo a string final gerada em meacutedia 42 vezes maior que a string passada
como paracircmetro Caso a string passada como paracircmetro seja maior que 240 Kb a execuccedilatildeo seraacute abortada com a ocorrecircncia de erro fatal string size overflow
HTMLNOTAGS
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HTMLNOTAGS ( lt cStrHtml gt ) --gt cStrNoTags
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrHtml Caracter cStrHtml corresponde a uma String que natildeo pode conter caracteres Html interpretaacuteveis
Retorno
Tipo Descriccedilatildeo
Caracter String original com os caracteres interpretaacuteveis Html lt gt amp convertidos para caracteres natildeo-interpretaacuteveis
Descriccedilatildeo
A Funccedilatildeo HTMLNOTAGS converte as Tags interpretaacuteveis de uma String HTML para TAGS natildeo interpretaacuteveis Este recurso eacute normalmente utilizado quando precisamos montar um input Html com um conteudo que
nao pode ser interpretado pelo browser como uma Tag Esta funccedilatildeo apenas converte os caracteres lt ( menor que ) gt ( maior que ) amp ( e comercial ) e ldquo ( aspas duplas )
Recomenda-se fortemente que na montagem do value de um input html o conteuacutedo do mesmo seja colocado entre aspas duplas pois caso o conteuacutedo do value inicial do campo contenha aspas simples (
natildeo convertidas pela funccedilatildeo HtmlNoTags) isto poderaacute ocasionar perda de dados e erro de sintaxe no formulaacuterio Html
HTTPISWEBEX
Revisatildeo 12122003
Sintaxe
HTTPISWEBEX ( ) --gt lIsApWEBEX
Retorno
Tipo Descriccedilatildeo
Loacutegico A funccedilatildeo retornaraacute T caso o ambiente de execuccedilatildeo atual seja uma Working Thread WEBEX inicializada pela funccedilatildeo de infra-estrutura STARTWEBEX
Descriccedilatildeo
Atraveacutes da funccedilatildeo HttpIsWebEx() eacute possiacutevel identificarmos se o programa atual estaacute sendo executado atraveacutes de uma Working Thread inicializada utilizando-se as funccedilotildees de Infra-Estrutura APWEBEX
ISEMAIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
19
Sintaxe
ISEMAIL ( lt cEMail gt ) --gt lEmailOk
Paracircmetros
Argumento Tipo Descriccedilatildeo
cEMail Caracter cEmail corresponde a string a ser analizada contendo um e apenas um endereccedilo de e-mail
Retorno
Tipo Descriccedilatildeo
Caracter Retorna T caso a sring recebida como paracircmetro atenda agraves definiccedilotildees de nomenclatura vaacutelidos para um endereccedilo de e-mail
Descriccedilatildeo
Utilizada para validar e-mails em Advpl a funccedilatildeo ISEMAIL recebe como paracircmetro uma string contendo um e-mail retornando T caso a string esteja em um formaacuteto vaacutelido respeitando a regra para nomenclatura de
endereccedilos de e-mail
Regra Um e-mail eacute considerado vaacutelido caso seja iniciado por um caracter apenas contenha caracteres asc de a a z e 0 a 9 e os caracteres (arroba) (ponto) - ( hiacutefen) ou _ (underline) e deve conter uma e
apenas uma arroba e no minimo um ponto apos a arroba intercalado por um caracter
LOWERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
LOWERACE ( lt cString gt ) --gt cStrLower
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a sequecircncia de caracteres a ser convertida para letras minuacutesculas
Retorno
Tipo Descriccedilatildeo
Caracter String original em letras minuacutesculas
Descriccedilatildeo
A Funccedilatildeo LOWERACE converte todos os caracteres de uma String para ldquominusculordquo semelhante agrave funccedilatildeo LOWER() poreacutem considera e converte tambeacutem caracteres acentuados em ANSI
NTOC
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
NTOC ( lt nNumero gt lt nBase gt lt nTamStr gt ) --gt cString
Paracircmetros
Argumento Tipo Descriccedilatildeo
nNumero Numeacuterico nNumero eacute o valor numeacuterico em base devimal a ser convertido
nBase Numeacuterico nBase corresponde agrave base binaacuteria a ser utilizada para converter nNumero
nTamStr Numeacuterico nTamStr corresponde ao tamanho da string representando o numero na base desejada
Retorno
Tipo Descriccedilatildeo
Caracter cString corresponde ao numero convertido para a base numeacuterica especificada como paracircmetro
Descriccedilatildeo
A Funccedilatildeo NTOC converte um nuacutemero em notaccedilatildeo decimal para um nuacutemero representado por String utilizando uma base numeacuterica entre 2 e 36 preenchendo-o com ldquo0rdquo (zeros) agrave esquerda do tamanho especificado
Observaccedilatildeo O Paracircmetro nBase deve ser especificado com um nuacutemero entre 2 e 36 Caso seja passado como paracircmetro um nuacutemero base fora desta faixa o processamento eacute abortado com a ocorrecircncia de erro
[APWEXERR_0022] INVALID NTOC BASE [X] onde ltXgt foi a base passada como argumento
REDIRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
REDIRPAGE ( lt cUrl gt [ cTarget ] [ nTime ] ) --gt cScript
Paracircmetros
Argumento Tipo Descriccedilatildeo
cUrl Caracter Link para onde o script deve apontar o redirecionamento
cTarget Caracter Destino do redirecionamento Caso natildeo especificado o default eacute _self
nTime Numeacuterico Tempo (em segundos) de delay antes do redirecionamento ser executado
Retorno
Tipo Descriccedilatildeo
Caracter Script Html JavaScript que ao ser executado no Browser (client) chama a paacuteginaobjeto chamado no Link
Descriccedilatildeo
A funccedilatildeo RedirPage eacute utilizada quando desejamos devolver ao Browser um script que ao ser executado redirecionaraacute o Browser agrave abertura de um link passado como paracircmetro
RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLACE ( lt cStrFind gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrFind Caracter cStrFind corresponde agrave sequecircncia de caracteres a ser procurada podendo conter caracteres maiuacutesculos e minuacutesculos com ou sem acentuaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cStrQuery corresponde agrave string de busca a ser utilizada na query utilizando caracteres em minuacutesculo
Descriccedilatildeo
A funccedilatildeo RetSqlAce eacute utilizada para auxiliar de montagem de querys de busca de caracteres acentuados em bases de dados A funccedilatildeo automaticamente trata a string original removendo os acentos convertendo todos
os caracteres para minuacutesculas e trocando todas as vogais e cedilhas da string original por uma sequecircncia de caracteres acentuados em munuacutescilas para busca posicional
20
RETSQLCOND
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLCOND ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlCond() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga e o Makira Hypersite utilizando aliases de 3
caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar a filial atual ( xFilial ) de acordo com o modo do arquivo ( X2_MODO ) e para sempre desconsiderar
registros deletados
Observaccedilotildees
Esta funccedilatildeo foi mantida apenas por compatibilidade pois a ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do
banco para efeitos de performance Para ganharmos performance nas Querys devemos ao inveacutes de utilizar a funccedilatildeo RetSqlCond() utilizar como primeira clauacutesula WHERE o retorno da funccedilatildeo RetSqlFil() (
comparaccedilatildeo dos campos _FILIAL os primeiros do(s) iacutendice(s) do ERP ) que retorna apenas as comparaccedilotildees de Filial e por uacuteltimo a funccedilatildeo RetSqlDel que retorna o script para verificaccedilatildeo dos campos deletados (
que eacute o uacuteltimo campo das chaves de iacutendice do ERP utilizando TopConnect )
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlCond() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de
modo que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute
retorna os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLDEL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLDEL ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlDel() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo D_E_L_E_T_ da(s) tabela(s) passada(s) como paracircmetro
Observaccedilotildees
A ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do banco para efeitos de performance Para ganharmos performance
nas Querys devemos utilizar a funccedilatildeo RetSqlDEl() na montagem das ultimas consistecircncias da claacuteusula WHERE de uma Query
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlDel() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo
que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna
os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLFIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLFIL ( lt cAliases gt [ cCompFil ] ) --gt cSQlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
cCompFil Caracter
Atraveacutes de cCompFil eacute possiacutevel especificar uma Filial FIXA a ser comparada com os campos FILIAL do(s) alias(es) passados no paracircmetro cAliases
Caso natildeo informado os campos _FILIAL da(s) tabela(s) passadas como paracircmetro em cAliases seratildeo comparados com o retorno da funccedilatildeo xFilial() de
cada alias respectivamente
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo filial atual ( xFilial ) de acordo com o modo de abertura do arquivo no ERP ( X2_MODO )
Observaccedilatildeo
Devemos atentar ao fato que a funccedilatildeo RetSqlFil() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo que estes
alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna os
nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLTAB
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLTAB ( lt cAliasList gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliasList Caracter String contendo um ou mais alias separados por virgula a terem seus nomes fiacutesicos determinados
Retorno
Tipo Descriccedilatildeo
Caracter String contendo nomes fisicos e alias identificadores dos aliases recebidos como paracircmetro
Descriccedilatildeo
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
16
nNum1 = CTON(011010012) Converte binaacuterio para decimal
nNum2 = CTON(00DA25FE16) Converte Hexadecimal para decimal
nNum1++ Soma 1 ao numero em nNum1
nNum2++ Soma 1 ao numero em nNum2
cNum1 = NtoC(nNum128) Converte para binaacuterio novamente
cNum2 = NtoC(nNum2168) Converte para Hexa novamente
-------------------------------------------------------------------------
Ao final do programa cNum1 seraacute 01101010 e cNum2 seraacute 00DA25FF
-------------------------------------------------------------------------
APWEXADDERR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
APWEXADDERR ( [ cTitulo ] [ cInfo ] ) --gt T
Paracircmetros
Argumento Tipo Descriccedilatildeo
cTitulo Caracter cTitulo corresponde a um tiacutetulo identificador da informaccedilatildeo Deve ter no maacuteximo 20 caracteres Os caracteres acima da vigeacutesima posiccedilatildeo seratildeo
ignorados
cInfo Caracter cInfo corresponde agrave Informaccedilatildeo a ser acrescentada ao ERRORLOG em caso de erro
Retorno
Tipo Descriccedilatildeo
Loacutegico Esta funccedilatildeo sempre retorna T
Descriccedilatildeo
Atraveacutes da funccedilatildeo ApWExAddErr() podemos acrescentar uma string de informaccedilotildees adicionais em um buffer em memoacuteria descarregado na geraccedilatildeo do ERRORLOG no caso de uma ocorrecircncia de erro fatal na
working thread atual
Caso a funccedilatildeo seja chamada sem nenhum paracircmetro a uacuteltima ocorrecircncia acrescentada pela funccedilatildeo eacute eliminada da pilha interna de informaccedilotildees
ATENCcedilAtildeO Esta funccedilatildeo deve ser apenas utilizada em casos de necessidade de obtenccedilatildeo de informaccedilotildees especiacuteficas acerca de uma ocorrecircncia de erro natildeo reproduzida em ambiente de testes eou natildeo depuraacutevel pois
seu uso desnecessaacuterio prejudica a performance da aplicaccedilatildeo final
CAPITALACE
Revisatildeo 08122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CAPITALACE ( lt cString gt ) --gt cStrCapital
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida
Retorno
Tipo Descriccedilatildeo
Caracter String resultante convertida para munuacutesculo com as primeiras letras das palavras significantes em maiuacutesculo
Descriccedilatildeo
Semelhante agrave funccedilatildeo de Infra-estrutura Capital() poreacutem converte tambeacutem caracteres acentuados
A funccedilatildeo CapitalAce() converte todos os caracteres de uma String para minuacutesculo e a primeira letra das palavras significantes para maiuacutesculo semelhante agrave funccedilatildeo Capital() poreacutem considera e converte tambeacutem
caracteres acentuados em OEM eou ANSI
CTON
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
CTON ( lt cString gt lt nBase gt ) --gt nNumero
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave representaccedilatildeo de um nuacutemero em outra base numeacuterica compreendida entre 2 e 36
nBase Numeacuterico nBase corresponde agrave base numeacuterica utilizada pelo numero representado em cString
Retorno
Tipo Descriccedilatildeo
Numeacuterico Nuacutemero recebido como paracircmetro em notaccedilatildeo decimal ( Base 10 )
Descriccedilatildeo
Converte um nuacutemero representado em String de base 2 a 36 para um nuacutemero em base decimal (10)
Observaccedilatildeo Importante
Satildeo considerados caracteres vaacutelidos para compor um nuacutemero de base 36 os 10 algarismos numeacutericos de 0 a 9 e os 26 caracteres alfabeacuteticos maiuacutesculos compreendidos entre A e Z Quaisquer caractetes presentes na
String de paracircmetro fora desta faixa de dados eou fora da base ( por exemplo uma conversatildeo de string base 2 - binaacuterio - da string 01001020 ) retornaraacute -1 ( menos um )
ESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
ESCAPE ( lt cString gt ) --gt cEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute uma sequecircncia de caracteres a ser processada
Retorno
Tipo Descriccedilatildeo
Caracter cEscaped corresponde agrave string original com os caracteres reservados utilizando a notaccedilatildeo HH
Descriccedilatildeo
A funccedilatildeo Escape() deve ser utilizada para realizar conversotildees de caracteres especiais e reservados quando da necessidade de passagem de paracircmetros via URL
A sintaxe de uma requisiccedilatildeo via URL para a passagem de paracircmetros eacute
(link)param=conteudoampparam2=conteudo2amp
Quando passamos paracircmetros via url devemos tomar o cuidado de natildeo utilizar caracteres reservados e especiais nos nomes e conteuacutedos de paracircmetros Para realizar estas conversotildees utilizamos a funccedilatildeo Escape()
17
EXECINPAGE
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXECINPAGE ( lt cAPHPage gt ) --gt cHTMLPage
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAPHPage Caracter Corresponde agraveo nome do APH que deve ser executado sem a extensatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cHtmlPage corresponde agrave string HTML gerada pela paacutegina APH AHU
Descriccedilatildeo
Atraveacutes da funccedilatildeo ExecInPage() executamos uma paacutegina APH passada como paracircmetro A funccedilatildeo deveraacute retornar a String HTML correspondente agrave paacutegina processada
Poreacutem a funccedilatildeo ExecInPage() realiza tratamentos adicionais padratildeo relacionaodo agraveo comportamento dos Projetos WEB referentes agrave customizaccedilotildees da segunte maneira
1 Primeiro eacute verificado se existe uma paacutegina AHU compilada com o nome cAPHPage Caso exista a mesma seraacute executada pela execinpage
2 Caso natildeo exista AHU com este nome eacute procurado pelo APH Caso o APH exista o mesmo seraacute executado pela ExecInPage
3 Caso natildeo existam no RPO atual o APH nem o AHU com o nome especificado no paracircmetro cAPHFile o processamento eacute abortado com a ocorrecircncia de erro [APWEXERR_0007] APH page
[ltcAPHPagegt] not found in RPO 4 Antes de executar o APH ou AHU identificado nos passos anteriores eacute verificado se existe um ponto de entrada ( User Function ) compilado com o mesmo nome do APH Caso exista o ponto de
entrada eacute executado Ele deveraacute retornar uma String HTML Se for retornada alguma string a funccedilatildeo retorna a tring retornada e natildeo processa o APH AHU Observaccedilatildeo A funccedilatildeo ExecInPage natildeo iraacute executar este
tratamento da User Function com o nome de cAPHPage caso a funccedilatildeo ExecInPage() esteja sendo executada atraveacutes de uma USER FUNCTION
Observaccedilatildeo Importante - Envio parcial de HTML agraveo Browser A funccedilatildeo ExecInpage() juntamente com o APH compilado ao serem processados iratildeo tentar enviar o conteuacutedo HTML para o Browser solicitante durante o processamento de modo que a funccedilatildeo normalmente iraacute
retornar uma String vazia
Caso seja necessaacuteria a execuccedilatildeo de uma paacutegina APH ou AHU e o natildeo-envio da mesma para o Browse por exemplo para a geraccedilatildeo de um coacutedigo HTML a ser enviado via e-mail revemos utilizar a funccedilatildeo
HttpSetPart() realizando uma chamada da mesma antes da ExecInPage() passando o paracircmetro F para desabilitar temporariamente o envio de HTML simultacircneo ao Browser e apoacutes a execuccedilatildeo da ExecInPage()
devemos re-habilitar o envio simultacircneo atraveacutes da chamada da funccedilatildeo HttpSetPart() com o paracircmetro T
EXISTPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTPAGE ( lt cAphFile gt ) --gt lFound
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAphFile Caracter Nome do arquivo APH sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Caracter Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistPage() para identificarmos no ambiente atual se um determinado arquivo APH encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistPage(teste)
conout(testeaph compilado neste RPO)
Else
conout(testeaph NAO compilado neste RPO)
Endif
EXISTUSRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTUSRPAGE ( lt cAhuFile gt ) --gt lExist
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAhuFile Caracter Nome do arquivo AHU sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Loacutegico Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistUSRPage() para identificarmos no ambiente atual se um determinado arquivo AHU encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistUSRPage(teste)
conout(testeahu compilado neste RPO)
Else
conout(testeahu NAO compilado neste RPO)
Endif
GETJOBPROFSTRING
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETJOBPROFSTRING ( lt cKey gt lt cDefault gt ) --gt cKeyValue
Paracircmetros
Argumento Tipo Descriccedilatildeo
cKey Caracter cKey corresponde agrave chave da seccedilatildeo de configuraccedilatildeo da Working Thread atual a ser retornada
cDefault Caracter Valor default (string) a ser retornado pela funccedilatildeo caso a chave especificada natildeo sehja encontrada no INI
Retorno
Tipo Descriccedilatildeo
Caracter Conteudo da Chave solicitada Caso a chave natildeo seja encontrada eacute retornado o conteudo de cDefault Caso esta funccedilatildeo natildeo seja executada a partir de uma Working Thread ela
18
retornaraacute uma string em branco ()
Descriccedilatildeo
Atraveacutes desta funccedilatildeo podemos recuperar as configuraccedilotildees do Job da Working Thread atual
GETWEXVERSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETWEXVERSION ( ) --gt cBuildId
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave String Identificadora da versatildeo no formato ltLIBgt VAAMMDDHHmm Vide Tabela A
Descriccedilatildeo
Esta funccedilatildeo natildeo requer argumentos e retorna o Identificador do build versatildeo de Release das funccedilotildees de Infra-Estrutura APWEBEX
Observaccedilatildeo A data informada pela versatildeo natildeo corresponde agrave ultima compilaccedilatildeo do RPO de um determinado Projeto WEB mas sim agrave data de release da LIB de Infra-Estrutura APWEBEX
Tabela A
Simbolo Descriccedilatildeo
AA Ano de geraccedilatildeo da Lib
MM Mecircs da geraccedilatildeo da Lib
DD Dia da geraccedilatildeo da Lib
HH Horaacuterio da geraccedilatildeo da Lib
mm Minutos do Horaacuterio de Geraccedilatildeo da Lib
(HTTP) Indica que a versatildeo foi compilada com a configuracatildeo de envio progressivo de HTML simultacircneo para o Browse Esta opccedilatildeo eacute imprescindiacutevel para projetos que se utilizam desta LIB
Por exemplo
APWEBEX Version 30312021900 (HTTP)
HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HEXSTRDUMP ( lt cString gt [ nStart ] [ nLength ] ) --gt cHExDump
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser lida para a geraccedilatildeo do Dump
nStart Numeacuterico Corresponde agrave posiccedilatildeo inicial de cString a ser considerada para a geraccedilatildeo do Dump a partir da posiccedilatildeo 1 Caso este paracircmetro natildeo seja informado o
Default eacute a posiccedilatildeo 1 da string
nLength Numeacuterico nLength corresponde agraveo tamanho a ser considerado para a geraccedilatildeo do DUMP a partir da posiccedilatildeo inicial recebida em nStart Caso este paracircmetro natildeo
seja informado eacute considerado o tamanho ateacute o final da String
Retorno
Tipo Descriccedilatildeo
Caracter O retorno da funccedilatildeo corresponde agrave uma string Advpl formatadas em 16 bytes em hexadecimal por linha mais o separador pipe (|) mais os 16 caracteres em Ansi Os caracteres de
controle ( codigo ascii menor que 32 ) satildeo convertidos para visualizaccedilatildeo para o caractere underline (_)
Descriccedilatildeo
Atraveacutes da funccedilatildeo HexStrDump() podemos gerar uma string em Advpl em formato de Dump Hexadecimal a partir da string informada como paracircmetro a partir de uma determinada posiccedilatildeo da string considerando um
nuacutemero de bytes informado
Caso os paracircmetros nPosIni e nTamString natildeo sejam informados o dump gerado corresponde a string recebida como paracircmetro em sua totalidade
Observaccedilatildeo
Natildeo devemos pasar para a funccedilatildeo HexStrDump uma string maior que 240 Kb pois a geraccedilatildeo da String de dump eacute realizada em memoacuteria sendo a string final gerada em meacutedia 42 vezes maior que a string passada
como paracircmetro Caso a string passada como paracircmetro seja maior que 240 Kb a execuccedilatildeo seraacute abortada com a ocorrecircncia de erro fatal string size overflow
HTMLNOTAGS
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HTMLNOTAGS ( lt cStrHtml gt ) --gt cStrNoTags
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrHtml Caracter cStrHtml corresponde a uma String que natildeo pode conter caracteres Html interpretaacuteveis
Retorno
Tipo Descriccedilatildeo
Caracter String original com os caracteres interpretaacuteveis Html lt gt amp convertidos para caracteres natildeo-interpretaacuteveis
Descriccedilatildeo
A Funccedilatildeo HTMLNOTAGS converte as Tags interpretaacuteveis de uma String HTML para TAGS natildeo interpretaacuteveis Este recurso eacute normalmente utilizado quando precisamos montar um input Html com um conteudo que
nao pode ser interpretado pelo browser como uma Tag Esta funccedilatildeo apenas converte os caracteres lt ( menor que ) gt ( maior que ) amp ( e comercial ) e ldquo ( aspas duplas )
Recomenda-se fortemente que na montagem do value de um input html o conteuacutedo do mesmo seja colocado entre aspas duplas pois caso o conteuacutedo do value inicial do campo contenha aspas simples (
natildeo convertidas pela funccedilatildeo HtmlNoTags) isto poderaacute ocasionar perda de dados e erro de sintaxe no formulaacuterio Html
HTTPISWEBEX
Revisatildeo 12122003
Sintaxe
HTTPISWEBEX ( ) --gt lIsApWEBEX
Retorno
Tipo Descriccedilatildeo
Loacutegico A funccedilatildeo retornaraacute T caso o ambiente de execuccedilatildeo atual seja uma Working Thread WEBEX inicializada pela funccedilatildeo de infra-estrutura STARTWEBEX
Descriccedilatildeo
Atraveacutes da funccedilatildeo HttpIsWebEx() eacute possiacutevel identificarmos se o programa atual estaacute sendo executado atraveacutes de uma Working Thread inicializada utilizando-se as funccedilotildees de Infra-Estrutura APWEBEX
ISEMAIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
19
Sintaxe
ISEMAIL ( lt cEMail gt ) --gt lEmailOk
Paracircmetros
Argumento Tipo Descriccedilatildeo
cEMail Caracter cEmail corresponde a string a ser analizada contendo um e apenas um endereccedilo de e-mail
Retorno
Tipo Descriccedilatildeo
Caracter Retorna T caso a sring recebida como paracircmetro atenda agraves definiccedilotildees de nomenclatura vaacutelidos para um endereccedilo de e-mail
Descriccedilatildeo
Utilizada para validar e-mails em Advpl a funccedilatildeo ISEMAIL recebe como paracircmetro uma string contendo um e-mail retornando T caso a string esteja em um formaacuteto vaacutelido respeitando a regra para nomenclatura de
endereccedilos de e-mail
Regra Um e-mail eacute considerado vaacutelido caso seja iniciado por um caracter apenas contenha caracteres asc de a a z e 0 a 9 e os caracteres (arroba) (ponto) - ( hiacutefen) ou _ (underline) e deve conter uma e
apenas uma arroba e no minimo um ponto apos a arroba intercalado por um caracter
LOWERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
LOWERACE ( lt cString gt ) --gt cStrLower
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a sequecircncia de caracteres a ser convertida para letras minuacutesculas
Retorno
Tipo Descriccedilatildeo
Caracter String original em letras minuacutesculas
Descriccedilatildeo
A Funccedilatildeo LOWERACE converte todos os caracteres de uma String para ldquominusculordquo semelhante agrave funccedilatildeo LOWER() poreacutem considera e converte tambeacutem caracteres acentuados em ANSI
NTOC
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
NTOC ( lt nNumero gt lt nBase gt lt nTamStr gt ) --gt cString
Paracircmetros
Argumento Tipo Descriccedilatildeo
nNumero Numeacuterico nNumero eacute o valor numeacuterico em base devimal a ser convertido
nBase Numeacuterico nBase corresponde agrave base binaacuteria a ser utilizada para converter nNumero
nTamStr Numeacuterico nTamStr corresponde ao tamanho da string representando o numero na base desejada
Retorno
Tipo Descriccedilatildeo
Caracter cString corresponde ao numero convertido para a base numeacuterica especificada como paracircmetro
Descriccedilatildeo
A Funccedilatildeo NTOC converte um nuacutemero em notaccedilatildeo decimal para um nuacutemero representado por String utilizando uma base numeacuterica entre 2 e 36 preenchendo-o com ldquo0rdquo (zeros) agrave esquerda do tamanho especificado
Observaccedilatildeo O Paracircmetro nBase deve ser especificado com um nuacutemero entre 2 e 36 Caso seja passado como paracircmetro um nuacutemero base fora desta faixa o processamento eacute abortado com a ocorrecircncia de erro
[APWEXERR_0022] INVALID NTOC BASE [X] onde ltXgt foi a base passada como argumento
REDIRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
REDIRPAGE ( lt cUrl gt [ cTarget ] [ nTime ] ) --gt cScript
Paracircmetros
Argumento Tipo Descriccedilatildeo
cUrl Caracter Link para onde o script deve apontar o redirecionamento
cTarget Caracter Destino do redirecionamento Caso natildeo especificado o default eacute _self
nTime Numeacuterico Tempo (em segundos) de delay antes do redirecionamento ser executado
Retorno
Tipo Descriccedilatildeo
Caracter Script Html JavaScript que ao ser executado no Browser (client) chama a paacuteginaobjeto chamado no Link
Descriccedilatildeo
A funccedilatildeo RedirPage eacute utilizada quando desejamos devolver ao Browser um script que ao ser executado redirecionaraacute o Browser agrave abertura de um link passado como paracircmetro
RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLACE ( lt cStrFind gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrFind Caracter cStrFind corresponde agrave sequecircncia de caracteres a ser procurada podendo conter caracteres maiuacutesculos e minuacutesculos com ou sem acentuaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cStrQuery corresponde agrave string de busca a ser utilizada na query utilizando caracteres em minuacutesculo
Descriccedilatildeo
A funccedilatildeo RetSqlAce eacute utilizada para auxiliar de montagem de querys de busca de caracteres acentuados em bases de dados A funccedilatildeo automaticamente trata a string original removendo os acentos convertendo todos
os caracteres para minuacutesculas e trocando todas as vogais e cedilhas da string original por uma sequecircncia de caracteres acentuados em munuacutescilas para busca posicional
20
RETSQLCOND
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLCOND ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlCond() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga e o Makira Hypersite utilizando aliases de 3
caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar a filial atual ( xFilial ) de acordo com o modo do arquivo ( X2_MODO ) e para sempre desconsiderar
registros deletados
Observaccedilotildees
Esta funccedilatildeo foi mantida apenas por compatibilidade pois a ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do
banco para efeitos de performance Para ganharmos performance nas Querys devemos ao inveacutes de utilizar a funccedilatildeo RetSqlCond() utilizar como primeira clauacutesula WHERE o retorno da funccedilatildeo RetSqlFil() (
comparaccedilatildeo dos campos _FILIAL os primeiros do(s) iacutendice(s) do ERP ) que retorna apenas as comparaccedilotildees de Filial e por uacuteltimo a funccedilatildeo RetSqlDel que retorna o script para verificaccedilatildeo dos campos deletados (
que eacute o uacuteltimo campo das chaves de iacutendice do ERP utilizando TopConnect )
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlCond() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de
modo que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute
retorna os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLDEL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLDEL ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlDel() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo D_E_L_E_T_ da(s) tabela(s) passada(s) como paracircmetro
Observaccedilotildees
A ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do banco para efeitos de performance Para ganharmos performance
nas Querys devemos utilizar a funccedilatildeo RetSqlDEl() na montagem das ultimas consistecircncias da claacuteusula WHERE de uma Query
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlDel() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo
que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna
os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLFIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLFIL ( lt cAliases gt [ cCompFil ] ) --gt cSQlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
cCompFil Caracter
Atraveacutes de cCompFil eacute possiacutevel especificar uma Filial FIXA a ser comparada com os campos FILIAL do(s) alias(es) passados no paracircmetro cAliases
Caso natildeo informado os campos _FILIAL da(s) tabela(s) passadas como paracircmetro em cAliases seratildeo comparados com o retorno da funccedilatildeo xFilial() de
cada alias respectivamente
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo filial atual ( xFilial ) de acordo com o modo de abertura do arquivo no ERP ( X2_MODO )
Observaccedilatildeo
Devemos atentar ao fato que a funccedilatildeo RetSqlFil() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo que estes
alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna os
nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLTAB
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLTAB ( lt cAliasList gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliasList Caracter String contendo um ou mais alias separados por virgula a terem seus nomes fiacutesicos determinados
Retorno
Tipo Descriccedilatildeo
Caracter String contendo nomes fisicos e alias identificadores dos aliases recebidos como paracircmetro
Descriccedilatildeo
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
17
EXECINPAGE
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXECINPAGE ( lt cAPHPage gt ) --gt cHTMLPage
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAPHPage Caracter Corresponde agraveo nome do APH que deve ser executado sem a extensatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cHtmlPage corresponde agrave string HTML gerada pela paacutegina APH AHU
Descriccedilatildeo
Atraveacutes da funccedilatildeo ExecInPage() executamos uma paacutegina APH passada como paracircmetro A funccedilatildeo deveraacute retornar a String HTML correspondente agrave paacutegina processada
Poreacutem a funccedilatildeo ExecInPage() realiza tratamentos adicionais padratildeo relacionaodo agraveo comportamento dos Projetos WEB referentes agrave customizaccedilotildees da segunte maneira
1 Primeiro eacute verificado se existe uma paacutegina AHU compilada com o nome cAPHPage Caso exista a mesma seraacute executada pela execinpage
2 Caso natildeo exista AHU com este nome eacute procurado pelo APH Caso o APH exista o mesmo seraacute executado pela ExecInPage
3 Caso natildeo existam no RPO atual o APH nem o AHU com o nome especificado no paracircmetro cAPHFile o processamento eacute abortado com a ocorrecircncia de erro [APWEXERR_0007] APH page
[ltcAPHPagegt] not found in RPO 4 Antes de executar o APH ou AHU identificado nos passos anteriores eacute verificado se existe um ponto de entrada ( User Function ) compilado com o mesmo nome do APH Caso exista o ponto de
entrada eacute executado Ele deveraacute retornar uma String HTML Se for retornada alguma string a funccedilatildeo retorna a tring retornada e natildeo processa o APH AHU Observaccedilatildeo A funccedilatildeo ExecInPage natildeo iraacute executar este
tratamento da User Function com o nome de cAPHPage caso a funccedilatildeo ExecInPage() esteja sendo executada atraveacutes de uma USER FUNCTION
Observaccedilatildeo Importante - Envio parcial de HTML agraveo Browser A funccedilatildeo ExecInpage() juntamente com o APH compilado ao serem processados iratildeo tentar enviar o conteuacutedo HTML para o Browser solicitante durante o processamento de modo que a funccedilatildeo normalmente iraacute
retornar uma String vazia
Caso seja necessaacuteria a execuccedilatildeo de uma paacutegina APH ou AHU e o natildeo-envio da mesma para o Browse por exemplo para a geraccedilatildeo de um coacutedigo HTML a ser enviado via e-mail revemos utilizar a funccedilatildeo
HttpSetPart() realizando uma chamada da mesma antes da ExecInPage() passando o paracircmetro F para desabilitar temporariamente o envio de HTML simultacircneo ao Browser e apoacutes a execuccedilatildeo da ExecInPage()
devemos re-habilitar o envio simultacircneo atraveacutes da chamada da funccedilatildeo HttpSetPart() com o paracircmetro T
EXISTPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTPAGE ( lt cAphFile gt ) --gt lFound
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAphFile Caracter Nome do arquivo APH sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Caracter Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistPage() para identificarmos no ambiente atual se um determinado arquivo APH encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistPage(teste)
conout(testeaph compilado neste RPO)
Else
conout(testeaph NAO compilado neste RPO)
Endif
EXISTUSRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
EXISTUSRPAGE ( lt cAhuFile gt ) --gt lExist
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAhuFile Caracter Nome do arquivo AHU sem extensatildeo e sem path a ser verificado
Retorno
Tipo Descriccedilatildeo
Loacutegico Retorna um valor booleano indicando se o arquivo APH especificado estaacute compilado no RPO do ambiente atual
Descriccedilatildeo
Utilizamos a funccedilatildeo ExistUSRPage() para identificarmos no ambiente atual se um determinado arquivo AHU encontra-se compilado atualmente no RPO em uso
Exemplo
If ExistUSRPage(teste)
conout(testeahu compilado neste RPO)
Else
conout(testeahu NAO compilado neste RPO)
Endif
GETJOBPROFSTRING
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETJOBPROFSTRING ( lt cKey gt lt cDefault gt ) --gt cKeyValue
Paracircmetros
Argumento Tipo Descriccedilatildeo
cKey Caracter cKey corresponde agrave chave da seccedilatildeo de configuraccedilatildeo da Working Thread atual a ser retornada
cDefault Caracter Valor default (string) a ser retornado pela funccedilatildeo caso a chave especificada natildeo sehja encontrada no INI
Retorno
Tipo Descriccedilatildeo
Caracter Conteudo da Chave solicitada Caso a chave natildeo seja encontrada eacute retornado o conteudo de cDefault Caso esta funccedilatildeo natildeo seja executada a partir de uma Working Thread ela
18
retornaraacute uma string em branco ()
Descriccedilatildeo
Atraveacutes desta funccedilatildeo podemos recuperar as configuraccedilotildees do Job da Working Thread atual
GETWEXVERSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETWEXVERSION ( ) --gt cBuildId
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave String Identificadora da versatildeo no formato ltLIBgt VAAMMDDHHmm Vide Tabela A
Descriccedilatildeo
Esta funccedilatildeo natildeo requer argumentos e retorna o Identificador do build versatildeo de Release das funccedilotildees de Infra-Estrutura APWEBEX
Observaccedilatildeo A data informada pela versatildeo natildeo corresponde agrave ultima compilaccedilatildeo do RPO de um determinado Projeto WEB mas sim agrave data de release da LIB de Infra-Estrutura APWEBEX
Tabela A
Simbolo Descriccedilatildeo
AA Ano de geraccedilatildeo da Lib
MM Mecircs da geraccedilatildeo da Lib
DD Dia da geraccedilatildeo da Lib
HH Horaacuterio da geraccedilatildeo da Lib
mm Minutos do Horaacuterio de Geraccedilatildeo da Lib
(HTTP) Indica que a versatildeo foi compilada com a configuracatildeo de envio progressivo de HTML simultacircneo para o Browse Esta opccedilatildeo eacute imprescindiacutevel para projetos que se utilizam desta LIB
Por exemplo
APWEBEX Version 30312021900 (HTTP)
HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HEXSTRDUMP ( lt cString gt [ nStart ] [ nLength ] ) --gt cHExDump
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser lida para a geraccedilatildeo do Dump
nStart Numeacuterico Corresponde agrave posiccedilatildeo inicial de cString a ser considerada para a geraccedilatildeo do Dump a partir da posiccedilatildeo 1 Caso este paracircmetro natildeo seja informado o
Default eacute a posiccedilatildeo 1 da string
nLength Numeacuterico nLength corresponde agraveo tamanho a ser considerado para a geraccedilatildeo do DUMP a partir da posiccedilatildeo inicial recebida em nStart Caso este paracircmetro natildeo
seja informado eacute considerado o tamanho ateacute o final da String
Retorno
Tipo Descriccedilatildeo
Caracter O retorno da funccedilatildeo corresponde agrave uma string Advpl formatadas em 16 bytes em hexadecimal por linha mais o separador pipe (|) mais os 16 caracteres em Ansi Os caracteres de
controle ( codigo ascii menor que 32 ) satildeo convertidos para visualizaccedilatildeo para o caractere underline (_)
Descriccedilatildeo
Atraveacutes da funccedilatildeo HexStrDump() podemos gerar uma string em Advpl em formato de Dump Hexadecimal a partir da string informada como paracircmetro a partir de uma determinada posiccedilatildeo da string considerando um
nuacutemero de bytes informado
Caso os paracircmetros nPosIni e nTamString natildeo sejam informados o dump gerado corresponde a string recebida como paracircmetro em sua totalidade
Observaccedilatildeo
Natildeo devemos pasar para a funccedilatildeo HexStrDump uma string maior que 240 Kb pois a geraccedilatildeo da String de dump eacute realizada em memoacuteria sendo a string final gerada em meacutedia 42 vezes maior que a string passada
como paracircmetro Caso a string passada como paracircmetro seja maior que 240 Kb a execuccedilatildeo seraacute abortada com a ocorrecircncia de erro fatal string size overflow
HTMLNOTAGS
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HTMLNOTAGS ( lt cStrHtml gt ) --gt cStrNoTags
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrHtml Caracter cStrHtml corresponde a uma String que natildeo pode conter caracteres Html interpretaacuteveis
Retorno
Tipo Descriccedilatildeo
Caracter String original com os caracteres interpretaacuteveis Html lt gt amp convertidos para caracteres natildeo-interpretaacuteveis
Descriccedilatildeo
A Funccedilatildeo HTMLNOTAGS converte as Tags interpretaacuteveis de uma String HTML para TAGS natildeo interpretaacuteveis Este recurso eacute normalmente utilizado quando precisamos montar um input Html com um conteudo que
nao pode ser interpretado pelo browser como uma Tag Esta funccedilatildeo apenas converte os caracteres lt ( menor que ) gt ( maior que ) amp ( e comercial ) e ldquo ( aspas duplas )
Recomenda-se fortemente que na montagem do value de um input html o conteuacutedo do mesmo seja colocado entre aspas duplas pois caso o conteuacutedo do value inicial do campo contenha aspas simples (
natildeo convertidas pela funccedilatildeo HtmlNoTags) isto poderaacute ocasionar perda de dados e erro de sintaxe no formulaacuterio Html
HTTPISWEBEX
Revisatildeo 12122003
Sintaxe
HTTPISWEBEX ( ) --gt lIsApWEBEX
Retorno
Tipo Descriccedilatildeo
Loacutegico A funccedilatildeo retornaraacute T caso o ambiente de execuccedilatildeo atual seja uma Working Thread WEBEX inicializada pela funccedilatildeo de infra-estrutura STARTWEBEX
Descriccedilatildeo
Atraveacutes da funccedilatildeo HttpIsWebEx() eacute possiacutevel identificarmos se o programa atual estaacute sendo executado atraveacutes de uma Working Thread inicializada utilizando-se as funccedilotildees de Infra-Estrutura APWEBEX
ISEMAIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
19
Sintaxe
ISEMAIL ( lt cEMail gt ) --gt lEmailOk
Paracircmetros
Argumento Tipo Descriccedilatildeo
cEMail Caracter cEmail corresponde a string a ser analizada contendo um e apenas um endereccedilo de e-mail
Retorno
Tipo Descriccedilatildeo
Caracter Retorna T caso a sring recebida como paracircmetro atenda agraves definiccedilotildees de nomenclatura vaacutelidos para um endereccedilo de e-mail
Descriccedilatildeo
Utilizada para validar e-mails em Advpl a funccedilatildeo ISEMAIL recebe como paracircmetro uma string contendo um e-mail retornando T caso a string esteja em um formaacuteto vaacutelido respeitando a regra para nomenclatura de
endereccedilos de e-mail
Regra Um e-mail eacute considerado vaacutelido caso seja iniciado por um caracter apenas contenha caracteres asc de a a z e 0 a 9 e os caracteres (arroba) (ponto) - ( hiacutefen) ou _ (underline) e deve conter uma e
apenas uma arroba e no minimo um ponto apos a arroba intercalado por um caracter
LOWERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
LOWERACE ( lt cString gt ) --gt cStrLower
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a sequecircncia de caracteres a ser convertida para letras minuacutesculas
Retorno
Tipo Descriccedilatildeo
Caracter String original em letras minuacutesculas
Descriccedilatildeo
A Funccedilatildeo LOWERACE converte todos os caracteres de uma String para ldquominusculordquo semelhante agrave funccedilatildeo LOWER() poreacutem considera e converte tambeacutem caracteres acentuados em ANSI
NTOC
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
NTOC ( lt nNumero gt lt nBase gt lt nTamStr gt ) --gt cString
Paracircmetros
Argumento Tipo Descriccedilatildeo
nNumero Numeacuterico nNumero eacute o valor numeacuterico em base devimal a ser convertido
nBase Numeacuterico nBase corresponde agrave base binaacuteria a ser utilizada para converter nNumero
nTamStr Numeacuterico nTamStr corresponde ao tamanho da string representando o numero na base desejada
Retorno
Tipo Descriccedilatildeo
Caracter cString corresponde ao numero convertido para a base numeacuterica especificada como paracircmetro
Descriccedilatildeo
A Funccedilatildeo NTOC converte um nuacutemero em notaccedilatildeo decimal para um nuacutemero representado por String utilizando uma base numeacuterica entre 2 e 36 preenchendo-o com ldquo0rdquo (zeros) agrave esquerda do tamanho especificado
Observaccedilatildeo O Paracircmetro nBase deve ser especificado com um nuacutemero entre 2 e 36 Caso seja passado como paracircmetro um nuacutemero base fora desta faixa o processamento eacute abortado com a ocorrecircncia de erro
[APWEXERR_0022] INVALID NTOC BASE [X] onde ltXgt foi a base passada como argumento
REDIRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
REDIRPAGE ( lt cUrl gt [ cTarget ] [ nTime ] ) --gt cScript
Paracircmetros
Argumento Tipo Descriccedilatildeo
cUrl Caracter Link para onde o script deve apontar o redirecionamento
cTarget Caracter Destino do redirecionamento Caso natildeo especificado o default eacute _self
nTime Numeacuterico Tempo (em segundos) de delay antes do redirecionamento ser executado
Retorno
Tipo Descriccedilatildeo
Caracter Script Html JavaScript que ao ser executado no Browser (client) chama a paacuteginaobjeto chamado no Link
Descriccedilatildeo
A funccedilatildeo RedirPage eacute utilizada quando desejamos devolver ao Browser um script que ao ser executado redirecionaraacute o Browser agrave abertura de um link passado como paracircmetro
RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLACE ( lt cStrFind gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrFind Caracter cStrFind corresponde agrave sequecircncia de caracteres a ser procurada podendo conter caracteres maiuacutesculos e minuacutesculos com ou sem acentuaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cStrQuery corresponde agrave string de busca a ser utilizada na query utilizando caracteres em minuacutesculo
Descriccedilatildeo
A funccedilatildeo RetSqlAce eacute utilizada para auxiliar de montagem de querys de busca de caracteres acentuados em bases de dados A funccedilatildeo automaticamente trata a string original removendo os acentos convertendo todos
os caracteres para minuacutesculas e trocando todas as vogais e cedilhas da string original por uma sequecircncia de caracteres acentuados em munuacutescilas para busca posicional
20
RETSQLCOND
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLCOND ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlCond() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga e o Makira Hypersite utilizando aliases de 3
caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar a filial atual ( xFilial ) de acordo com o modo do arquivo ( X2_MODO ) e para sempre desconsiderar
registros deletados
Observaccedilotildees
Esta funccedilatildeo foi mantida apenas por compatibilidade pois a ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do
banco para efeitos de performance Para ganharmos performance nas Querys devemos ao inveacutes de utilizar a funccedilatildeo RetSqlCond() utilizar como primeira clauacutesula WHERE o retorno da funccedilatildeo RetSqlFil() (
comparaccedilatildeo dos campos _FILIAL os primeiros do(s) iacutendice(s) do ERP ) que retorna apenas as comparaccedilotildees de Filial e por uacuteltimo a funccedilatildeo RetSqlDel que retorna o script para verificaccedilatildeo dos campos deletados (
que eacute o uacuteltimo campo das chaves de iacutendice do ERP utilizando TopConnect )
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlCond() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de
modo que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute
retorna os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLDEL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLDEL ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlDel() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo D_E_L_E_T_ da(s) tabela(s) passada(s) como paracircmetro
Observaccedilotildees
A ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do banco para efeitos de performance Para ganharmos performance
nas Querys devemos utilizar a funccedilatildeo RetSqlDEl() na montagem das ultimas consistecircncias da claacuteusula WHERE de uma Query
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlDel() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo
que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna
os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLFIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLFIL ( lt cAliases gt [ cCompFil ] ) --gt cSQlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
cCompFil Caracter
Atraveacutes de cCompFil eacute possiacutevel especificar uma Filial FIXA a ser comparada com os campos FILIAL do(s) alias(es) passados no paracircmetro cAliases
Caso natildeo informado os campos _FILIAL da(s) tabela(s) passadas como paracircmetro em cAliases seratildeo comparados com o retorno da funccedilatildeo xFilial() de
cada alias respectivamente
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo filial atual ( xFilial ) de acordo com o modo de abertura do arquivo no ERP ( X2_MODO )
Observaccedilatildeo
Devemos atentar ao fato que a funccedilatildeo RetSqlFil() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo que estes
alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna os
nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLTAB
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLTAB ( lt cAliasList gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliasList Caracter String contendo um ou mais alias separados por virgula a terem seus nomes fiacutesicos determinados
Retorno
Tipo Descriccedilatildeo
Caracter String contendo nomes fisicos e alias identificadores dos aliases recebidos como paracircmetro
Descriccedilatildeo
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
18
retornaraacute uma string em branco ()
Descriccedilatildeo
Atraveacutes desta funccedilatildeo podemos recuperar as configuraccedilotildees do Job da Working Thread atual
GETWEXVERSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
GETWEXVERSION ( ) --gt cBuildId
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave String Identificadora da versatildeo no formato ltLIBgt VAAMMDDHHmm Vide Tabela A
Descriccedilatildeo
Esta funccedilatildeo natildeo requer argumentos e retorna o Identificador do build versatildeo de Release das funccedilotildees de Infra-Estrutura APWEBEX
Observaccedilatildeo A data informada pela versatildeo natildeo corresponde agrave ultima compilaccedilatildeo do RPO de um determinado Projeto WEB mas sim agrave data de release da LIB de Infra-Estrutura APWEBEX
Tabela A
Simbolo Descriccedilatildeo
AA Ano de geraccedilatildeo da Lib
MM Mecircs da geraccedilatildeo da Lib
DD Dia da geraccedilatildeo da Lib
HH Horaacuterio da geraccedilatildeo da Lib
mm Minutos do Horaacuterio de Geraccedilatildeo da Lib
(HTTP) Indica que a versatildeo foi compilada com a configuracatildeo de envio progressivo de HTML simultacircneo para o Browse Esta opccedilatildeo eacute imprescindiacutevel para projetos que se utilizam desta LIB
Por exemplo
APWEBEX Version 30312021900 (HTTP)
HEXSTRDUMP
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HEXSTRDUMP ( lt cString gt [ nStart ] [ nLength ] ) --gt cHExDump
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser lida para a geraccedilatildeo do Dump
nStart Numeacuterico Corresponde agrave posiccedilatildeo inicial de cString a ser considerada para a geraccedilatildeo do Dump a partir da posiccedilatildeo 1 Caso este paracircmetro natildeo seja informado o
Default eacute a posiccedilatildeo 1 da string
nLength Numeacuterico nLength corresponde agraveo tamanho a ser considerado para a geraccedilatildeo do DUMP a partir da posiccedilatildeo inicial recebida em nStart Caso este paracircmetro natildeo
seja informado eacute considerado o tamanho ateacute o final da String
Retorno
Tipo Descriccedilatildeo
Caracter O retorno da funccedilatildeo corresponde agrave uma string Advpl formatadas em 16 bytes em hexadecimal por linha mais o separador pipe (|) mais os 16 caracteres em Ansi Os caracteres de
controle ( codigo ascii menor que 32 ) satildeo convertidos para visualizaccedilatildeo para o caractere underline (_)
Descriccedilatildeo
Atraveacutes da funccedilatildeo HexStrDump() podemos gerar uma string em Advpl em formato de Dump Hexadecimal a partir da string informada como paracircmetro a partir de uma determinada posiccedilatildeo da string considerando um
nuacutemero de bytes informado
Caso os paracircmetros nPosIni e nTamString natildeo sejam informados o dump gerado corresponde a string recebida como paracircmetro em sua totalidade
Observaccedilatildeo
Natildeo devemos pasar para a funccedilatildeo HexStrDump uma string maior que 240 Kb pois a geraccedilatildeo da String de dump eacute realizada em memoacuteria sendo a string final gerada em meacutedia 42 vezes maior que a string passada
como paracircmetro Caso a string passada como paracircmetro seja maior que 240 Kb a execuccedilatildeo seraacute abortada com a ocorrecircncia de erro fatal string size overflow
HTMLNOTAGS
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
HTMLNOTAGS ( lt cStrHtml gt ) --gt cStrNoTags
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrHtml Caracter cStrHtml corresponde a uma String que natildeo pode conter caracteres Html interpretaacuteveis
Retorno
Tipo Descriccedilatildeo
Caracter String original com os caracteres interpretaacuteveis Html lt gt amp convertidos para caracteres natildeo-interpretaacuteveis
Descriccedilatildeo
A Funccedilatildeo HTMLNOTAGS converte as Tags interpretaacuteveis de uma String HTML para TAGS natildeo interpretaacuteveis Este recurso eacute normalmente utilizado quando precisamos montar um input Html com um conteudo que
nao pode ser interpretado pelo browser como uma Tag Esta funccedilatildeo apenas converte os caracteres lt ( menor que ) gt ( maior que ) amp ( e comercial ) e ldquo ( aspas duplas )
Recomenda-se fortemente que na montagem do value de um input html o conteuacutedo do mesmo seja colocado entre aspas duplas pois caso o conteuacutedo do value inicial do campo contenha aspas simples (
natildeo convertidas pela funccedilatildeo HtmlNoTags) isto poderaacute ocasionar perda de dados e erro de sintaxe no formulaacuterio Html
HTTPISWEBEX
Revisatildeo 12122003
Sintaxe
HTTPISWEBEX ( ) --gt lIsApWEBEX
Retorno
Tipo Descriccedilatildeo
Loacutegico A funccedilatildeo retornaraacute T caso o ambiente de execuccedilatildeo atual seja uma Working Thread WEBEX inicializada pela funccedilatildeo de infra-estrutura STARTWEBEX
Descriccedilatildeo
Atraveacutes da funccedilatildeo HttpIsWebEx() eacute possiacutevel identificarmos se o programa atual estaacute sendo executado atraveacutes de uma Working Thread inicializada utilizando-se as funccedilotildees de Infra-Estrutura APWEBEX
ISEMAIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
19
Sintaxe
ISEMAIL ( lt cEMail gt ) --gt lEmailOk
Paracircmetros
Argumento Tipo Descriccedilatildeo
cEMail Caracter cEmail corresponde a string a ser analizada contendo um e apenas um endereccedilo de e-mail
Retorno
Tipo Descriccedilatildeo
Caracter Retorna T caso a sring recebida como paracircmetro atenda agraves definiccedilotildees de nomenclatura vaacutelidos para um endereccedilo de e-mail
Descriccedilatildeo
Utilizada para validar e-mails em Advpl a funccedilatildeo ISEMAIL recebe como paracircmetro uma string contendo um e-mail retornando T caso a string esteja em um formaacuteto vaacutelido respeitando a regra para nomenclatura de
endereccedilos de e-mail
Regra Um e-mail eacute considerado vaacutelido caso seja iniciado por um caracter apenas contenha caracteres asc de a a z e 0 a 9 e os caracteres (arroba) (ponto) - ( hiacutefen) ou _ (underline) e deve conter uma e
apenas uma arroba e no minimo um ponto apos a arroba intercalado por um caracter
LOWERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
LOWERACE ( lt cString gt ) --gt cStrLower
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a sequecircncia de caracteres a ser convertida para letras minuacutesculas
Retorno
Tipo Descriccedilatildeo
Caracter String original em letras minuacutesculas
Descriccedilatildeo
A Funccedilatildeo LOWERACE converte todos os caracteres de uma String para ldquominusculordquo semelhante agrave funccedilatildeo LOWER() poreacutem considera e converte tambeacutem caracteres acentuados em ANSI
NTOC
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
NTOC ( lt nNumero gt lt nBase gt lt nTamStr gt ) --gt cString
Paracircmetros
Argumento Tipo Descriccedilatildeo
nNumero Numeacuterico nNumero eacute o valor numeacuterico em base devimal a ser convertido
nBase Numeacuterico nBase corresponde agrave base binaacuteria a ser utilizada para converter nNumero
nTamStr Numeacuterico nTamStr corresponde ao tamanho da string representando o numero na base desejada
Retorno
Tipo Descriccedilatildeo
Caracter cString corresponde ao numero convertido para a base numeacuterica especificada como paracircmetro
Descriccedilatildeo
A Funccedilatildeo NTOC converte um nuacutemero em notaccedilatildeo decimal para um nuacutemero representado por String utilizando uma base numeacuterica entre 2 e 36 preenchendo-o com ldquo0rdquo (zeros) agrave esquerda do tamanho especificado
Observaccedilatildeo O Paracircmetro nBase deve ser especificado com um nuacutemero entre 2 e 36 Caso seja passado como paracircmetro um nuacutemero base fora desta faixa o processamento eacute abortado com a ocorrecircncia de erro
[APWEXERR_0022] INVALID NTOC BASE [X] onde ltXgt foi a base passada como argumento
REDIRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
REDIRPAGE ( lt cUrl gt [ cTarget ] [ nTime ] ) --gt cScript
Paracircmetros
Argumento Tipo Descriccedilatildeo
cUrl Caracter Link para onde o script deve apontar o redirecionamento
cTarget Caracter Destino do redirecionamento Caso natildeo especificado o default eacute _self
nTime Numeacuterico Tempo (em segundos) de delay antes do redirecionamento ser executado
Retorno
Tipo Descriccedilatildeo
Caracter Script Html JavaScript que ao ser executado no Browser (client) chama a paacuteginaobjeto chamado no Link
Descriccedilatildeo
A funccedilatildeo RedirPage eacute utilizada quando desejamos devolver ao Browser um script que ao ser executado redirecionaraacute o Browser agrave abertura de um link passado como paracircmetro
RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLACE ( lt cStrFind gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrFind Caracter cStrFind corresponde agrave sequecircncia de caracteres a ser procurada podendo conter caracteres maiuacutesculos e minuacutesculos com ou sem acentuaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cStrQuery corresponde agrave string de busca a ser utilizada na query utilizando caracteres em minuacutesculo
Descriccedilatildeo
A funccedilatildeo RetSqlAce eacute utilizada para auxiliar de montagem de querys de busca de caracteres acentuados em bases de dados A funccedilatildeo automaticamente trata a string original removendo os acentos convertendo todos
os caracteres para minuacutesculas e trocando todas as vogais e cedilhas da string original por uma sequecircncia de caracteres acentuados em munuacutescilas para busca posicional
20
RETSQLCOND
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLCOND ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlCond() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga e o Makira Hypersite utilizando aliases de 3
caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar a filial atual ( xFilial ) de acordo com o modo do arquivo ( X2_MODO ) e para sempre desconsiderar
registros deletados
Observaccedilotildees
Esta funccedilatildeo foi mantida apenas por compatibilidade pois a ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do
banco para efeitos de performance Para ganharmos performance nas Querys devemos ao inveacutes de utilizar a funccedilatildeo RetSqlCond() utilizar como primeira clauacutesula WHERE o retorno da funccedilatildeo RetSqlFil() (
comparaccedilatildeo dos campos _FILIAL os primeiros do(s) iacutendice(s) do ERP ) que retorna apenas as comparaccedilotildees de Filial e por uacuteltimo a funccedilatildeo RetSqlDel que retorna o script para verificaccedilatildeo dos campos deletados (
que eacute o uacuteltimo campo das chaves de iacutendice do ERP utilizando TopConnect )
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlCond() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de
modo que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute
retorna os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLDEL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLDEL ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlDel() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo D_E_L_E_T_ da(s) tabela(s) passada(s) como paracircmetro
Observaccedilotildees
A ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do banco para efeitos de performance Para ganharmos performance
nas Querys devemos utilizar a funccedilatildeo RetSqlDEl() na montagem das ultimas consistecircncias da claacuteusula WHERE de uma Query
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlDel() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo
que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna
os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLFIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLFIL ( lt cAliases gt [ cCompFil ] ) --gt cSQlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
cCompFil Caracter
Atraveacutes de cCompFil eacute possiacutevel especificar uma Filial FIXA a ser comparada com os campos FILIAL do(s) alias(es) passados no paracircmetro cAliases
Caso natildeo informado os campos _FILIAL da(s) tabela(s) passadas como paracircmetro em cAliases seratildeo comparados com o retorno da funccedilatildeo xFilial() de
cada alias respectivamente
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo filial atual ( xFilial ) de acordo com o modo de abertura do arquivo no ERP ( X2_MODO )
Observaccedilatildeo
Devemos atentar ao fato que a funccedilatildeo RetSqlFil() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo que estes
alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna os
nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLTAB
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLTAB ( lt cAliasList gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliasList Caracter String contendo um ou mais alias separados por virgula a terem seus nomes fiacutesicos determinados
Retorno
Tipo Descriccedilatildeo
Caracter String contendo nomes fisicos e alias identificadores dos aliases recebidos como paracircmetro
Descriccedilatildeo
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
19
Sintaxe
ISEMAIL ( lt cEMail gt ) --gt lEmailOk
Paracircmetros
Argumento Tipo Descriccedilatildeo
cEMail Caracter cEmail corresponde a string a ser analizada contendo um e apenas um endereccedilo de e-mail
Retorno
Tipo Descriccedilatildeo
Caracter Retorna T caso a sring recebida como paracircmetro atenda agraves definiccedilotildees de nomenclatura vaacutelidos para um endereccedilo de e-mail
Descriccedilatildeo
Utilizada para validar e-mails em Advpl a funccedilatildeo ISEMAIL recebe como paracircmetro uma string contendo um e-mail retornando T caso a string esteja em um formaacuteto vaacutelido respeitando a regra para nomenclatura de
endereccedilos de e-mail
Regra Um e-mail eacute considerado vaacutelido caso seja iniciado por um caracter apenas contenha caracteres asc de a a z e 0 a 9 e os caracteres (arroba) (ponto) - ( hiacutefen) ou _ (underline) e deve conter uma e
apenas uma arroba e no minimo um ponto apos a arroba intercalado por um caracter
LOWERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
LOWERACE ( lt cString gt ) --gt cStrLower
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a sequecircncia de caracteres a ser convertida para letras minuacutesculas
Retorno
Tipo Descriccedilatildeo
Caracter String original em letras minuacutesculas
Descriccedilatildeo
A Funccedilatildeo LOWERACE converte todos os caracteres de uma String para ldquominusculordquo semelhante agrave funccedilatildeo LOWER() poreacutem considera e converte tambeacutem caracteres acentuados em ANSI
NTOC
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
NTOC ( lt nNumero gt lt nBase gt lt nTamStr gt ) --gt cString
Paracircmetros
Argumento Tipo Descriccedilatildeo
nNumero Numeacuterico nNumero eacute o valor numeacuterico em base devimal a ser convertido
nBase Numeacuterico nBase corresponde agrave base binaacuteria a ser utilizada para converter nNumero
nTamStr Numeacuterico nTamStr corresponde ao tamanho da string representando o numero na base desejada
Retorno
Tipo Descriccedilatildeo
Caracter cString corresponde ao numero convertido para a base numeacuterica especificada como paracircmetro
Descriccedilatildeo
A Funccedilatildeo NTOC converte um nuacutemero em notaccedilatildeo decimal para um nuacutemero representado por String utilizando uma base numeacuterica entre 2 e 36 preenchendo-o com ldquo0rdquo (zeros) agrave esquerda do tamanho especificado
Observaccedilatildeo O Paracircmetro nBase deve ser especificado com um nuacutemero entre 2 e 36 Caso seja passado como paracircmetro um nuacutemero base fora desta faixa o processamento eacute abortado com a ocorrecircncia de erro
[APWEXERR_0022] INVALID NTOC BASE [X] onde ltXgt foi a base passada como argumento
REDIRPAGE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
REDIRPAGE ( lt cUrl gt [ cTarget ] [ nTime ] ) --gt cScript
Paracircmetros
Argumento Tipo Descriccedilatildeo
cUrl Caracter Link para onde o script deve apontar o redirecionamento
cTarget Caracter Destino do redirecionamento Caso natildeo especificado o default eacute _self
nTime Numeacuterico Tempo (em segundos) de delay antes do redirecionamento ser executado
Retorno
Tipo Descriccedilatildeo
Caracter Script Html JavaScript que ao ser executado no Browser (client) chama a paacuteginaobjeto chamado no Link
Descriccedilatildeo
A funccedilatildeo RedirPage eacute utilizada quando desejamos devolver ao Browser um script que ao ser executado redirecionaraacute o Browser agrave abertura de um link passado como paracircmetro
RETSQLACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLACE ( lt cStrFind gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cStrFind Caracter cStrFind corresponde agrave sequecircncia de caracteres a ser procurada podendo conter caracteres maiuacutesculos e minuacutesculos com ou sem acentuaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter cStrQuery corresponde agrave string de busca a ser utilizada na query utilizando caracteres em minuacutesculo
Descriccedilatildeo
A funccedilatildeo RetSqlAce eacute utilizada para auxiliar de montagem de querys de busca de caracteres acentuados em bases de dados A funccedilatildeo automaticamente trata a string original removendo os acentos convertendo todos
os caracteres para minuacutesculas e trocando todas as vogais e cedilhas da string original por uma sequecircncia de caracteres acentuados em munuacutescilas para busca posicional
20
RETSQLCOND
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLCOND ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlCond() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga e o Makira Hypersite utilizando aliases de 3
caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar a filial atual ( xFilial ) de acordo com o modo do arquivo ( X2_MODO ) e para sempre desconsiderar
registros deletados
Observaccedilotildees
Esta funccedilatildeo foi mantida apenas por compatibilidade pois a ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do
banco para efeitos de performance Para ganharmos performance nas Querys devemos ao inveacutes de utilizar a funccedilatildeo RetSqlCond() utilizar como primeira clauacutesula WHERE o retorno da funccedilatildeo RetSqlFil() (
comparaccedilatildeo dos campos _FILIAL os primeiros do(s) iacutendice(s) do ERP ) que retorna apenas as comparaccedilotildees de Filial e por uacuteltimo a funccedilatildeo RetSqlDel que retorna o script para verificaccedilatildeo dos campos deletados (
que eacute o uacuteltimo campo das chaves de iacutendice do ERP utilizando TopConnect )
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlCond() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de
modo que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute
retorna os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLDEL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLDEL ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlDel() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo D_E_L_E_T_ da(s) tabela(s) passada(s) como paracircmetro
Observaccedilotildees
A ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do banco para efeitos de performance Para ganharmos performance
nas Querys devemos utilizar a funccedilatildeo RetSqlDEl() na montagem das ultimas consistecircncias da claacuteusula WHERE de uma Query
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlDel() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo
que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna
os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLFIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLFIL ( lt cAliases gt [ cCompFil ] ) --gt cSQlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
cCompFil Caracter
Atraveacutes de cCompFil eacute possiacutevel especificar uma Filial FIXA a ser comparada com os campos FILIAL do(s) alias(es) passados no paracircmetro cAliases
Caso natildeo informado os campos _FILIAL da(s) tabela(s) passadas como paracircmetro em cAliases seratildeo comparados com o retorno da funccedilatildeo xFilial() de
cada alias respectivamente
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo filial atual ( xFilial ) de acordo com o modo de abertura do arquivo no ERP ( X2_MODO )
Observaccedilatildeo
Devemos atentar ao fato que a funccedilatildeo RetSqlFil() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo que estes
alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna os
nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLTAB
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLTAB ( lt cAliasList gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliasList Caracter String contendo um ou mais alias separados por virgula a terem seus nomes fiacutesicos determinados
Retorno
Tipo Descriccedilatildeo
Caracter String contendo nomes fisicos e alias identificadores dos aliases recebidos como paracircmetro
Descriccedilatildeo
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
20
RETSQLCOND
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLCOND ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlCond() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga e o Makira Hypersite utilizando aliases de 3
caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar a filial atual ( xFilial ) de acordo com o modo do arquivo ( X2_MODO ) e para sempre desconsiderar
registros deletados
Observaccedilotildees
Esta funccedilatildeo foi mantida apenas por compatibilidade pois a ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do
banco para efeitos de performance Para ganharmos performance nas Querys devemos ao inveacutes de utilizar a funccedilatildeo RetSqlCond() utilizar como primeira clauacutesula WHERE o retorno da funccedilatildeo RetSqlFil() (
comparaccedilatildeo dos campos _FILIAL os primeiros do(s) iacutendice(s) do ERP ) que retorna apenas as comparaccedilotildees de Filial e por uacuteltimo a funccedilatildeo RetSqlDel que retorna o script para verificaccedilatildeo dos campos deletados (
que eacute o uacuteltimo campo das chaves de iacutendice do ERP utilizando TopConnect )
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlCond() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de
modo que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute
retorna os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLDEL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLDEL ( lt cAliases gt ) --gt cSqlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlDel() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo D_E_L_E_T_ da(s) tabela(s) passada(s) como paracircmetro
Observaccedilotildees
A ordem de comparaccedilatildeo de campos na claacuteusula WHERE de uma query deve procurar seguir a ordem dos campos dos indexadores do banco para efeitos de performance Para ganharmos performance
nas Querys devemos utilizar a funccedilatildeo RetSqlDEl() na montagem das ultimas consistecircncias da claacuteusula WHERE de uma Query
Devemos tambeacutem atentar ao fato que a funccedilatildeo RetSqlDel() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo
que estes alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna
os nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLFIL
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLFIL ( lt cAliases gt [ cCompFil ] ) --gt cSQlWhere
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliases Caracter Lista contendo um ou mais aliases separados por viacutergula a serem considerados para a montagem da expressatildeo de validaccedilatildeo
cCompFil Caracter
Atraveacutes de cCompFil eacute possiacutevel especificar uma Filial FIXA a ser comparada com os campos FILIAL do(s) alias(es) passados no paracircmetro cAliases
Caso natildeo informado os campos _FILIAL da(s) tabela(s) passadas como paracircmetro em cAliases seratildeo comparados com o retorno da funccedilatildeo xFilial() de
cada alias respectivamente
Retorno
Tipo Descriccedilatildeo
Caracter Corresponde agrave expressatildeo SQL para filtrar os dados atraveacutes da claacuteusula WHERE
Descriccedilatildeo
Utilizamos a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys para busca de dados em tabelas em conformidade com o padratildeo adotado pelo ERP Microsiga utilizando aliases de 3 caracteres
A funccedilatildeo retorna a partir dos aliases passados como paracircmetro as expressotildees de filtro de dados para considerar o campo filial atual ( xFilial ) de acordo com o modo de abertura do arquivo no ERP ( X2_MODO )
Observaccedilatildeo
Devemos atentar ao fato que a funccedilatildeo RetSqlFil() retorna os campos para a comparaccedilatildeo utilizando o prefixo da expressatildeo SQL com o Alias reduzido (3 letras) das tabelas informadas de modo que estes
alias devem ser especificados na claacuteusula FROM na abertura da Query quando utilizamos a funccedilatildeo RetSqlName para retornar o nome fiacutesico das Tabelas no Banco de Dados A funccedilatildeo RqtSqlTab() jaacute retorna os
nomes fiacutesicos das tabelas juntamente com os alias para este fim
RETSQLTAB
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
RETSQLTAB ( lt cAliasList gt ) --gt cStrQuery
Paracircmetros
Argumento Tipo Descriccedilatildeo
cAliasList Caracter String contendo um ou mais alias separados por virgula a terem seus nomes fiacutesicos determinados
Retorno
Tipo Descriccedilatildeo
Caracter String contendo nomes fisicos e alias identificadores dos aliases recebidos como paracircmetro
Descriccedilatildeo
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
21
Utilizamos a funccedilatildeo RetSqlTab() como auxiliar na montagem de querys quando trabalhamos com o padratildeo de Tabelas ERP Microsiga que utilizam nomenclarura de alias com 3 Caracteres
A funccedilatildeo recebe como paracircmetro um ou mais alias separados por viacutergula de tabelas que desejam ser utilizadas na query e retorna os nomes fisicos das tabelas e seus respectivos alias para serem inseridos na query
SEPARA
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
SEPARA ( lt cString gt lt cToken gt lt lEmpty gt ) --gt aTokens
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String com a sequecircncia de caracteres a ser parseada
cToken Caracter cToken corresponde agrave string a ser utilizada como separador para delimitar as informaccedilotildees
lEmpty Caracter lEmpty identifica se caso um intervalo vazio entre tokens deve ser retornado como um elemento do array Caso natildeo especificado o Default eacute T
Retorno
Tipo Descriccedilatildeo
Caracter Array de uma dimensatildeo contendo os elementos parseados pela rotina levando-se em conta o separador passado como parametro
Descriccedilatildeo
Atraveacutes da funcatildeo SEPARA() pode-se parsear uma string de elementos a partir de um determinado separador sendo retornado um Array com os elementos identificados na String
Exemplo
aInfo = Separa(124f) Resulta 124
aInfo = Separa(124t) Resulta 124
Observaccedilatildeo Para realizar a anaacutelise de uma string cujo delimitador tenha apenas 1 byte e as ocorrecircncias de dois separadores juntos sejam ignoradas na geraccedilatildeo do array a funccedilatildeo separa() utiliza a funccedilatildeo StrTokArr() funccedilatildeo escrita
em C no Protheus Server mais raacutepida para este processamento Apenas existe a necessidade de utilizarmos a funccedilatildeo Separa() caso as ocorrecircncias de dois separadores juntas devam ser consideradas no array de
resultado eou a string utilizada como separador possua mais que 1 byte de tamanho
UNESCAPE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UNESCAPE ( lt cString gt ) --gt cUnEscaped
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString eacute a string a ter os caracteres em formato escape convertidos
Retorno
Tipo Descriccedilatildeo
Caracter cUnescaped corresponde agrave string recebida como paracircmwetro com os caracteres originalmente em notaccedilatildeo escape ( HH ) convertidos para ASCII
Descriccedilatildeo
Realiza a operaccedilatildeo inversa agrave funccedilatildeo Escape() convertendo os caracteres especiais em notaccedilatildeo HH em caracteres ASCII
Observaccedilatildeo Apenas seratildeo convertidos os caracteres originalmente tratados pela funccedilatildeo Escape()
UPPERACE
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPPERACE ( lt cString gt ) --gt cStrUpper
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter String a ser convertida Pode conter tambeacutem acentos
Retorno
Tipo Descriccedilatildeo
Caracter Retorna a string original com todas as letras mauisculas inclusive as letras acentuadas
Descriccedilatildeo
A Funccedilatildeo UPPERACE converte todos os caracteres de uma String para ldquomaiusculordquo semelhante agrave funccedilatildeo UPPER() poreacutem considera e converte tambeacutem caracteres acentuados em OEM e ANSI
UPSTRTRAN
Revisatildeo 15122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
UPSTRTRAN ( lt cString gt lt cSearch gt [ cReplace ] [ nStart ] [ nCount ] ) --gt cNewString
Paracircmetros
Argumento Tipo Descriccedilatildeo
cString Caracter cString corresponde agrave sequecircncia de caracteres ou campo memo a ser pesquisado
cSearch Caracter Corresponde agrave sequecircncia de caracteres a ser procurada em cString
cReplace Caracter cReplace corresponde agrave sequecircncia de caracteres que deve substituir a string cSearch Caso natildeo seja especificado as ocorrecircncias de cSearch em cString
seratildeo substituiacutedas por uma string nula ()
nStart Numeacuterico nStart corresponde agraveo nuacuteimero sequencial da primeira ocorrecircncia de cSEarch em cString a ser substituiacuteda por cReplace Se este argumento for omitodo
o default eacute 1 ( um ) Caso seja passado um numero menor que 1 a funccedilatildeo retornaraacute uma string em branco ()
nCount Numeacuterico nCount corresponde agraveo nuacutemero maacuteximo de trocas que deveraacute ser realizada pela funccedilatildeo Caso este argumento natildeo seja especificado o default eacute
substituir todas as coorecircncias encontradas
Retorno
Tipo Descriccedilatildeo
Caracter A funccedilatildeo UPSTRTRAN retorna uma nova string com as ocorrecircncias especificadas de cSearch trocadas para cReplace conforme paracircmetrizaccedilatildeo
Descriccedilatildeo
Similar agrave funccedilatildeo Strtran() poreacutem realiza a busca da ocorrecircncia da string considerando letras maiuacutesculas e minuacutesculas A funccedilatildeo Strtran() eacute case-sensitive e a funccedilatildeo UpStrtran() natildeo
VALTOSQL
Revisatildeo 10122003
Abrangecircncia
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
22
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VALTOSQL ( lt xExpressao gt ) --gt cQryExpr
Paracircmetros
Argumento Tipo Descriccedilatildeo
xExpressao (Qualquer) Valor Advpl a ser convertido para utilizaccedilatildeo em Query Pode ser dos tipos C Caracter N Numeacuterico e D Data
Retorno
Tipo Descriccedilatildeo
Caracter Expressatildeo a ser acrescentada na Query
Descriccedilatildeo
A Funccedilatildeo VALTOSQL() eacute utilizada como auxiliar na montagem de Querys convertendo um conteuacutedo variaacutevel Advpl para a string correspondente a ser acrescentada na Query
Podemos passar como paracircmetro uma Expressatildeo do tipo ldquoCrdquo Caracter ldquoDrdquo Data ou ldquoNrdquo Numeacuterica
A expressatildeo Catacter seraacute colocada entre aspas simples sendo removidas as aspas simples contidas na mesma caso existam
Uma expressatildeo numeacuterica seraacute simplesmente convertida para caracter com aproximaccedilatildeo de 2 casas decimais
Uma expressatildeo Data seraacute convertida para formato ANSI ( AAAAMMDD ) entre aspas simples
VARINFO
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
VARINFO ( lt cId gt lt xVar gt [ nMargem ] [ lHtml ] [ lEcho ] ) --gt cVarInfo
Paracircmetros
Argumento Tipo Descriccedilatildeo
cId Caracter cId corresponde a um nome atribuiacutedo agrave variaacutevel para anaacutelise Internamente apenas eacute utilizado para prefixar o retorno das informaccedilotildees da VarInfo
xVar (Qualquer) Variaacutevel de qualquer tipo a ser examinada
nMargem Numeacuterico Corresponde agrave margem esquerda inicial de espaccedilos da String de retorno multiplicado por 5 Default = 0
lHtml Loacutegico Identifica se a String de retorno seraacute montada em formato Html (T Default ) ou ASCII (F)
lEcho Loacutegico Define se o Echo do retorno deve ser enviado ao console do Protheus Server caso habilitado ( Default = T )
Retorno
Tipo Descriccedilatildeo
Caracter String contendo o Dump da anaacutelise da variaacutevel Caso lHtml seja T retorna String em formato HTML senatildeo retorna string ASCII com quebras CRLF
Descriccedilatildeo
A Funccedilatildeo VARINFO() gera um texto ASCII eou Html com possibilidade de ECHO para o Console do Protheus Server ( caso habilitado ) com as informaccedilotildees sobre o conteuacutedo de uma variaacutevel de memoacuteria Advpl
de qualquer tipo
Cada tipo de variaacutevel possui um tratamento para conversatildeo em String
CodeBlock Eacute exibido apenas o tipo da mesma (B)
Array Todos os niacuteveis e elementos do mesmo satildeo explorados recursivamente
Objeto No caso de um Objeto de XML eou Web Services satildeo exploradas todas as suas propriedades recursivamente
(demais tipos) Satildeo convertidos para String atraveacutes da funccedilatildeo AllToChar
Observaccedilatildeo O segundo paracircmetro ( xVar ) deve ser uma variaacutevel Advpl que deve existir no escopo de variaacuteveis Caso a variaacutevel natildeo exista o processamento eacute abortado com a ocorrecircncia de erro Variablccedile does not
exist Para saber se uma determinada variaacutevel existe no escopo da execuccedilatildeo da funccedilatildeo atual deve ser utilizada a funccedilatildeo Advpl TYPE() onde passamos a variaacutevel a ter seu tipo determinado como string ( entre aspas )
WEBINFO
Revisatildeo 12122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
WEBINFO ( ) --gt cHtmlInfo
Retorno
Tipo Descriccedilatildeo
Caracter cHTMLInfo corresponde agrave string HTML contendo as informaccedilotildees da requisiccedilatildeo HTTP
Descriccedilatildeo
A funccedilatildeo WebInfo() foi desenvolvida para ser chamada atraveacutes de uma requisiccedilatildeo http via link apl ou apw e ela identifica todos os paracircmetros recebidos via uma requisiccedilatildeo http Paracircmetros via get post o header
HTTP os Cookies o content-type Legth Content-disposition SoapRaction (accedilatildeo SOAP para requisiccedilotildees de WebSErvices ) e OtherContent ( caso o conteuacutedo postado natildeo seja um texthtml )
Esta funccedilatildeo retorna uma paacutegina Html com todas estas informaccedilotildees e eacute utilizada no desenvolvimento de projetos quando temos a necessidade praacutetica de recuperarmos todas as informalccedilotildees provenientes de uma
requisiccedilatildeo HTTP Adicionalmente a funccedilatildeo WebInfo
Por exemplo com o Protheus configurado para atender requisiccedilotildees de links apl via HTTP chame a funccedilatildeo WebInfoapl atraveacutes do link
httplocalhostwebinfoaplparam1=testeampparam2=outroteste
Seraacute exibido no Web Browser uma tela semelhante agrave tela abaixo
__aCookies -gt ARRAY ( 0) []
__aPostParms -gt ARRAY ( 0) []
__nProcId -gt N ( 10) [1169539314]
__aProcParms -gt ARRAY ( 0) []
__httpPage -gt C ( 0) []
__HttpHeader -gt ARRAY ( 8) []
__HttpHeader[1] -gt C ( 25) [GET webinfoapl HTTP11]
__HttpHeader[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
__HttpHeader[3] -gt C ( 22) [Accept-Language pt-br]
__HttpHeader[4] -gt C ( 30) [Accept-Encoding gzip deflate]
__HttpHeader[5] -gt C ( 61) [If-Modified-Since Wed 10 Dec 2003 122429 GMT length=1003]
__HttpHeader[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
__HttpHeader[7] -gt C ( 13) [Host automan]
__HttpHeader[8] -gt C ( 22) [Connection Keep-Alive]
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
Caso a mesma requisiccedilatildeo seja realizada atraveacutes de link apw utilizando-se a tecnologia WEBEX deveraacute ser exibida uma tela semelhante agrave tela abaixo
aHeaders -gt ARRAY ( 9) []
aHeaders[1] -gt C ( 25) [GET webinfoapw HTTP11]
aHeaders[2] -gt C ( 172) [Accept imagegif imagex-xbitmap imagejpeg imagepjpeg applicationx-shockwave-flash applicationvndms-excel applicationvndms-powerpoint applicationmsword ]
aHeaders[3] -gt C ( 22) [Accept-Language pt-br]
aHeaders[4] -gt C ( 30) [Accept-Encoding gzip deflate]
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
23
aHeaders[5] -gt C ( 61) [If-Modified-Since Tue 09 Dec 2003 212303 GMT length=1480]
aHeaders[6] -gt C ( 81) [User-Agent Mozilla40 (compatible MSIE 60 Windows NT 51 NET CLR 103705)]
aHeaders[7] -gt C ( 21) [Host apwebexautoman]
aHeaders[8] -gt C ( 22) [Connection Keep-Alive]
aHeaders[9] -gt C ( 41) [Cookie SESSIONID=1071153371 AP5PROCID=0]
httpCookies -gt ARRAY ( 2) []
httpCookies[1] -gt C ( 9) [SESSIONID]
httpCookies[2] -gt C ( 9) [AP5PROCID]
SESSIONID -gt C ( 10) [1071153371]
AP5PROCID -gt C ( 1) [0]
httpPost -gt ARRAY ( 0) []
httpGet -gt ARRAY ( 0) []
HttpRCtType() -gt C ( 0) []
HttpRCtLen() -gt N ( 10) [ -1]
HttpRCtDisp() -gt C ( 0) []
SoapRAction() -gt C ( 0) []
HttpOtherContent() -gt C ( 0) []
[APWEXERR_0000] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0000] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo Causa Na Infra-Estrutura ApWebEx de acordo com o moacutedulo WEB em uso eacute chamada durante a inicializaccedilatildeo da Working Thread no ambiernte WEBEX uma funccedilatildeo especiacutefica [Y] para inicializaccedilatildeo
adicional de ambiente e a lib exige um retorno do tipo Booleano ( T ou F ) indicando se a inicializaccedilatildeo adicional foi executada com sucesso ou natildeo Caso este ponto de entrada retorne um valor cujo tipo natildeo seja
booleano esta mensagem de erro eacute apresentada no console do Server e acrescentada agraveo arquivo ERRORLOG
Soluccedilatildeo Verifique o fonte do ponto de entrada e assegure-se que o mesmo estaacute retornando um valor Advpl do tipo L Loacutegico
[APWEXERR_0001] INVALID APWEX CALL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0001] INVALID APWEX CALL Descriccedilatildeo causa Ao solicitarmos ao servidor Protheus o processamento de uma funccedilatildeo Advpl atraveacutes de um link apw utilizando a infra-estrutura ApWebex existem funccedilotildees especiacuteficas da linguagem que
natildeo podem ser executadas diretamente neste tipo de ambiente por tratarem-se de funccedilotildees exclusivas para processamentos iniciados atraveacutes de um Remote e funccedilotildees que natildeo permitem chamada direta via link Caso
alguma destas funccedilotildees seja chamada diretamente via URL esta ocorrecircncia de erro eacute reproduzida
[APWEXERR_0003] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0003] INVALID PROC RETURN TYPE [X] from [Y]
Descriccedilatildeo causa Quando uma working thread do ambiente ApWebEx recebe uma solicitaccedilatildeo de processamento atraveacutes de um link apw de acordo com o moacutedulo web utilizado pode ser chamada uma funccedilatildeo
intermediaacuteria [Y] antes do processamento da funccedilatildeo chamada no link ou depois do processamento concluiacutedo
A lib exige que estas funccedilotildees internediaacuterias retornem um conteuacutedo Advpl do tipo STRING Caso a funccedilatildeo [Y] chamada pela lib retorne um conteuacutedo Advpl diferente de STRING o tipo de variaacutevel retornado eacute
mostrado em [X] e a Working Thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo Verifque o coacutedigo-fonte da funccedilatildeo [Y] para certificar-se que seu retorno sempre seraacute um conteuacutedo Advpl do tipo STRING
[APWEXERR_0004] INVALID PROC RETURN TYPE [X]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0004] INVALID PROC RETURN TYPE [X] FUNCTION [YYY]
Descriccedilatildeo causa Quando solicitado agraveo servidor Protheus o processamento de uma funccedilatildeo atraveacutes de um link apw a funccedilatildeo executada sempre deveraacute retornar um conteuacutedo Advpl do tipo STRING Caso o
conteuacutedo retornado pelo processamento da funccedilatildeo [YYY] retorne um tipo [X] diferente de STRING a working thread eacute finalizada com esta ocorrecircncia de erro onde [YYY] indica a funccedilatildeo chamada atraveacutes do link
apw e [X] indica o tipo de conteuacutedo invaacutelido retornado
Soluccedilatildeo Verifique o fonte da funccedilatildeo [YYY] e certifique-se que a funccedilatildeo sempre retorne um conteuacutedo do tipo STRING
[APWEXERR_0005] Function XXX requires APWEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0005] Function XXX requires APWEBEX Routines Descriccedilatildeo causa Ao desenvolvermos uma aplicaccedilatildeo para utilziar a infra-estrutura ApWebEx utilizando o include apwebexch e os comandos WEB EXTENDED INIT END devemos nos assegurar de estarmos
executando esta funccedilatildeo em um ambiente de working threads configurados com o tipo WEBEX utilizando as funccedilotildees da infra-estrutura ApWebEx ( StartWebex ConnectWebEx ) para inicializaccedilatildeo e
processamento da requisiccedilatildeo via link apw
Se uma funccedilatildeo [XXX] escrita para ser chamada exclusivamente neste tipo de ambinete seja chamada diretamente via Protheus Remote ou outro tipo de processamento que natildeo seja uma working thread inicializada
pelas funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo eacute abortada com esta ocorrecircncia de erro Isto tambeacutem consistem em uma proteccedilatildeo para que uma funccedilatildeo projetada para ser executada em um tipo de ambiente (
working threads ApWebEx ) natildeo seja erroneamente executada em outro ambiente
Soluccedilatildeo Verifique se a funccedilatildeo chamada realmente estaacute sendo executada no ambiente apropriado
[APWEXERR_0006] START Function XXX Invalid Ret
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0006] START Function XXX Invalid Return Type [Y] Descriccedilatildeo causa Quando eacute utilizado o comando WEB EXTENDED INIT especificando uma funccedilatildeo [XXX] de preacute-validaccedilatildeo de execuccedilatildeo atraveacutes da claacuteusula START a funccedilatildeo especificada deveraacute retornar um
conteuacutedo do tipo STRING Caso a funccedilatildeo [XXX] retorne um conteuacutedo natildeo vazio de tipo [Y] diferente de STRING o processamento da working thread eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique o fonte da funccedilatildeo [XXX] e assegure-se que a execuccedilatildeo desta retorne um conteuacutedo do tipo STRING
[APWEXERR_0007] APH page [XXX] not found in RPO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0007] APH page [XXX] not found in RPO Descriccedilatildeo causa Ao utilizarmos a funccedilatildeo ExecInPage() no desenvolvimento de aplicaccedilotildees utilizando as funccedilotildees de infra-estrutura ApWebex a mesma possui tratamento automaacutetico para buscar primeiramente por
uma paacutegina AHU compilada no repositoacuterio de objetos do ambiente Caso natildeo seja encontrado uma paacutegina ahu a funccedilatildeo procura por uma paacutegina aph Se nenhuma paacutegina com o nome especificado natildeo for encontrada
o processamento eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo que originou a chamada da ExecInPage() passou o nome do APH AHU de forma correta e se a paacutegina chamada estaacute realmente presente eou foi compilada no repositoacuterio do projeto
em questatildeo
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
24
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0008] OPEN QUERY ERROR NO CONNECTION Descriccedilatildeo causa Ao utilizarmos o comando OPEN QUERY caso natildeo exista uma conexatildeo ativa com o TOPConnect o processamento em execuccedilatildeo eacute abortado com esta ocorrecircncia de erro
Soluccedilatildeo Certifique-se de que a chamada deste comando estaacute sendo realizada atraveacutes de uma working thread que possua uma conexatildeo ativa com o TOPConnect
[APWEXERR_0009] RetSqlCond failed to read X2_MODO
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0009] Failed to read X2_MODO Alias [XXX] Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo RetSqlFil() como auxiliar na montagem de querys a mesma tenta determinar se o(s) alia(s) utilizado(s) na Query estatildeo configurados no ambiente ERP atual no SX2 em
modo C Compartilhado ou E Exclusivo Caso o alias [XXX] natildeo seja encontrado na tabela SX2 ou a tabela SX2 natildeo esteja aberta no momento da execuccedilatildeo desta natildeo eacute possiacutevel identificar o modo de acesso do alias
especificado e a execuccedilatildeo eacute encerrada com esta ocorrecircncia de erro
Soluccedilatildeo Verifique se a funccedilatildeo RetSqlFil() eou RetSqlCond() estaacute recebendo o(s) alia(s) corretos todos em letras maiuacutesculas caso especificados mais de um alias todos estejam separados por viacutergulas e que a
tabela SX2 do ERP esteja aberta para a correta identificaccedilatildeo dos tratamentos de FILIAL para a montagem da condiccedilatildeo para Query
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Revisatildeo 13042004
[APWEXERR_0010] ERP FINAL ROUTINE CALLED
Descriccedilatildeo causa Quando executamos uma funccedilatildeo em uma working thread inicializada com as funccedilotildees de infra-estrutura ApWebEx a funccedilatildeo final() utilizada internamente pelas funccedilotildees de infra-estrutura do ERP
Microsiga possui neste ambiente um tratamento diferenciado Caso ela seja executada a working thread eacute finalizada com esta ocorrecircncia de erro
Soluccedilatildeo A funccedilatildeo final() natildeo deve ser utilizada como um recurso de finalizaccedilatildeo de aplicaccedilatildeo WEB poreacutem ela eacute utilizada internamente por funccedilotildees da infra-estrutura ERP no caso de uma ocorrecircncia fatal que impeccedila
um determinado processamento e ganhou esta proteccedilatildeo na Lib ApWebEx para permitir o desenvolvimento de aplicaccedilotildees integradas WEB ERP
Caso reproduzida uma ocorrecircncia de erro desta natureza verifique nos detalhes do erro qual funccedilatildeo que estava em execuccedilatildeo e qual o motivo da finalizaccedilatildeo da working thread Este motivo estaacute especificado no campo
Erp Message mostrado nos detalhes da ocorrecircncia de erro
[APWEXERR_0011] Argument 0 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0011] Argument 0 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cInfo foi especificado Verifique o coacutedigo-fonte e corriga a chamada da funccedilatildeo
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0012] Argument 0 Error Expected C-gtX
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cTitle foi especificado com um tipo [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija o paracircmetro passado para a funccedilatildeo
[APWEXERR_0013] Argument 1 Error Parameter
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0013] Argument 1 Error Parameter required
Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo natildeo foi especificado ou estaacute vazio poreacutem o paracircmetro cTitle foi informado Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0014] Argument 1 Error Expected C-gtX
Revisatildeo 13042004
[APWEXERR_0014] Argument 1 Error Expected C-gtX Descriccedilatildeo causa Quando eacute utilizada a funccedilatildeo ApWExAddErr(cTitlecInfo) para informar agrave rotina de tratamento de erro da infra-estrutura ApWebEx uma informaccedilatildeo adicional a ser acrescentada no LOG de erro
os paracircmetros cTitle e cInfoquando especificados devem ser ser ambos preenchidos e devem ser do tipo STRING
Soluccedilatildeo Esta ocorrecircncia de erro informa que o paracircmetro cInfo foi especificado com um tipo de dado [X] que natildeo eacute STRING Verifique o coacutedigo-fonte e corrija a chamada desta funccedilatildeo
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0020] INVALID JOB [XXX] TYPE [YYY] Descriccedilatildeo causa Esta ocorrecircncia de erro indica que as configuraccedilotildees do Job [XXX] de working threads para utilizaccedilatildeo no ambiente ApWebEx estaacute identificado com um TYPE [XXX] invaacutelido
Durante a inicializaccedilatildeo de uma working thread eacute verificado o tipo do Job configurado no arquivo de configuraccedilatildeo Apenas satildeo vaacutelidos os valores WEB eou WEBEX de acordo com o moacutedulo web em uso Caso a
configuraccedilatildeo especifique um TYPE diferente de WEB ou WEBEX a configuraccedilatildeo natildeo eacute vaacutelida e a working thread eacute abortada antes de estar disponiacutevel para atender agrave requisiccedilotildees de links apw gerando uma ocorrecircncia
de erro no console do servidor Protheus tambeacutem gravada no arquivo ERRORLOG
Soluccedilatildeo Para solucionar esta ocorrecircncia basta verificar a configuraccedilatildeo do Job [XXX] utilizado para inicializar as working threads e especificar um tipo adequado ( WEB ou WEBEX ) de acordo com o moacutedulo em
uso
[APWEXERR_0021] UNABLE TO GET JOB NAME
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0021] UNABLE TO GET JOB NAME
Descriccedilatildeo causa Esta ocorrecircncia de erro indica que o processo atual em execuccedilatildeo natildeo foi originado pela configuraccedilatildeo de um processo WEB ou WEBEX ou a funccedilatildeo de inicializaccedilatildeo de ambiente STARTWEBEX
natildeo foi chamada atraveacutes de um evento ONSTART de JOB como por exemplo um AP Remote
Soluccedilatildeo Caso esta ocorrecircncia seja reproduzida cerifique-se que a funccedilatildeo de inicializaccedilatildeo das working threads ( STARTWEBEX ) esteja sendo chamada atraveacutes de um processo configurado com TYPE=WEB ou
WEBEX de acordo com o moacutedulo web em uso
[APWEXERR_0022] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
25
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0022] ltStart Connectgt Function [X] of Module [Y] not found in Rpo
Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo ou conexatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de objetos do
ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0023] UNSUPPORTED BREAK CONTROL
Descriccedilatildeo causa Ao utilizar as funccedilotildees de Infra-Estrutura APWEBEX quando da chamada de uma funccedilatildeo atraveacute de Link apw desde a chamada original ateacute a passagem pelos pontos de preacute e poacutes-validaccedilatildeo de
processamento a rotina de tratamento de erro habilitada eacute de controle interno e exclusivo da Infra-Estrutura ApWebEx
Caso o comando BREAK seja chamado em algum destes pontos a execuccedilatildeo eacute abortada e na rotina de tratamento de execuccedilatildeo natildeo haacute o registro de controle de erro de modo que a working thread eacute abortada com esta
ocorrecircncia de erro
Soluccedilatildeo Certifique-se que no coacutediugo fonte da aplicaccedilatildeo natildeo seja utilizado o comando BREAK
OBSERVACcedilAtildeO Como esta ocorrecircncia eacute tratada em um ponto de retorno interno o ponto de entrada WEBEXERROR natildeo eacute executado sendo retornada ao usuaacuterio a mensagem padratildeo de Erro
[APWEXERR_0024] ltTgt Function [X] of Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0024] ltStart Connect Finish gt Function [X] of Module [Y] not found in Rpo Descriccedilatildeo causa Esta ocorrecircncia de erro eacute reproduzida quando ao configurar um moacutedulo web [Y] a funccedilatildeo [X] de inicializaccedilatildeo conexatildeo ou finalizaccedilatildeo referente ao moacutedulo natildeo foi encontrada no repositoacuterio de
objetos do ambiente em uso pela aplicaccedilatildeo web
Soluccedilatildeo Certifique-se que o repositoacuterio em uso atualmente possui as funccedilotildees pertinentes agraveo modulo configurado
[APWEXERR_0025] Unknow SIGAWEB Module [Y]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0025] Unknow SIGAWEB Module [Y] Descriccedilatildeo causa Quando da configuraccedilatildeo de um moacutedulo web para os tratamentos internos das funccedilotildees de infra-estrutura ApWebEx devemos especificar uma sigla de um moacutedulo Web vaacutelido e tratado pela lib de
infra-esturtura Os moacutedulos atualmente implementados na lib satildeo
DW - Data WareHouse
BSC - Balanced ScoreCard
MAK - Modulo WEBEX Makira
GE - Gestatildeo Educacional
GPR - Gestatildeo de Pesquisa e Resultado
TCF - Terminal do Funcionario ( RH ONLINE )
PP - Portal PRotheus ( WebServices )
SAV - Sala de Aprendizagem Virtual
GAC - Gestatildeo de Acervos
WPS - WebPrint amp WebSpool
Caso natildeo seja fornecida uma sigla vaacutelida na chave SIGAWEB na seccedilatildeo de configuraccedilatildeo das working threads as mesmas natildeo entraratildeo no ar e seratildeo abortadas com esta ocorrecircncia de erro
Soluccedilatildeo Verifique a chave de configuraccedilatildeo SIGAWEB e preencha-a com uma sigla de moacutedulo vaacutelida para a versatildeo de repositoacuterio ambiente em uso
[APWEXERR_0026] Web Services Test POST ERROR
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811
[APWEXERR_0026] Web Services Test POST ERROR
Descriccedilatildeo causa Quando utilizamos a interface de testes de web services client da ferramenta WebAdmin caso ocorra uma falha estrutural no serviccedilo Client ou uma impossibilidade de recuperar todos os dados
postados no fomulaacuterio de testes o processamento eacute interrompido com esta ocorrecircncia de erro
[APWEXERR_0027] INVALID NTOC BASE [NNN]
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0027] INVALID NTOC BASE [NNN] Descriccedilatildeo causa Ao utilizar a funccedilatildeo ntoc() deve-se atentar ao limite de base numeacuterica para conversatildeo que pode ser um nuacutemero entre 2 e 36 Caso a base passada como paracircmetro para a funccedilatildeo ntoc() esteja fora
destes limites o processamento eacute abortado com a ocorrecircncia acima informando em NNN a base utilizada
Soluccedilatildeo Verifique a chamada da funccedilatildeo ntoc() no fonte e certifique-se que estaacute sendo informado um nuacutemero entre 2 e 36
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0028] MODULE [Y] REQUIRES JOB TYPE=WEBEX Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEBEX poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEB
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB
Revisatildeo 13042004
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
[APWEXERR_0029] MODULE [Y] REQUIRES JOB TYPE=WEB Descriccedilatildeo causa Esta ocorrecircncia de erro informa que a configuraccedilatildeo de working threads utilizada para este moacutedulo web natildeo possui o tipo adequado configurado O Moacutedulo [Y] utilizado requer um job para working
threads configurado com TYPE=WEB poreacutem esta configuraccedilatildeo estaacute atualmente configurada como WEBEX
Soluccedilatildeo Verifique a configuraccedilatildeo das working threads deste moacutedulo web e certifique-se que a configuraccedilatildeo TYPE estaacute setada para WEB
[APWEXERR_0030] NO WEB LICENCES AVAILABLE (
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
26
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0030] NO WEB LICENCES AVAILABLE Descriccedilatildeo causa Esta ocorrecircncia de erro indica que natildeo haacute mais licenccedilas Protheus i disponiacuteveis para a utilizaccedilatildeo da aplicaccedilatildeo Web Adicionalmente agrave esta ocorrecircncia eacute informado adicionalmente a informaccedilatildeo
WEB LICENSE STATUS [NNNN] onde nnnn indica o coacutedigo de erro do HardLock utilizado para controle de licenccedilas
Soluccedilatildeo Verifique na lista completa de status de retorno do HarkLock disponiacutevel em (pendente) para certificar-se da origem desta ocorrecircncia e entatildeo tomar uma accedilatildeo corretiva
[APWEXERR_0031] WARNING WEB LICENSES WILL EXP
Revisatildeo 13042004
Abrangecircncia
Versatildeo 811 LIB WEBEX
[APWEXERR_0031] WARNING WEB LICENSES WILL EXPIRES
Web Licenses will expires in NN day(s)
Descriccedilatildeo causa Esta ocorrecircncia consiste em uma advertecircncia registrada no arquivo errorlog do ambiente em uso pela aplicaccedilatildeo Web registrada uma vez ao dia a partir do instante que faltam apenas 10 dias ou
menos para que as licenccedilas web ( Protheus i ) da aplicaccedilatildeo expirem O nuacutemero de dias que restam para as licenccedilas vencerem eacute especificado adicionalmente em [NN]
Soluccedilatildeo Providencie a atualizaccedilatildeo das licenccedilas Protheus i da aplicaccedilatildeo web junto agrave Microsiga
Pontos de Entrada - APWEBEX
Revisatildeo 30042004
Abrangecircncia
Versatildeo 811
Quando da utilizaccedilatildeo da infra-estrutura APWEBEX especificamente o moacutedulo MAK ( Makira ) satildeo disponibilizados os pontos de entrada relacionados neste toacutepico para permitir customizar e interceptar os eventos
de Inicializaccedilatildeo da Thread ( U_StartWebEx ) atendimento a requisiccedilotildees de links apw antes de processar a funccedilatildeo principal ( U_ConnectWebEx ) atendimento a requisiccedilotildees de links apw apoacutes processada a funccedilatildeo
principal ( U_ResetWebEx ) finalizaccedilatildeo da Thread ( U_FinishWebEx ) finalizaccedilatildeo de session de usuaacuterio por Time-out ( U_EndSession ) e customizaccedilatildeo da mensagem de erro HTML quando da ocorrecircncia de algum
erro fatal na aplicaccedilatildeo ( U_WEBEXERROR )
Quando utilizada a infra-estrutura APWEBEX para um moacutedulo do padratildeo estes pontos de entrada natildeo tem efeito Fica a criteacuterio de cada moacutedulo a disponibilizaccedilatildeo de pontos de entrada para interceptar estes eventos
Para saber quais pontos foram implementados para um moacutedulo web do padratildeo deve ser consultada a documentaccedilatildeo do moacutedulo correspondente
01 STARTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
01 STARTWEBEX ( [ NIL ] ) --gt lSucess
Paracircmetros
Argumento Tipo Descriccedilatildeo
NIL (NULO) Este ponto de entrada natildeo recebe paracircmetros
Retorno
Tipo Descriccedilatildeo
Loacutegico lSucess corresponde agraveo status de montagem de ambiente Caso o ambiente tenha sido montado com sucesso o ponto de entrada deve retornar T caso contraacuterio F Uma vez
retornado F o Protheus iraacute eliminar esta Working Thread da memoacuteria
Descriccedilatildeo
Este ponto de entrada eacute executado na inicializaccedilatildeo de cada Working Thread quando utilizada a configuraccedilatildeo para a Lib APWEBEX
Atraveacutes dele devemos iniciar o ambiente necessaacuterio agraveo atendimento das requisiccedilotildees de processamento via Browser atraveacutesde links apw tais como a abertura de dicionaacuterios e conexatildeo com o Banco de Dados
Grupos Relacionados
Principal A Tecnologia Protheus Programaccedilatildeo Advpl para WEB Infra-Estrutura APWEBEX Pontos de Entrada
02 CONNECTWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
02 CONNECTWEBEX ( lt cFnLink gt ) --gt cHtmlVld
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLink Caracter Funccedilatildeo chamada atraveacutes do Link Por exemplo um link no browse chamando httplocalhostw_testeapwOpc=03 seria recebido neste paracircmetro a
string W_TESTE
Retorno
Tipo Descriccedilatildeo
Caracter Caso retornada uma string em branco a execuccedilatildeo da funccedilatildeo originalmente chamada no link apw prossegue normalmente Caso contraacuterio a string retornada eacute devolvida ao Browser
solicitante e a funccedilatildeo chamada atraveacutes do link natildeo eacute executada
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente antes do processamento de uma requisiccedilatildeo realizada atraveacutes de um browser para processamento de uma funccedilatildeo Advpl atraveacutes de um link apw permitindo realizar
uma preacute-validaccedilatildeo antes de cada processamento solicitado atraveacutes do Browser
03 RESETWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
03 RESETWEBEX ( lt cFnLick gt ) --gt cHtmlAdd
Paracircmetros
Argumento Tipo Descriccedilatildeo
cFnLick Caracter cFnLink corresponde agrave funccedilatildeo Advpl que foi chamada e processada imediatamente antes da chamada deste ponto de entrada
Retorno
Tipo Descriccedilatildeo
Caracter Este ponto de entrada DEVE retornar uma string podendo ser inclusive uma string vazia A String retornada seraacute acrescentada ao Codigo Html a ser retornado ao Browser
Descriccedilatildeo
Este ponto de entrada eacute executado imediatamente apoacutes o processamento de uma requisiccedilatildeo de processamento Advpl atraveacutes de um Web Browser utilizando as configuraccedilotildees e Lib APWEBEX
Ele permite que seja executado um processamento adicional apoacutes o processamento de cada requisiccedilatildeo apw e aida permite um retorno de html adicional ao browser
Vale a pena lembrar que este ponto natildeo seraacute executado em caso de erro fatal no ponto de entrada U_CONNECTWEBEX ou na execuccedilatildeo da funccedilatildeo principal chamada atraveacutes do Link
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
27
04 FINISHWEBEX
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
04 FINISHWEBEX ( ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
Retorno
Tipo Descriccedilatildeo
(NULO) O Retorno deste ponto de entrada natildeo eacute utilizado
Descriccedilatildeo
Este ponto de entrada eacute executado quando da finalizaccedilatildeo ( Fechamento ) de uma Working Thread APWEBEX Natildeo recebe paracircmetros e natildeo requer retorno Ele permite que seja executado um procedimento qualquer
no momento da saiacuteda de uma Working Thread seja por time-out ou por tempo total de permanecircncia no ar
05 ENDSESSION
Revisatildeo 10122003
Abrangecircncia
Versatildeo 710 Versatildeo 811 LIB WEBEX
Sintaxe
05 ENDSESSION ( lt cSessionId gt ) --gt NIL
Paracircmetros
Argumento Tipo Descriccedilatildeo
cSessionId Caracter cSessionId corresponde agrave string identificadora das sessions deste usuaacuterio
Retorno
Tipo Descriccedilatildeo
(NULO) O retorno deste ponto de entrada deve ser nulo
Descriccedilatildeo
Atraveacutes deste ponto de entrada podemos executar uma rotina Advpl quando da finalizaccedilatildeo das sessions de um usuaacuterio por time-out de inatividade O Retorno deste ponto de entrada natildeo eacute utilizado devendo ser nulo
(NIL)
Apenas devemos compilar este ponto de entrada no Projeto caso realmente exista a necessidade de ser executado um processamento especiacutefico relacionado agrave finalizaccedilatildeo das sessions de um usuaacuterio Vale a pena
ressaltar tambeacutem que este ponto de entrada apenas eacute chamado na finalizaccedilatildeo das sessions por tempo de inatividade Caso seja utilizada a funccedilatildeo httpfreesession() para limpar da memoacuteria as sessions do usuaacuterio atual em
uma Working Thread este ponto de entrada natildeo seraacute chamado
06 WEBEXERROR
Revisatildeo 16122003
Abrangecircncia
LIB WEBEX
Sintaxe
06 WEBEXERROR ( lt oErrorObj gt lt cErrorLog gt lt cErrorHtml gt ) --gt cMsgHtml
Paracircmetros
Argumento Tipo Descriccedilatildeo
oErrorObj Objeto Objeto do Erro Advpl
cErrorLog Caracter Mensagem ASCII que seraacute gravada no arquivo errorlog
cErrorHtml Caracter Mensagem Html original da rotina de tratamento de Erro
Retorno
Tipo Descriccedilatildeo
Caracter Retorno opcional Caso retornado NIL ou string vazia seraacute retornado ao usuario o html de erro gerado pela rotina de tratamento standard Caso o ponto de entrada retorne uma String
HTML ela seraacute mostrada ao usuaacuterio no ligar do Html gerado pela rotina de tratamento de erro
Descriccedilatildeo
Este ponto de entrada seraacute chamado no caso de uma ocorrecircncia de erro fatal Advpl durante a execuccedilatildeo de uma Working Thread em ambiente Lib APWEBEX permitindo a montagem de uma mensagem de erro
HTML customizada a ser devolvida agraveo usuaacuterio
Este ponto de entrada recebe como paracircmetros o objeto do erro a descriccedilatildeo ASCII completa do erro gravada no errorlog e o HTML default montado pela da rotina de tratamento de erro que seraacute devolvido ao
usuario Atraveacutes da utilizaccedilatildeo deste ponto de entrada eacute possiacutevel gerar um Html diferenciado conforme a necessidade para mostrar a ocorrecircncia de erro eou maiores instruccedilotildees ao usuaacuterio
OBSERVACcedilOtildeES
Independentemente do retorno deste ponto de entrada a Working Thread que apresentou ocorrencia de erro seraacute derrubada apos o retorno do Html para o Browser e o arquivo errorlog
seraacute gerado normalmente Caso este ponto de entrada retorne uma string em branco seraacute mostrado ao usuaacuterio a mensagem de erro Html default gerada pela rotina de tratamento de erro
Este ponto de entrada seraacute chamado apenas caso a ocorrecircncia de erro esteja relacionada com uma chamada de funccedilatildeo via link apw aplicando-se apenas agrave funccedilatildeo apw chamada e agraveos pontos
de entrada U_CONNECTWEBEX e U_RESETWEBEX Em caso de ocorrecircncias de erro no start da Thread (U_STARTWEBEX) na finalizaccedilatildeo da Thread ( U_FINISHWEBEX ) e na finalizaccedilatildeo de
sessions de usuaacuterio por time-out ( U_ENDSESSION ) o ponto de entrada U_WEBEXERROR natildeo seraacute chamado Recomenda-se fortemente que na montagem da funccedilatildeo deste ponto de entrada natildeo seja utilizado nenhum recurso Advpl que dependa de ambiente disco base de dados ou Session limitando-se apenas agrave
customizar uma mensagem de ocorrecircncia de erro ao usuaacuterio
Caso seja reproduzida alguma ocorrecircncia de erro neste ponto de entrada isto faraacute a aplicaccedilatildeo ( Protheus Server ) enviar ao Browser um Html gerado pela rotina de tratamento de erro default do Protheus
A HREF - Acircncoras e espaccedilos
Revisatildeo 11122003
Quando passamos paracircmetros de uma paacutegina para outra via query string (URL) devemos ter o cuidado de natildeo deixar espaccedilo(s) em branco entre paracircmetros na montagem da URL Quando utilizamos o Internet
Explorer os espaccedilos em branco satildeo convertidos () automativamente para a sequecircncia String 20 poreacutem quando utilizamos o Netscape quando colocamos um espaccedilo em branco em um paracircmetro o NetScape
IGNORA tudo o que vem apoacutes o primeiro espaccedilo em branco perdendo assim os demais paracircmetros
Consideremos o exemplo abaixo
lta href=webinfoapwpar1=123 amppar2=345gtLinkltagt
No Internet Explorer natildeo haveraacute problemas () pois os espaccedilos seratildeo convertidos No Netscape o paracircmetro par2 natildeo seraacute colocado na URL A forma correta deve ser
lta href=webinfoapwpar1=123202020amppar2=345gtLinkltagt
Quando a chamada eacute gerada dinamicamente devemos utilizar a funccedilatildeo escape() para converter caracteres reservados e espaccedilos da stringlist para a notaccedilatildeo Hexadecimal (HH) para serem enviados corretamente pela
URL
lta href=webinfoapwpar1=lt=Escape(cCodigo)gtamppar2=345gtLinkltagt
Observaccedilatildeo Vale a pena lembrar que a funccedilatildeo escape() deve ser aplicada apenas agraveos conteuacutedos da stringlist pois se por exemplo for convertido pela escape() o caracter separador de paracircmetros amp ( e Comercial )
este caractere seraacute interpretado como DADO e natildeo como separador comprometendo o funcionamento do link
Combo Select em Html Recuperando valores
Revisatildeo 11122003
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
28
Examinemos o exemplo abaixo onde criamos um formulaacuterio HTML com um Combo Box ( tag ltSELECTgt do HTML) de seleccedilatildeo uacutenica e queremos saber qual o valor que o usuaacuterio selecionou para por exemplo
validar uma escolha no Browse ( Client )
ltHTMLgtltBODYgt
ltform name=exemplo method=post action=w_wxxxaplgt
ltSELECT NAME=teste onChange=javascriptmuda()gt
ltOPTION VALUE=1gtValor 1
ltOPTION VALUE=2gtValor 2
ltOPTION VALUE=3gtValor 3
ltOPTION VALUE=4gtValor 4
ltOPTION VALUE=5gtValor 5
ltSELECTgt
ltformgt
ltBODYgtltHTMLgt
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
Mostra qual o usuario selecionou
alert(documentexemplotestevalue)
ltSCRIPTgt
No Internet Explorer este coacutedigo funciona perfeitamente Poreacutem o NetScape mosstraraacute o conteuacutedo como null pois ele natildeo atribui uma propriedade value a um combo partindo de uma seleccedilatildeo
Para que seja recuperado o valor do elemento selecionado utilizamos o coacutedigo abaixo compatiacutevel com ambos os Browsers
documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Note que utilizamos o array options do controle teste para obter o valor correto utilizando o iacutendice que estaacute selecionado A funccedilatildeo muda poderia ficar assim
ltSCRIPT LANGUAGE=JavaScriptgt
function muda()
var val_combo = documentexemplotesteoptions[documentexemplotesteselectedIndex]value
Mostra qual o usuario selecionou
alert(val_combo)
ltSCRIPTgt
Diferenccedilas entre os Navegadores IE e Konqueror
Revisatildeo 13042004
1 Atualizaccedilatildeo de frames com windowopen
Ocorrencia Para chamar uma nova paacutegina no IE cujo destino seraacute o frame atual ou paacutegina atual do Browser podemos usar a funccedilatildeo javascript windowopen( xxxapw _self ) No IE (Interbet Explorer) o link
chamado eacute aberto no mesmo frame de onde a instruccedilatildeo eacute chamada mas no Konqueror esta instruccedilatildeo abre uma nova janela com o nome _self
Soluccedilatildeo Utilize a instruccedilatildeo JavaScript windowlocation para atualizar o endereccedilo da janela atual ou frame especificado Por exemplo windowlocation=xxxapw
Estrutura de Frames em HTML
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Analisemos a estrutura de frames abaixo
ltHTMLgt
ltframeset framespacing=0 border=0 cols=100100 frameborder=0gt
ltframe name=fr_not scrolling=no border=0 marginwidth=8 marginheight=0 src=w_winf067aplgt
ltframe Name=fr_Area src= Marginwidth=0 Marginheight=0 Framespacing=0 Border=0 Frameborder=0 scrolling=autogt
ltnoframesgtSeu browser natildeo suporta framesltnoframesgt
ltframesetgt
ltHTMLgt
Dicas uacuteteis
Procurem sempre utilizar a TAG ltnoframesgt para mostrar uma mensagem de erro no Browse se o mesmo natildeo possuir o recurso de interpretaccedilatildeo de frames ( caso este de navegadores do IE 30 ou
inferiores e netscape 30 ou inferiores)
Sempre especifique TODOS os sources (src) de cada frame Caso seja necessaacuterio uma paacutegina em branco como um dos frames para criaccedilatildeo dinacircmica ou algo parecido utilize o source aboutblank
Caso um frame da estrutura natildeo tenha a tag src= preenchida o Netscape mostraraacute uma janela com a seguinte mensagem quando se entra na paacutegina de frames
The document contained no data
Try again later or contact the servers administrator
A tag ltbodygt natildeo eacute suportada na declaraccedilatildeo dos frames Jamais usem esta tag em uma estrutura de frames
Mostrando campos MEMO em Html
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Para visualizar o conteuacutedo de um campo MEMO em uma paacutegina HTML devemos realizar algumas conversotildees de caracteres para o efeito desejado Em HTML temos dois modos de interpretaccedilatildeo
1) Default -gt Interpretaccedilatildeo HTML os Caractetes CRLF ( chr(13) chr(10) ) natildeo satildeo considerados como pulo de linha de modo que as quebras de linha satildeo de acordo com o design aplicado eou o tamanho disponiacutevel
no browse para a visualizaccedilatildeo do dado
2) Preacute-formatado -gt Interpretaccedilatildeo semelhante agrave um arquivo ASCII utiliza um tipo de letra Regular Type mono-espaccedilada considerando os coacutedigos CRLF como quebra de linha independente do design aplicado
Definimos uma area a ser interpretada como texto preacute-formatado atraveacutes das tags ltpregt ltpregt
A soluccedilatildeo mais comum para a visualizaccedilatildeo de campos Memo ( inclusive foi a solucatildeo adotada aki no Banco de Conhecimento - DEM ) eacute a de trocar os coacutedigos CRLF pela tag ltbrgt para apenas realizar um pulo de
linha no fim do paraacutegrafo Apenas para textos de Exemplos de Coacutedigo ADVPL satildeo utilizadas as tag ltpregt ltpregt para que a quebra de linha seja unica e exclusivamente realizada no CRLF mesmo que o tamanho
da tela natildeo permita mostrar esta quebra ( caso este no qual a tela ou frame ganha uma barra de scroll no Web Browser )
Exemplo ( em arquivo aph )
lt=strtran( XXX-gtXXX_MEMO chr(13)+chr(10) ltbrgt )gt
Caso tenhamos tags interpretaacuteveis dentro do memo que natildeo devam ser interpretadas pelo browse mas sim constar como conteuacutedo do campo devemos utilizar a funcao HtmlNoTags dentro da expressatildeo
anteriormente montada
lt=strtran( HtmlNoTags(XXX-gtXXX_MEMO) chr(13)+chr(10) ltbrgt )gt
Se a funccedilatildeo HtmlNoTags receber como parametro o retorno da StrTran seratildeo mostrados na tela as tags ltbrgt que originalmente devem ser interpretadas pelo browse como quebras de linha
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
29
Refresh em Html JavaScript
Revisatildeo 15122003
Abrangecircncia
Versotildees Anteriores
Em Html para setar um refresh automatico da paacutegina em ltngt segundos utiliza-se uma etiqueta meta na seguinte sintaxe
ltmeta HTTP-EQUIV=REFRESH content=ltngt [ URL=lturlgt]gt
ltngt Tempo em segundos
[lturlgt] Endereco a ser carregado (opcional)
Em Javascript para setar a execuccedilatildeo de uma funccedilatildeo automaticamente em um intervalo de tempo podemos utilizar a funccedilatildeo setTimeOut()
Funccedilatildeo setTimeout(ltcFuncgtltnTimegt)
Ambiente JavaScript
Parametros
ltcFuncgt = Nome da funcao em Java a executar
ltnTimegt = intervalo de execucao (milisegundos)
Observaccedilatildeo Nas funccedilotildees de Infra-Estrutura APWEBEX foi criada a funccedilatildeo Advpl RedirPage() que monta o script de redirecionamento conforme os paracircmetros recebidos podendo ser especificado o tempo de
espera para o redirecionamento e um TARGET diferenciado para o redirecionamento
Funccedilotildees com ADVPL ASP
Revisatildeo 26072004
Abrangecircncia
Versatildeo 507 Versatildeo 508 Versatildeo 609 Versatildeo 710 Versatildeo 811
O coacutedigo abaixo representa o arquivo ms01APH que conteacutem a parte para Login
de um usuario
lthtmlgt
lth2 align=centergt Login lth2gt
lthrgt
ltform name=form1 method=post action=w_ms02apwgt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25gtltpgt
ltpgtSenha ltinput name=txt_Senha type=password id=txt_Senha size=3 maxlength=3gtltpgt
lthrgt
ltpgtltinput type=submit value=Okgtltpgt
ltformgt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms02APH que conteacutem a parte do formulaacuterio
lthtmlgt
ltheadgt
lttitlegtADVPL ASPlttitlegt
ltheadgt
ltscript language=javascriptgt
Codigo JavaScript no qual natildeo permite que o formulaacuterio seja enviado sem
que seus campos tenham sido preechidos
function envia()
var oFrm = documentforms[0]
if ( oFrmtxt_Nomevalue == || oFrmtxt_Prevalue == ||
oFrmtxt_Fonevalue == || oFrmtxt_Endvalue == )
alert( Preencha Todos Os Dados Do Formulaacuterio )
return
oFrmaction = w_ms03apw
oFrmsubmit()
ltscriptgt
ltbodygt
lth2 align=centergt Formulaacuteriolth2gt
lthrgt
ltpgtBem Vindo lt=HttpSession-gtUsuariogtltpgt
ltform name=form method=post action=gt
ltpgtNome ltinput name=txt_Nome type=text id=txt_Nome size=25 value=gtltpgt
ltpgtTelefone ltinput name=txt_Pre type=text id=txt_Pre size=3gt -
ltinput name=txt_Fone type=text id=txt_Fone size=10gtltpgt
ltpgtEndereccedilo ltinput name=txt_End type=text id=txt_End size=25gtltpgt
ltpgtltinput type=button value=Enviar onClick=envia()gtltpgt
ltformgt
lthrgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo ms03APH que conteacutem uma tabela que exibe os dados
preenchidos no formulaacuterio mais um contador do total de vezes que foi realizado esse formulaacuterio
ltHTMLgt
lttable width=200 border=1gt
lttrgt
lttd width=95gtNomelttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Nomegtlttdgt
lttrgt
lttrgt
lttd width=95gtTelefonelttdgt
lttd width=75gtlt=HttpPost-gttxt_Pre gtlttdgt
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
30
lttd width=75gtlt=HttpPost-gttxt_Fonegtlttdgt
lttrgt
lttrgt
lttdgtEndereccedilolttdgt
lttd colspan=2gtlt=HttpPost-gttxt_Endgtlttdgt
lttrgt
lttrgt
lttd width=95gtContadorlttdgt
lttd colspan=2gtlt=HttpSession-gtContadorgtlttdgt
lttrgt
lttablegt
ltPgt
ltinput name=Reset type=reset value=Voltar onClick=windowlocation = w_ms02apwgt
ltPgt
ltHTMLgt
O coacutedigo abaixo representa o arquivo ms01PRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
DEFINE ID Admin
DEFINE SENHA 123
web function ms01()
A funccedilatildeo eacute executada quando eacute chamada atraveacutes do browser
return h_ms01()
web function ms02()
Verifica se eacute a primeira vez q usuaacuterio faz login
conout( ID SENHA )
if empty( HttpSession-gtUsuario )
Verifica se os campos foram preenchidos
if empty( HttpPost-gttxt_Nome ) And empty( HttpPost-gttxt_Senha)
return Nome e Senha natildeo informados
endif
Verifica usuaacuterio e senha
if HttpPost-gttxt_Nome = ID
return Usuaacuterio Invaacutelido
endif
if HttpPost-gttxt_Senha = SENHA
return Senha Invaacutelida
endif
Seta o nome do usuario
HttpSession-gtUsuario = HttpPost-gttxt_Nome
endif
return h_ms02()
web function ms03()
Verifica se a Sesssion jaacute foi iniciada
if empty( HttpSession-gtContador )
HttpSession-gtContador = 1
caso tenha sido incrementa o contador
else
HttpSession-gtContador++
endif
return h_ms03()
Upload de arquivo via HTTP
Revisatildeo 05102004
Abrangecircncia
Versatildeo 710 Versatildeo 811
Este exemplo de ADVPL ASP mostra como realizar o upload de um arquivo via HTTP O coacutedigo abaixo representa o arquivo ms01APH que conteacutem um formulaacuterio para indicar o local do aquivo para upload
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltheadgt
ltbodygt
lttable width=500 border=1 align=center cellpadding=0 cellspacing=0gt
lttrgt
lttd width=28 align=rightgtPath do arquivo lttdgt
lttd width=2gt lttdgt
lttd width=70gtlt=httpPost-gttxtFilegtlttdgt
lttrgt
lttrgt
lttd align=rightgtTamanho lttdgt
lttdgt lttdgt
lttdgtlt=LengthFilegtlttdgt
lttrgt
lttablegt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadAPH que conteacutem um formulaacuterio para exibir alguns dados do aquivo enviado
A parte mais importante desse coacutedigo se refere a propriedade (enctype=multipartform-data) dentro da tag
essa propriedade garante que o arquivo seja enviado corretamente
lthtmlgt
ltheadgt
lttitlegtExemplo Uploadlttitlegt
ltscriptgt
function jUpFile()
if( documentformtxtFilevalue == )
alert( Informe o nome do arquivo clicando em Browse )
return
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento
31
documentformaction = w_upFileapw
documentformsubmit()
ltscriptgt
ltheadgt
ltbodygt
ltform name=form action= enctype=multipartform-data method=postgt
ltp align=centergt
ltfont face=Arial Helvetica sans-serif size=3gtltbgtExemplo de upload de arquivos em ADVPL ASPltbgtltfontgtltbrgt
ltbrgt
ltinput name=txtFile type=file id=txtFile size=50gt
ltbrgt
ltbrgt
ltinput name=btnSub type=button id=btnSub value=Subir arquivo onClick=jUpFile()gt
ltpgt
ltformgt
ltbodygt
lthtmlgt
O coacutedigo abaixo representa o arquivo uploadPRW que conteacutem as funccedilotildees escritas em ADVPL ASP
INCLUDE PROTHEUSCH
INCLUDE FILEIOCH
Web Function upFile()
Local nH = FOpen( httpPost-gttxtFile 0 + 64 )
Private LengthFile = 0
LengthFile = fSeek( nH 0 FS_END )
Return h_RespUpFile()
HTML
Revisatildeo 13042004
HTML abreviaccedilatildeo para HyperText Markup Language que significa Linguagem de Formataccedilatildeo de HyperTexto
HTML eacute a formataccedilatildeo padratildeo adotada para a publicaccedilatildeo de HyperTexto na Internet (World Wide Web) O HTML consiste em uma formataccedilatildeo natildeo-proprietaacuteria baseada no SGML ( Standard Generalized Markup
Language ) e pode ser criada e processada por um grande nuacutemero de ferramentas desde editores de texto-plano ( como o NotePad por exemplo) ateacute sofisticados softwares de autoria WYSIWYG (What You See Is
What You Get)
Basicamente o HTML utiliza-se dos marcadores lt e gt para estruturar e formatar texto Por exemplo
Letra normal ltbgtnegritoltbgt e ltugtsublinhado ltugt
A linha de texto acima representada em um Web Browser seria mostrada assim
Letra normal negrito e sublinhado
HTTP
Revisatildeo 13042004
HTTP eacute a abreviaccedilatildeo de Hyper Text Transfer Protocol que significa Protocolo de Transferecircncia de Hyper-Texto
O HTTP eacute um protocolo em niacutevel de aplicaccedilatildeo para distribuiccedilatildeo de informaccedilotildees Trata-se de um protocolo geneacuterico que pode ser utilizado para muitas outras aplicaccedilotildees aleacutem de transferecircncia de hypertexto como
nomear servidores e trocas de informaccedilotildees entre sistemas integrados utilizando-se suas extensotildees coacutedigos de erro meacutetodos de requisiccedilatildeo e cabeccedilalhos (Headers) Uma caracteriacutestica importante do HTTP eacute a tipagem e
normalizaccedilatildeo da representaccedilatildeo da informaccedilatildeo permitindo a construccedilatildeo de sistemas independente do modo pelo qual os dados estatildeo sendo transferidos
Threads e working threads
Revisatildeo 13042004
O que eacute uma Thread
A maioria dos programadores estaacute familiarizada com programas de execuccedilatildeo sequecircncial Vocecirc provavelmente jaacute deve ter escrito um programa que mostra Olaacute Mundo ou ordena uma lista de nomes ou calcula uma
lista de nuacutemeros primos Estes programas satildeo sequenciais e cada um deles tecircm um comeccedilo uma sequecircncia de execuccedilatildeo e um final Em qualquer momento da execuccedilatildeo do programa temos apenas um ponto de
execuccedilatildeo
Uma Thread eacute semelhante agraveo programa descrito acima tendo um comeccedilo meio e fim Poreacutem uma Thread em si natildeo eacute um programa pois ela natildeo se executa ela roda (com) o programa
Por definiccedilatildeo Uma Thread eacute o fluxo sequumlencial de controle uacutenico dentro de um programa
Natildeo haacute nada de novo ou especial sobre programas sequenciais executados em uma simples thread A grande sacada consiste no uso de Muacuteltiplas Threasds dentro de uma aplicaccedilatildeo todas em execuccedilatildeo simultacircnea
poreacutem cada uma realizando tarefas diferentes
De tal modo que por estarem realizando tatefas independenres cada thread possui o seu proacuteprio contexto de execuccedilatildeo alocaccedilatildeo de memoacuteria e controle de pilha de execuccedilatildeo (Stack) O coacutedigo em execuccedilatildeo em uma
Thread trabalha dentro de seu contexto especiacutefico de modo que vaacuterias outras documentaccedilotildees referem-se ao contexto de execuccedilatildeo como sendo um sinocircnimo de Thread
Working threads
Damos o nome de working thread quando satildeo iniciadas mais de uma thread independente na aplicaccedilatildeo e todas as threads iniciadas satildeo colocadas em modo de espera (idle) aguardando uma solicitaccedilatildeo de
processamento da aplicaccedilatildeo Mais de uma solicitaccedilatildeo pode ser realizada e o nuacutecleo da aplicaccedilatildeo encarrega-se de distribuir os processamentos entre as threads disponccediliveis Terminado o processamento de uma thread a
mesma retorna ao modo de espera estando pronta novamente para atender agrave uma nova solicitaccedilatildeo Este recurso possibilita um ganho significativo de performance por natildeo haver a necessidade de criar e finalizar uma
nova thread para cada solicitaccedilatildeo de processamento