Criando Pontos de Entradas dentro do seu fonte
As vezes quando estamos desenvolvendo rotinas e queremos compartilhar apenas o patch da rotina e não o fonte original, mas gostaria que outros interagissem com uma determinada parte do seu fonte, podemos usar pontos de entrada, ou seja, executar algo em um determinado ponto do fonte e depois deixar o fonte original dar continuidade no processo.
Para isso, podemos usar 2 funções no seu fonte:
ExistBlock – Verifica ponto de entrada existente
Sintaxe:
ExistBlock (< cNomePE>, [ lLocaliz], [ lForced] )
Retorno:
Verdadeiro/Falso
ExecBlock – Execução do ponto de entrada
Sintaxe:
ExecBlock( < cNomePE>, [ lVarEnv], [ lSet], [ uParam] )
Os pontos de entrada podem alimentar uma variável ou exibir uma tela, quando finaliza o processo, o sistema continua de onde havia parado.
Exemplificando:
1 2 3 4 5 6 7 |
//Neste exemplo, meu fonte principal se chama ACFG003(), e em um determinado ponto do meu fonte, irei verificar se o fonte ACFG003W() existe, caso positivo, //irei executá-lo com a função ExecBlock //É possível passar parametros para o fonte, para isso, inclua tudo dentro do array If ExistBlock("ACFG003W") ExecBlock("ACFG003W",.F.,.F.,{aIndice,cTabela,cTabela2,nInicio,nOpc,cMesg1,cMesg2,cMesg3}) Endif |
Dentro do fonte ACFG003W()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//Para receber os parametros enviados do fonte original, você deverá usar PARAMIXB, ele é um array contendo as posições que você enviou User Function ACFG003W() Local _aIndice := aClone(PARAMIXB[1]) Local _cTabela1 := PARAMIXB[2] Local _cTabela2 := PARAMIXB[3] Local _nInicio := PARAMIXB[4] Local _nOpc := PARAMIXB[5] Local _cMesg1 := PARAMIXB[6] Local _cMesg2 := PARAMIXB[7] Local _cMesg3 := PARAMIXB[8] /*seu codigo*/ Return |
Recebendo parametros do seu ponto de entrada:
1 2 3 4 5 |
//Você pode enviar parametros e receber tambem. //Dentro do seu fonte, o RETURN(), deve vir com o conteudo de retorno. If ExistBlock("ACFG003Z") lErro := ExecBlock("ACFG003Z",.F.,.F.,{aIndice,nInicio,nOpc,cMesg1,cMesg2,cMesg3}) Endif |
Dentro do fonte ACFG003Z()
1 2 3 4 5 6 7 8 9 10 11 12 |
User Function ACFG003Z() Local _lErro := .F. Local _aIndice := aClone(PARAMIXB[1]) Local _nInicio := PARAMIXB[2] Local _nOpc := PARAMIXB[3] Local _cMesg1 := PARAMIXB[4] Local _cMesg2 := PARAMIXB[5] Local _cMesg3 := PARAMIXB[6] FWMsgRun(, {|oSay| _lErro := Importar(oSay,_aIndice,_nInicio,_nOpc,_cMesg1,_cMesg2,_cMesg3) }, "Processando", "Processando a rotina...") Return(_lErro) |
Espero que tenha sido útil!
Deixe uma resposta