Pular para o conteúdo principal

Postagens

Mostrando postagens de fevereiro, 2009

Postagem em destaque

🚀 Oferecendo Serviços Remotos de Desenvolvedor AdvPL e Mais 🖥️

🚀 Oferecendo Serviços Remotos de Desenvolvedor AdvPL e Mais 🖥️ Olá pessoal, Espero que este post encontre todos vocês bem! É com grande entusiasmo que compartilho que estou expandindo meus serviços como Desenvolvedor AdvPL para novos desafios e colaborações. Com mais de duas décadas de experiência sólida, minha jornada profissional tem sido enriquecedora, com a oportunidade de participar de projetos empolgantes ao longo dos anos. Agora, estou ansioso para trazer minha experiência e habilidades para novas equipes e projetos, trabalhando de forma remota. Minha expertise abrange não apenas AdvPL, mas também outras tecnologias-chave, incluindo JS, SQL, Infraestrutura e Otimização de Processos. Acredito que essa combinação de conhecimentos me permite oferecer soluções abrangentes e eficazes para uma variedade de necessidades de desenvolvimento. Acredito que a tecnologia tem o poder de transformar negócios e impulsionar o sucesso, e estou comprometido em ajudar meus clientes a alcançar seu

Protheus :: Usando Taskkill para forçar o reinicio dos serviços

Às vezes faz-se necessário reiniciar os serviços do protheus mas através do "serviço" do Windows® isso se torna impossível pois podem existir muitos processos pendentes a interrupção dos serviços . Então podemos fazer uso da ferramenta "taskkill" que no exemplo abaixo está em um "script" em Windows® PowerShell®. Nesse exemplo existem quatro serviços do protheus sendo executados com os seguintes nomes: P10Server5110, P10Server5210, P10Server5310 e P10Server5410 onde P10Server corresponde ao Prefixo do serviço e 5110 a 5410 às portas em que eles escutam. $IniPort = 5110 $EndPort = 5911 $PrefixProcess = "P10Server" $NameProcess = "" for ( $Port = $IniPort ; $Port -le $EndPort ; $Port+=100 ) { $NameProcess = $PrefixProcess+$Port if ( get-service | where { $_.status -eq "stopped" -and $_.name -eq $NameProcess} ) { while ( get-service | where { $_.status -eq "stopped" -and $_.name -eq $NameProcess

Protheus :: Obtendo Array com as "Internal Functions" usando __FunArr()

Semelhante à __ClsArr() [ que retorna as classes para uso em Advpl ], __FunArr() retornará as "Internal Functions" funções essas que não são escritas em Advpl mas sim em C++ ou Assembler. Sua sintaxe é muito simples: __FunArr( ) -> aFunArray. Ex.: Local aIntFunctions := __FunArr () e terá o seguinte retorno ao avaliarmos a variável aInfFunctions: aIntFunctions[1][1] -> AnsiToEem //Nome da Função aIntFunctions[1][2] -> CR //Parâmetro da Função. A pilha de "Internal Functions" varia de acordo com novas implementações. Abaixo a saída com todas as "Internal Functions" constantes até a Build 7.00.080806P - Nov 4 2008 - 13:18:43. O Primeiro elemento corresponde ao nome da função e o segundo elemento aos seus parâmetros. A primeira vista os parâmetros, para um leigo, parecerão ininteligíveis, pois não temos sua declaração formal mas apenas o seu tipo. Mas com um pouco de paciência e experiência no uso das funções poderemos deduzí-los. Por Exeplo, sabe

Protheus :: Obtendo Array das Classes de Objetos com __ClsArr()

Se deseja obter as Classes para uso em Advpl utilize a função __ClsArr(). _Ela retornará um array multidimensional com todas as classes que poderão ser utilizadas em Advpl. No exemplo que postei sobre " Repositório Auxiliar " utilizei essa função para retornar as informações à respeito da classe "RPO". Sua sintaxe é muito simples: __ClsArr( ) -> aClassArray. Ex.: Local aClassesArray := __ClsArray() No Retorno de __ClsArray() obteremos um array com todas as classes, seus "membros", seus "métodos" e "parâmetros dos métodos". O único problema é que os parâmetros corresponderão ao seu tipo e não à sua descrição formal (o que dificulta, um pouco, ao leigos, saber o que passar para eles). Usando como exemplo o array atribuido à variável aClassesArray teremos, para o elemento 4 as seguintes informações: aClassesArray[4] //Informações da classe RPO aClassesArray[4][1] //RPO que refere-se ao nome da classe aClassesArray[4][2] //Esse elemento

Protheus :: Obtenha os parâmetros formais com GetFuncPrm

Utilizando GetFuncPrm( cFunction ) para retornar os parâmetros de uma função em Advpl. Se você tem dúvidas sobre quais parâmetros formais uma função em Advpl possui, utilize GetFuncPrm( cFunction ) para obtê-los. GetFuncPrm() retorna um array com todos os parâmetros formais da função. Ex.: Local aPrmFunc := {} IF FindFunction( "SomaHoras" ) aPrmFunc := GetFuncPrm( "SomaHoras" ) aEval( aPrmFunc , { |cPrm| ConOut( cPrm ) } ) //-> nHr1 , nHr2 EndIF O problema é que GetFuncPrm() só retorna os parâmetros de funções em Advpl, não retorna as "Internal Functions". Por exempo, não posso utilizar GetFuncPrm() para retornar os parâmetros da função aEval(), pois aEval() não está escrita em Advpl mas sim em C++ e em função disso, não consta na pilha de funções Advpl. Na realidade, quase toda função que possa ser localizada por FindFunction( cFunction ) pode ter os seus parâmetros formais retornados pela GetFuncPrm(). Além de não retornar os parâmetros de "In

Protheus :: Repositório Auxiliar

Neste artigo vou discursar um pouco sobre o "Repositório de Objetos Auxiliar" do Protheus. A idéia do "Repositório Auxiliar" surgiu para otimizar o processo de execução do "Roteiro de Cálculo" do SIGAGPE. As fórmulas e os roteiros do GPE são todos "interpretados" durante a sua execução, tornando o processo lento. Sendo assim a Totvs/Microsiga teve a brilhante idéia de criar um "Repositório Auxiliar" para que as Fórmulas e Roteiros de Cálculo fossem compilados. Esse novo esquema para o Roteiro de Cálculo do GPE só está disponível para os países que não o Brasil (Chile, México, Portugal, etc.), acredito que futuramente a Totvs/Microsiga disponibilize também para o Brasil. A boa notícia é que o "Repositório Auxiliar" não serve apenas para o módulo GPE, ele pode ser utilizado em qualquer lugar onde você possa estar colocando uma "macro execução" ou uma "User Function". O "Repositório Auxiliar" está di