Você está na página 1de 9
3102/2020 Protheus e AdvPL ASP —Parte Ot | Tudo em AdvPL Tudo em AdvPL Compartilhando experiéncias e conhecimento em analise, programagao e desenvolvimento. Protheus e AdvPL ASP — Parte 01 2, 12/11/2018 Jillio Wittwer AdvPLASP 5 HTTP, Internet, JOB, WebServices Introdugao Nos posts anteriores sobre © Protheus como servidor HTTP — Parte 01 (https://siga0984. wordpress.com/2018/11/11/o-protheus-como-servidor-http-parte-01/).e O Protheus como servidor HTTP = Parte 02 (hitpsi/siga0984.wordpress.com/2018/11/11/o-protheus-como- servidor-htty -parte-02/) , vimos como configurar o Protheus Application Server como servidor HTTP de paginas estaticas. Agora, vamos ver como fazer ele processar paginas dinamicas — 0 AdvPL ASP. E importante ler os posts anteriores para partir para o AdvPL ASP. AdvPL ASP ASP, acrdnimo para Active Server Pages, foi o primeiro tipo de script criado pela Microsoft para gerar contetido dinamico de paginas para Internet, onde o script é processado no servidor mediante a requisico do Browser, e a pagina HTML é gerada no servidor ao executar 0 script, e retornada ao Browser. O arquivo que contém o Script é composto por contetido HTML, e dentro dele separadores especiais delimitam as partes de cédigo / programa que sao executadas. © AdvPL ASP é uma forma similar ao ASP de criagao de paginas dinamicas proprietaria do Protheus Server. As duas diferengas basicas sio: O cédigo delimitado para execucao dentro da pagina é AdvPL, e uma pagina (ou arquivo) AdvPL ASP é compilado no repositério de objetos, sendo executado internamente como uma fungdo AdvPL, ao invés de ser interpretado no momento em que for solicitado. Isso inclusive nao “expée"o arquivo original na pasta de publicagées do HTTP. Isso mesmo, 0 arquivo contendo AdvPL ASP pode ficar em uma pasta nao publicada na WEB, como uma pasta de fontes do Projeto. Arquivo APH hitpslsiga0986,wordprass,con2018/"1/12iprotheus-e-advplasp-parte-01/ 19 3102/2020 Protheus e AdvPL ASP —Parte Ot | Tudo em AdvPL Um arquivo contendo AdvPL ASP deve possuir a extensao ”.aph”, para ele ser compilado diferenciadamente pelo IDE/TDS e pelo Application Server Protheus. Dentro dele, usamos as tags <% e %> para delimitar cédigo AdvPL que deve ser executado, e <%= para qualquer expresso AdvPL que deve ser acrescentada na pagina final a ser retornada ao Browser. Um arquivo chamado teste.aph, ao ser acrescentado em um projeto do AdvPL e compilado, vai virar dentro do repositério uma nova fungao, chamada H_TESTE() — Prefixo H_seguido do nome do arquivo. Portanto, aten¢do ao dar nomes para os arquivos APH, por hora eles néo devem ter mais que 8 letras no nome, devem sempre comecar com uma letra alfabética, e pode conter a partir de entao apenas letras e ntimeros — a mesma regra usada para nomear funcdes do AdvPL. A fungio criada a partir da compilagao do arquivo APH basicamente cria um retorno em uma variavel string, declarada internamente na funcao, e concatena dentro tela todo 0 contetido estatico e dinamico gerado durante a chamada da funcio. Isto também significa que, eu posso usar um arquivo APH nao apenas para HTML, mas para qualquer outra geracao de string dinamica, mas isso veremos mais para a frente. Por hora, apenas crie um arquivo index.aph no seu ambiente, com o seguinte contetido:

01d4 Mundo AdvPL ASP

Agora so <%=Time()%>

Configuragao do Protheus Server para AdvPL ASP Legal, vamos lembrar como configuramos o nosso site esttico no Protheus Server como HTTP: [http] enabli port=80 path=c: \Protheus12L6\Http defaultpage=index. html Com esta configurag3o — sem configurar hosts ou pastas virtuais — qualquer requisigao que chegar na porta HTTP (80) do Protheus Server sera atendida considerando o path raid de publicagéo WEB a partir da pasta C:\Protheus12LG\Http Agora, vamos acrescentar uma chave a mais na segdo http, e uma nova seco no appserver.ini, para le ficar assim: hitpslsiga0986,wordprass,con2018/"1/12iprotheus-e-advplasp-parte-01/ 219 3102/2020 Protheus e AdvPL ASP —Parte Ot | Tudo em AdvPL [http] enable: por path=c:\Protheus12LG\Http defaultpags ndex. html responsejob=webaspthreads [webaspthreads] type=webex environment=envlight instances=1,2 onstart=U_ASPInit onconnect=U_ASPConn Muito bem, vamos por partes: webaspthreads foi o nome que eu dei para a seco de configuracao de um POOL de processos AdvPL — também chamado de Working Threads — do tipo WEBEX — para processamento de AdvPL ASP — que vai atender a todas as requisigdes de AdvPL ASP que o HTTP Server receber. Eu poderia chamar ela de outros nomes, como poolwebjob01 ou o que lhe for conveniente, apenas nao pode ser usado nenhum nome de configuracao reservada ou outro que conflite com outra seco ja existente no arquivo de configuragio. No meu servidor, meu environment de compilagao e execucao de cédigo AdvPL chama-se “envlight’, Ao usar esta configuracio no seu Protheus Server, use o nome do seu environment. A configuracao de instances indica qual ¢ 0 nimero de processos AdvPL minimo e maximo que serao gerenciados internamente pelo POOL de atendimento de requisigGes de paginas dinamicas do AdvPL ASP. Por hora, minimo de 1 e maximo de 2 processos esté étimo. As configuracées onstart e onconnect especificadas esto apontando para duas fungées que nds vamos criar, pois elas serao chamadas internamente pelo Protheus em momentos distintos, para compor o pool de processos AdvPL para atender a requisigSes de paginas AdvPL ASP. Pra nao deixar pra depois, crie um arquivo no seu projeto de testes, chamado por exemplo AspThreads.prw, ¢ dentro dele as seguintes funcées: hitpslsiga0986,wordprass,con2018/"1/12iprotheus-e-advplasp-parte-01/ 39 3102/2020 Protheus e AdvPL ASP —Parte Ot | Tudo em AdvPL #include ‘protheus.ch" User Function ASPInit() conout("ASPINIT - Iniciando Thread Advpl ASP ["+cValToChar(ThreadID())+"]") SET DATE BRITISH SET CENTURY ON Return .T. USER Function ASPConn() Local cReturn := '' Local cAspPage Local nTimer cAspPage := HTTPHEADIN->MAIN If lempty(cAspPage) nTimer := seconds() cAspPage := LOWER(cAspPage) conout("ASPCONN - Thread Advpl ASP ["+cValToChar(ThreadID())+"] "Processando ["+cAspPage+"]") do case case cAspPage == 'index' // Execura a pégina INDEX.APH compilada no RPO // & String retornada deve retornar ao Browser cReturn := H_INDEX() otherwise // retorna HTML para informar // a condi¢&o de pagina desconhecida cReturn := “chtml>
"+5 Pagina AdvPL ASP nao encontrada. " Endcase nTimer := seconds() - nTimer conout("ASPCONN - Thread Advpl ASP ["+cValToChar(ThreadID())+"] "+3 “Processamento realizado em "+ alltrim(str(nTimer,8,3))+ "s. Endif Return cReturn Fazendo a requisigao AdvPL ASP Uma vez tudo configurado corretamente, ¢ os fontes index.aph e o aspthreads.prw compilados no repositério do ambiente configurado, vamos 8 ultima informacao: Como chamar a pagina AdvPL ASP pelo Browser. A extensio “.apw” foi reservada para indicar ao servidor HTTP do Protheus, que ele esta recebendo uma requisigao de processamento de AdvPL ASP. Logo, abra o browse no seu equipamento, ¢ deve ver esta mensagem no seu Browser. hitpslsiga0986,wordprass,con2018/"1/12iprotheus-e-advplasp-parte-01/ 49 osi02/2020, Protheus e AdvPL ASP —Parte Of | Tudo em AdvPL D) locahosvincex apie x + - Oo x € SF @ bocalhost/index.apw % a Olé Mundo AdvPL ASP Agora silo 23:06:40 E, no log de console do Protheus Server, vocé deve ver as seguintes mensagens: ASPINIT - Iniciando Thread Advpl ASP [1560] ASPCONN - Thread Advpl ASP [1560] Processando [index] ASPCONN - Thread Advpl ASP [1560] Processamento realizado em 0.0025. Resumo para fixagao APH = Extensao de arquivo AdvPL ASP, que ao ser compilado e acrescentado ao projeto, gera no repositério de objetos do ambiente uma fungao, chamada H_, para ser usada para compor paginas de HTML dinamico. O arquivo APH nao deve ser colocado dentro da pasta raiz. de publicagdes WEB — como ele é compilado, ele ¢ um arquivo que faz parte de um Projeto AdvPL. Seu contetido sera gerado mediante requisicao de processamento de pagina dinamica. APW = Extensao de LINK para ser usado no Browser, para pedir ao servidor Protheus HTTP uma solicitagao de uma pagina dinamica. Uma solicitagao através desse link sera redirecionada a um POOL de threads pré-configurado dentro do Protheus Server, chamando a fungao configurada no parametro ONCONNECT do POOL. Working Threads do tipo WEBEX = Pool de threads de trabalho, criado para atender a requisigdes de links de paginas dindmicas AdvPL ASP (url com terminagao .apw) , onde uma ou mais threads AdvPL sao colocados em execusio, inicializados com a fungao especificada na configuragéo ONSTART, que ficam em modo de espera para atender uma requisic4o. Quando um processo é alocado para atender uma requisicao, a funcao ONCONNECT é chamada, usando o contexto do proceso jé existente, que permanece alocado (ocupado) até o final do processamento, quando HTTP Server retorna a string gerada ao Browser, e o processo usado torna-se disponivel novamente para atender outra requisigao de extensio APW, que pode vir do mesmo ou de qualquer outro Web Browser. Inteligéncia do Pool de Threads hitpslsiga0986,wordprass,con2018/"1/12iprotheus-e-advplasp-parte-01/ 59 3102/2020 Protheus e AdvPL ASP —Parte Ot | Tudo em AdvPL Lembra-se do parametro INSTANCES, configurado no Pool de Threads? Entao, no nosso exemplo usamos 1,2. Isto significa que, este pool de processos inicia com somente um processo para atender as requisigdes de links APW. Se, em um determinado momento, todos os processos estiverem ocupados em atendimento, e chegar uma nova requisicao de AdvPL ASP, o Protheus Server vai colocar essa requisicao em uma fila com timeout de alguns segundos, e caso o niimero de processos total do pool ainda nao tenha atingido o maximo, ele sobe mais um proceso. Isso garante por exemplo, que somente quando o site comecar a receber forte concorréncia de requisigdes, e os processos em execusao estiverem todos ocupados, mais processos serao colocados no ar, visando economia de recursos. Isso também permite definir um limite maximo de processos, para evitar que uma avalanche de requisigGes ou algum processo muito demorado faga com que 0 Protheus Server suba mais processos do que ele aguentaria dar conta — normalmente por causa de excesso de meméria consumida ou mesmo de CPU. Detalhes adicionais Quer ver algumas coisas interessantes? Crie uma user function — vide modelo abaixo — e vamos ver © que ela vai fazer. User Function TstAPH() Local cRet := '' Ret := H_Index() conout (cRet) return Agora execute ela diretamente pelo SmartClient, ¢ veja o resultado no log de console do Application Server. Deve ser mostrado algo assim: [INFO ][SERVER] [11/11/2018 23:55:19] Starting Program U_TSTAPH Thread 5516 (siga®@, NOTE-JULIOW-SSD)

O18 Mundo AdvPL ASP

Agora smo 23:55:20

[INFO ][SERVER] [Thread 5516] [11/11/2018 23:55:20] Thread finished (siga®, NOTE- JULIOW-SSD, 2.63 MB.) Na pratica, eu obtive a string da pagina de retorno, executando meu cédigo pelo SmartClient. Isso somente foi possivel pois dentro do arquivo index.aph eu nao usei nada especifico do ADVPL ASP. A infraestrutura de processo oferecida pelo Protheus Server para a execucao de links APW usando Working Threads oferece o uso de alias virtuais especiais para recuperar informagies vindas como pardmetro de GET e POST do Browser, além de um controle nativo de varidveis de SESSION (por usuario) e COOKIES do Browser. Estes recursos estdo detalhados na TDN, vide links nas referéncias no final deste post. hitpslsiga0986,wordprass,con2018/"1/12iprotheus-e-advplasp-parte-01/ a9 ovoa2020 Protheus © ASvPL ASP —Parte 01 | Tudo em AdvPL O diferencial da documentacao do TDN € que as configuracdes das fungdes que fazem o ONSTART e 0 ONCONNECT do Pool de Threads indica que vocé deve usar as funcdes de LIB e Framework WEB compiladas no repositério do ERP, para usar alguns pseudo-comandos, como WEB EXTENDED INIT WEB EXTENDED END € outros recursos de encapsulamento. No caso do nosso exemplo, estamos usando fungées especificas e customizadas para atender uma necessidade didética. De qualquer modo, os recursos de ALIAS VIRTUAIS documentados nesta seco sao oferecidos pelo Protheus Server, ndo dependem da LIB. Conclusao Com isso, comecamos uma jornada no mundo do AdvPL ASP, e abrimos portas para criar muitas coisas legais. A titulo de informacao, os Web Services Server do ERP Microsiga foram todos implementados em AdvPL, usando como base o POOL de Working Threads do AdvPL ASP, apenas implementando tratamentos especificos para receber um XML SOAP via POST, e retornar um XML de retorno ao invés de retornar um HTML. Os portais do ERP Microsiga foram implementados em duas camadas, uma sobre 0 AdvPL ASP e outra sobre Web Services. O portal em si é uma aplicagao AdvPL ASP responsavel por montar a interface dinamica em HTML, consumindo um grupo de servicos publicados em um Web Services Server. Desse modo as Working Threads do portal sf0 muito leves, pois nao tem conexdo persistente com Banco de Dados e nao mantém tabelas abertas. Ela apenas consome um Web Service hospedado em outro servico, € usa os retornos para montar os HTMLs dinamicos para os usuérios interagirem com as funcionalidades ‘Agradeco novamente as curtidas, compartilhamentos, comentarios, dividas e afins, e desejo novamente a todos TERABYTES de sucesso !!! Referéncias © TDN—A Infraestrutura WEBEX (http://tdn.totvs.com/display/tec/Infra-estruturatAPWEBEX) 7 comentarios sobre “Protheus e AdvPL ASP - Parte 01” 1. Protheus e AdvPL ASP ~ Parte 05 | Tudo em AdvPL disse: 01/12/2018 as 00:49 [..-] Protheus e AdvPL ASP - Parte 01 [ Responder (https://siga0984.wordpress.com/2018/11/12/protheus-e-advpl replytocom=929#respond), 2. CRUD em AdvPL ASP — Parte 02 | Tudo em AdvPL disse: 02/12/2018 as 01:24 -parte-O1/? hitpslsiga0986,wordprass,con2018/"1/12iprotheus-e-advplasp-parte-01/ 119 ovoa2020 Protheus @ AdvPL ASP-—Parte 01 | Tudo em AdvPL [...] Protheus e AdvPL ASP - Parte 01 [...] Responder (https://siga0984,wordpress.com/2018/11/12/protheus-e-advpl-asp-parte-01/? replytocom=943#respond), 3. RUBEM DA SILVA CERQUEIRA disse: 17/02/2019 as 23:08 Obrigado por compartilha conhecimento. Abrago Responder (hitps://siga0984,wordpress.com/2018/11/12/protheus-e-advpl-asp-parte-O1/? replytocom=1093#respond) © jillio Wittwer © Responder (https://siga0984. wordpress.com/2018/11/12/protheus-e-advpl-asp-parte-O1/2 replytocom=1094#respond) 4. René disse 08/04/2019 as 17:23 Parabéns pelo trabalho. Excelente contetido. Responder (https://siga0984. word press.com/2018/11/12/protheus-e-advpl-asp-parte-01/? replytocom=1131 respond) © Julio Wittwer disse: 11/04/2019 as 20:57 Obrigado © Responder (https://siga0984,wordpress.com/2018/11/12/protheus-e-advpl-asp-parte-01/? replytocom=1132#respond) 5. Adilson disse: 22/10/2019 &s 15:52 Julioooo, parabéns e criando aqui Wittwerminions (Y) Responder (https://siga0984.wordpress.com/2018/11/12/protheus-e-advp) ocom=1460#respond) ® (https://wordpress.com/?ref=footer_custom_svg) hitpslsiga0986,wordprass,con2018/"1/12iprotheus-e-advplasp-parte-01/ a9 3102/2020 Protheus e AdvPL ASP —Parte Ot | Tudo em AdvPL hitpslsiga0986,wordprass,con2018/"1/12iprotheus-e-advplasp-parte-01/ 99

Você também pode gostar