web - programaçao advpl para web

31
1 Programação Advpl para WEB Revisão: 27/04/2004 Abrangência Versão 7.10 Versão 8.11 Este tópico engloba todo o conhecimento e informações necessárias para usufruirmos da tecnologia implementada na ferramenta Protheus e de sua Infra-Estrutura, para o desenvolvimento de aplicações orientadas à Internet. O objetivo desta seção é centralizar as informações pertinentes ao desenvolvimento de projetos WEB, em uma ferramenta que permita o acesso e atualizações destes dados de maneira rápida e dinâmica, além de mostrar uma boa parte do que é possível fazer utilizando-se dos recursos disponíveis na ferramenta Protheus. Para que seja possível compreender as funcionalidades e tecnologias envolvidas no processo de desenvolvimento de uma aplicação WEB, utilizando-se da ferramenta Protheus, é de fundamental importância que os tópicos deste grupo sejam lidos e assimilados, pois nos mesmos encontram-se as informações que servem de base para a compreensão e consequente melhor aproveitamento dos recursos disponíveis. Para se ter uma idéia superficial do poder do Protheus como servidor http, esta aplicação ( DEM - Documentação Eletrônica Microsiga ) foi escrita em Advpl-ASP, utilizando uma compilação do Server Protheus ISAPI , integrado com o IIS 5, utilizando um Banco de Dados SQL Server 2000 através do TopConnect 4, utilizando se de Working Threads Extended (WEBEX) e das funções de Infra-Estrutura da lib APWEBEX. 01. O Servidor Protheus como um servidor HTTP Revisão: 27/04/2004 Abrangência Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 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 requisições dos protocolos HTTP e/ou FTP, do mesmo modo que outros servidores conhecidos no mercado (por exemplo, o IIS Internet Information Server, da Microsoft (R) ou o Apache para Linux). Assim, basta ter o Protheus para poder criar sua própria Intranet num ambiente de rede local, ou publicar o endereço IP da máquina com o servidor Protheus na Internet e executar funções através de RPC ou simplesmente criar o seu próprio Web Site com páginas HTML estáticas ou dinâmicas. Serviço de HTTP O protocolo HTTP (Hyper Text Transfer Protocol) é o protocolo utilizado na comunicação entre um servidor e um Web Browser. É o protocolo utilizado para o envio e recebimento de páginas formatadas em padrões SGML (HTML,XML, etc). Este protocolo se baseia principalmente em dois comandos: GET e POST. O comando GET é utilizado para obter alguma informação do servidor HTTP e o POST para “postar” informações para o servidor. Mas adiante, será mais fácil compreender onde tais comandos são utilizados no servidor Protheus. Utilizando o servidor Protheus como um servidor HTTP, o mesmo poderá ser acessado através de um Web Browser como o Internet Explorer por exemplo, que receberá as páginas HTML enviadas de um diretório configurado no servidor. Adicionalmente ao envio e recebimento de páginas estáticas formatadas, pode-se utilizar a linguagem Advpl do Protheus para processar páginas mistas, que contém código Advpl e comandos HTML de formatação. Tais páginas serão processadas no servidor Protheus, e então enviadar para o Web Browser, que irá formatá-las de acordo com os comandos HTML contidos. Também é possível executar diretamente funções compiladas no repositório do Protheus, através de um request HTTP (por exemplo, através de um POST em um formulário em HTML, ou de um link, ou mesmo diretamente na linha de URL do Web Browser. O mesmo vale para qualquer outra aplicação que seja capaz de efetuar comandos GET ou POST utilizando o protocolo HTTP). Páginas Dinâmicas e Advpl ASP Quando é utilizado o servidor Protheus para desenvolvimento de aplicações Web, é possível lançar mão do recurso de criação de páginas dinâmicas, isto é, uma requisição HTTP realizada ào Server Protheus, devidamente configurado para atendê-la, dispara o processamento de uma função no Servidor, e esta função encarrega-se de devolver ào usuário uma página HTML com o resultado do processamento. Para viabilizar o desenvolvimento deste tipo de função, foi criado um tipo de arquivo especial no Protheus IDE, com a extensão .APH, onde é inserido um conteúdo Html a ser enviado ao Web Browser, e instruções Advpl que serão processadas no momento em que a página for solicitada ao servidor Protheus, sendo possível de forma prática 'mesclar' um conteúdo gerado por este processamento à uma página Html para ser retornado ào Web Browser. Nos tópicos abaixo relacionados, será visto em mais detalhes as configurações necessárias para atender à estas requisições, as características particulares de cada uma delas, e as funções de infra-estrutura criadas para auxiliar o desenvolvimento de aplicações Web. Além da criação de arquivos, foi disponibilizado no repositório padrão do Protheus as funções de infra-estrutura ApWebEx, desenvolvidas para permitir um melhor aproveitamento dos recursos disponibilizados pela ferramenta Protheus para o desenvolvimento de soluções Web. Estas funcionalidades são exploradas no tópico Infra-Estrutura ApWebEx. 02. Executando funções Advpl via HTTP Revisão: 28/04/2004 Abrangência Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versão 8.11 Princípio de Funcionamento do HTTP A utilização do protocolo HTTP não envolve o uso de uma conexão persistente entre o Web Browser e o Servidor HTTP : Isto significa que, ao ser solicitada uma página, imagem ou até o processamento de uma função, o Web Browser abre uma conexão com o Server HTTP, realiza a solicitação e fica com a conexão aberta, aguardando pelo retorno do Server. Quando o server já houver enviado os dados solicitados, a conexão é fechada . Processamento de Funções Para o retorno de páginas estáticas, imagens e demais arquivos via HTTP, o servidor identifica o que está sendo solicitado pelo Web Browser através da extensão do Link. Por exemplo, ao receber uma soilicitação da URL http://oservidor/htmls/imagem.gif , o Server HTTP sabe que deve procurar um arquivo chamado imagem.gif, 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 extensões de Link para permitir a execução de funções Advpl através de uma requisição HTTP : A extensão .APL e a extrensão .APW . Quando o servidor recebe uma requisição via HTTP, por exemplo da url http://oservidor/time.apl , e está corretamente configurado para atender à esta requisição, o Protheus Server realiza o processamento, e informa para o Web Browser solicitante que a string que será retornada deve ser interpretada pelo Web Browser como sendo um Script HTML . Características comuns do processamento de funções Advpl via HTTP Independente da extensão de link utilizada, existem características e pré-requisitos comuns ao funcionamento de ambas as requisições, que seguem abaixo : A função, seja Advpl ou uma função compilada no Repositório, deve obrigatoriamente ter um retorno do tipo String, pois o Web Browser solicitante será informado pelo Server Protheus que a string retornada deverá ser interpretada e mostrada pelo Browser como um HTML. Devido à origem da requisição não ter relação alguma com a interface Remote do Protheus, não é possível utilizar determinadas funções Advpl que foram escritas exclusivamente para esta interface, como por exemplo as funções MsgStop, Alert, e demais funções e objetos de Interface de Janelas. O que irá diferenciar uma função executada via link .apl e .apw será as etapas de execução das mesmas. Esta característica de funcionamento será melhor esclarecida após a leitura dos tópicos sobre desenvolvimento de funções .apl e desenvolvimento de funções .apw 03. Páginas dinâmicas - O Advpl ASP Revisão: 26/04/2004 Abrangência Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versão 8.11 Uma página ASP (Active Server Pages) é uma página HTML contendo código interpretável em uma linguagem compreensível ao servidor HTTP em uso. Por exemplo, o IIS da Microsoft utiliza o VBScript para criar suas páginas ASP, do mesmo modo que o Protheus utiliza o ADVPL. Uma página ASP é uma combinação de script HTML e código interpretável. No ADVPL ASP esse código é padrão xBase, portanto a preocupação maior daqueles que já conhecem e trabalham com o Protheus e desejam desenvolver páginas ativas para aplicações Web utilizando essa facilidade é conhecer HTML. Características do ADVPL ASP - Arquivos .APH Os arquivos ADVPL ASP têm a extensão padrão .APH. São arquivos texto e devem ser adicionados a um projeto no Protheus IDE e compilados da mesma maneira que os programas tradicionais. A diferença é que o Protheus Server identificará que se trata de um ADVPL ASP e executará uma espécie de tradutor (parser) antes que a compilação seja executada. Este parser irá transformar todo o arquivo em uma função única, que receberá os mesmos parâmetros das funções APL simples, como explicado anteriormente no Item 'Desenvolvendo Funções .APL', e retornará uma string. O desenvolvedor não precisa se preocupar em retornar HMTL algum, pois o APH também é um arquivo HTML. A função que foi gerada na compilação irá se encarregar de retornar o HTML contigo no arquivo, depois que o código foi processado. Um Arquivo APH gera no repositório de Objetos do Protheus uma função com o mesmo nome do arquivo , porém prefixada com H_ + nome_do_arquivo_aph Por se tornar uma função no momento da compilação, não é possível utilizar a cláusula FUNCTION para criar outras funções dentro de um arquivo APH. Caso exista essa necessidade, tais funções devem ser criadas em um arquivo PRW tradicional e chamadas de dentro do APH. A extensão APH para o nome dos arquivos é obrigatória. Qualquer outra extensão usada no nome do arquivo não será reconhecida e o parser do IDE não será executado durante a compilação. Foi criada também a extensão de arquivos .AHU ( Aph de Usuário ), que possui o mesmo tratamento de Parser do aruqivo APH , gerando uma função prefixada com L_ . A diferença é que a função gerada pelo AHU pode ser gerada sem a necessiade de autorização de compilação com permissão para substituir fontes microsiga , por tratar-se de um Aph de Usuário, qeuivalente à uma User Function . Assim como outros ASP´s, a diferenciação entre script HTML e código é efetuada através dos caracteres <% para indicação de abertura de código e %> para indicação do encerramento de código. Por exemplo, o HTML abaixo contém um pedaço de código ADVPL separado pelos delimitadores: <html><head><title>ADVPL ASP Demo</title></head> <body> <p>Bem vindo ao mundo do ADVPL ASP!</p> <% // Soma os 100 primeiros números Local i, nSoma := 0 For i := 1 To 100 NSoma += i

Upload: janur-mendonca

Post on 24-Jul-2015

272 views

Category:

Documents


12 download

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