Classes e Funções

<< Click to Display Table of Contents >>

Navigation:  Manual Técnico > Programação >

Classes e Funções

Previous pageReturn to chapter overviewNext page

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.

manual_tecnico_15

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 !

SqlPrepare_JUND

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.

SqlPrepare_JUND_A

 

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.

SqlPrepare_JUND_B

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:

SqlPrepare_JUND_G

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:

 

SqlPrepare_JUND_C

 

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

 

SqlPrepare_JUND_D

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.

SqlPrepare_JUND_E

 

SqlPrepare_JUND_F