|
<< Click to Display Table of Contents >> Classes e Funções |
![]() ![]()
|
Para otimizar o trabalho do desenvolvedor e não gerar retrabalho, ou seja, códigos fontes com as mesmas funcionalidades espalhados por todo o Sistema, existem classes e funções já desenvolvidas que podem atender determinadas tarefas.
Algumas Funções e Classes são utilizadas de forma compartilhada no BASIC e nos Webservices. Essas Classes estão salvas em JDWS_CLASSES_COMUNS.apl e as Funções estão salvas em JDWS_ROTINAS_COMUNS.apl.
Em alguns casos no Sistema a chamada da função está direta, chamando diretamente a JDWS_ROTINAS_COMUNS.apl, ou de forma indireta, chamando uma função existente na JD que por sua vez chama a função localizada em JDWS_ROTINAS_COMUNS.apl.
Classes
Imagine que será necessário incluir em uma tela o combobox que lista as empresas. Na JD existe a classe cbSY01_EMPRESA.

Imagine que será necessário incluir em uma tela uma coluna que lista as empresas. Na JD existe a classe colSY01_EMPRESA.
Imagine que será necessário incluir em uma tela uma tabela que exibe as empresas. Na JD existe a classe tblEMP_LIBERADA.
Imagine que será necessário incluir em uma tela um campo no formato decimal com duas casas decimais. Na JD existe a classe dfVALOR_2DEC.
Funções
Imagine que será necessário retornar em algum momento no Sistema o dia da semana a partir de um campo de data. Utilize a Função DATA_RETORNA_DIA_SEMANA.
Set strDIA_SEMANA = DATA_RETORNA_DIA_SEMANA ( dtXX99_DATA_H )
strDIA_SEMANA = Variável que receberá o texto com o dia da semana
DATA_RETORNA_DIA_SEMANA = Função da JD
dtXX99_DATA_H = Campo de data que deve ser passado como parâmetro para a função DATA_RETORNA_DIA_SEMANA.
Função SqlPrepare_JUND( INDICE, strCOMANDO )
Localizada na classe JDWS_ROTINAS_COMUNS_BASIC_FULL, está função é utilizada para o Prepare de um Comando SQL dentro de um Loop, ela armazena os comandos utilizados neste Loop para realizar o SqlPrepare(hSql, strComando) apenas uma vez, e nas vezes seguintes, apenas devolver a função como TRUE, pulando a etapa do SqlPrepare, dando mais performance ao sistema. Ela tem como parâmetro um Indice, sendo este, o indice a qual o hSql_AUX[*] está preparado o comando e uma Long String para receber o comando SQL a ser preparado. O Retorno é do tipo Boolean, caso ela tenha sido executada corretamente, retornará o valor TRUE, caso contrário, FALSE.
O comando enviado como parâmetro é comparado com o array strCOMANDO_ARM e a posição que estará sendo realizada essa comparação é com o número do indice também enviado por parâmetro, caso o comando não seja igual, o hSql_AUX[*] será preparado com este novo comando e será armazenado neste array o comando enviado.
Para a realização da conexão do novo Sql Handle, é utilizado a função JDWSC_CONEXOES_AUXILIARES, ela tem como parâmetros: Um receive de Sql Handle, String com o tipo de Isolation que deverá ser realizado (Realese Locks (RL) ou Cursor Stability (CS)) e uma String para Conexão ou Desconexão do Sql Handle (C ou D).
Caso seja necessário realizar uma conexão para Webservice, é necessário a preparação da variável SqlUDL, para isso as variáveis strServerEndereco, SqlDataBase, SqlUser e SqlPassword precisam estar preenchidas, elas são preenchidas sempre que a função BancoConexao é chamada. Apenas com a primeira conexão realizada, já é possivel realizar as conexões auxiliares.
Atualmente, o limite do SqlServer é 99, para evitar conflitos, o limite que está programado é de 50 conexões, voltando FALSE caso seja enviado um indice a partir de 51.
Após o Loop onde as conexões auxiliares foram utilizadas, é necessário chamar a função DESCONECTA_HANDLES_ARRAY, também localizado na JDWSC.
ATENÇÃO: A AÇÃO DE UTILIZAR A SqlUDL SÓ É NECESSÁRIA EM CASO DE WEBSERVICE !

Caso a variável strServerEndereco venha a ser preenchida de maneira incorreta, quando nas aplicações Basic ou Full deveriam ser STRING_Null, a aplicação não conseguirá realizar a conexão, travando a aplicação.

Dentro da Função SqlPrepare_JUND a função de conexão Auxiliar é realizada sempre que não seja encontrado um comando SQL já realizado o SqlPrepare.

Caso a SqlPrepare_JUND retorne TRUE, é necessário usar o SqlExecute com o hSql_AUX[*] DO MESMO INDICE enviado para o SqlPrepare_JUND, assim como o SqlFetchNext(hSql_AUX[*], nRet).
Exemplo 1:

Exemplo 2:
Neste exemplo, o VENDA_01 – Basic contém um Loop dentro da função PV_CONSISTE_PEDIDO para consistir a descrição do item do pedido, originalmente ele era realizado da seguinte forma:

E com as mudanças para a nova função SqlPrepare_JUND:

Para utilizar a função, é necessário utilizar a nacionalização da classe a vJDWSC, da JDWS_ROTINAS_COMUNS_BASIC_FULL que está declarada dentro da classe JDWS_ROTINAS_COMUNS. Com isso é possível utilizar a mesma construção para as aplicações, assim como para WebServices.
Com Essa mudança é possível realizar um ganho de desempenho dentro de rotinas com Loop ou While, principalmente quando há mais de um comando SQL por Loop. Para uma performance ainda melhor é interessante a utilização do WITH (NOLOCK) dentro dos comandos SQL de Select. Além desta mudança, também é necessário a Alteração da função SalTBlSetFocusRow(TABELA, nRow) para SalTblSetContext(TABELA, nRow).
Caso a consulta seja longa, há a possibilidade de exibir a DialogWait (dlgWait) utilizando a variável glbCANCELA = TRUE, onde é possível cancelar a consulta. A Dialog será exibida após 5 segundos de espera, é necessária a utilização do SalWaitCursor_JD.
Atenção: utilizar a DialogWait somente em telas de consultas.
![]()
