Na inicialização do programa (main_code, local-initialize ou outra procedure que é chamada inicialmente ao executar o programa), é necessário persistir o programa do HUB e chamar a procedure que irá retornar para uma variável se a função relacionada ao Portador Financeiro do Emitente está ativa: | Bloco de código |
|---|
| title | Exemplo |
|---|
| linenumbers | true |
|---|
| collapse | true |
|---|
|
assign l-fn-port-emitente = no.
if search("hbbo\boParamFuncaoProdut.r") <> ?
or search("hbbo\boParamFuncaoProdut.p") <> ? then do:
run hbbo\boParamFuncaoProdut.p persistent set h-api.
if valid-handle(h-api) then do:
if h-api:get-signature('pi_existe_funcao':U) <> "" then
run pi_existe_funcao in h-api (input "Portador Financeiro do Emitente":U,
output l-fn-port-emitente).
delete procedure h-api.
end.
end.
|
Caso em algum ponto do fonte está sendo utilizado diretamente os campos: emitente.portador, emitente.portad-prefer, emitente.portador-ap, emitente.modalidade, emitente.mod-prefer, emitente.modalidade-ap, deverá ser alterado para utilizar variáveis. É necessário definir mais duas variáveis no mesmo ponto do item 1: - Variável inteira que terá o valor do Portador;
- Variável inteira que terá o valor da Modalidade;
| Bloco de código |
|---|
| title | Exemplo |
|---|
| linenumbers | true |
|---|
| collapse | true |
|---|
|
define variable i-port-emit as integer no-undo.
define variable i-modalid-emit as integer no-undo.
|
| Informações |
|---|
| Somente se utilizar diretamente os campos. Caso o valor seja transferido para uma variável e esta que realmente seja utilizada, não é necessário realizar esta etapa. |
Em cada ponto do fonte que está sendo utilizado os campos: emitente.portador, emitente.portad-prefer, emitente.portador-ap, emitente.modalidade, emitente.mod-prefer, emitente.modalidade-ap, deverá ter o seguinte tratamento: - Caso a variável que indica o estado da função esteja inativa, deverá continuar utilizando os campos do emitente. Basta atualizar as variáveis diretamente com os valores dos campos;
Caso a variável que indica o estado da função esteja ativa, deverá ser persistido a API de Portador e Carteira e após chamar a procedure pi_busca_dados_portador_fin, que irá retornar os valores de Portador e Modalidade e uma temp-table de erros;
| Bloco de código |
|---|
| title | Exemplo |
|---|
| linenumbers | true |
|---|
| collapse | true |
|---|
|
• Portador do Cliente:
run prgint/ufn/ufn008za.py persistent set h-api.
if valid-handle(h-api) then do:
run pi_busca_dados_portador_fin in h-api (input "",
input emitente.portador,
input emitente.modalidade,
input emitente.cod-emitente,
input "Cliente":U,
input "",
output i-port-emit,
output i-modalid-emit,
output table tt_log_erro).
delete procedure h-api.
end.
• Portador Preferencial do Cliente:
run prgint/ufn/ufn008za.py persistent set h-api.
if valid-handle(h-api) then do:
run pi_busca_dados_portador_fin in h-api (input "",
input emitente.port-prefer,
input emitente.mod-prefer,
input emitente.cod-emitente,
input "Cliente":U,
input "Prefer":U,
output i-port-emit,
output i-modalid-emit,
output table tt_log_erro).
delete procedure h-api.
end.
• Portador do Fornecedor:
run prgint/ufn/ufn008za.py persistent set h-api.
if valid-handle(h-api) then do:
run pi_busca_dados_portador_fin in h-api (input "",
input emitente.portador-ap,
input emitente.modalidade-ap,
input emitente.cod-emitente,
input "Fornecedor":U,
input "":U,
output i-port-emit,
output i-modalid-emit,
output table tt_log_erro).
delete procedure h-api.
end.
|
| Bloco de código |
|---|
| title | Exemplo Completo |
|---|
| linenumbers | true |
|---|
| collapse | true |
|---|
| /* DEFINIÇÕES */
define variable h-api as handle no-undo.
define variable l-fn-port-emitente as logical no-undo.
def temp-table tt_log_erro no-undo
field ttv_num_cod_erro as integer format ">>>>,>>9" label "Número" column-label "Número"
field ttv_des_msg_ajuda as character format "x(40)" label "Mensagem Ajuda" column-label "Mensagem Ajuda"
field ttv_des_msg_erro as character format "x(60)" label "Mensagem Erro" column-label "Inconsistência".
define variable i-port-emit as integer no-undo.
define variable i-modalid-emit as integer no-undo.
...
/* LOCAL-INITIALIZE */
assign l-fn-port-emitente = no.
if search("hbbo\boParamFuncaoProdut.r") <> ?
or search("hbbo\boParamFuncaoProdut.p") <> ? then do:
run hbbo\boParamFuncaoProdut.p persistent set h-api.
if valid-handle(h-api) then do:
if h-api:get-signature('pi_existe_funcao':U) <> "" then
run pi_existe_funcao in h-api (input "Portador Financeiro do Emitente":U,
output l-fn-port-emitente).
delete procedure h-api.
end.
end.
...
/* PONTO A SER ALTERADO */
assign i-port-emit = emitente.portador-ap
i-modalid-emit = emitente.modalidade-ap.
if l-fn-port-emitente then do:
run prgint/ufn/ufn008za.py persistent set h-api.
if valid-handle(h-api) then do:
run pi_busca_dados_portador_fin in h-api (input "",
input i-port-emit,
input i-modalid-emit,
input emitente.cod-emitente,
input "Fornecedor":U,
input "":U,
output i-port-emit,
output i-modalid-emit,
output table tt_log_erro).
delete procedure h-api.
end.
/* Neste ponto pode ser realizado o devido tratamento de erros. Caso não seja tratado, irá retornar os valores que estão no cadastro do emitente (como se a função não estivesse ativa)
Exemplo:
for each tt_log_erro:
create tt-erros-api…
end.
Exemplo apenas apresentando os erros no clientlog:
if log-manager:logging-level > 2 then do:
for each tt_log_erro:
log-manager:write-message("Código do Erro: " + string(tt_log_erro.ttv_num_cod_erro), "UFN008ZA":U).
log-manager:write-message("Mensagem......: " + tt_log_erro.ttv_des_msg_erro , "UFN008ZA":U).
log-manager:write-message("Ajuda.........: " + tt_log_erro.ttv_des_msg_ajuda , "UFN008ZA":U).
end.
end.
*/
end.
assign tt-emitente-tr.portador = i-port-emit
tt-emitente-tr.modalidade = i-modalid-emit. |
|