Neste post, veremos como o padrão de estratégia nos ajuda em nossos desenvolvimentos.
Esse padrão nos permite alterar o algoritmo dependendo do cliente.
Vamos primeiro entender o problema e depois abordaremos a solução a partir de uma perspectiva "tradicional" e, em seguida, utilizaremos o padrão para fornecer a solução.
Declaração do problema
Na contabilidade eletrônica no México, as informações do número único da fatura (UUID) são armazenadas nos textos dos documentos financeiros. Como é um texto, essas informações não são exibidas nos relatórios padrão dos documentos financeiros, como FBL1N (faturas de fornecedores) e FBL5N (faturas de clientes).
Uma opção para contornar isso é usar o BAdI FI_ITEMS_CH_DATA, que implementa a interface IF_FI_ITEMS_CH_DATA e o método "change_items".
Este BAdI passa por todos os processos que preenchem os relatórios padrão do FI, em particular, na execução das transações FBLxN.
Além disso, precisamos estender a estrutura usada pelo método (mas isso será assunto para outra postagem), para nosso caso, vamos assumir que já temos a estrutura estendida com o campo UUID (ZZUUID - caractere de comprimento 36).
Dependendo se a fatura é de um fornecedor (FBL1N) ou de um cliente (FBL5N), a forma de obter o UUID é diferente:
-
No caso de fornecedores:
-
Leitura do texto da fatura (id = YUUD; objeto = BELEG; nome = bukrs&&belnr&&gjahr)
-
Se não encontrado, ler de RBKP com belnr = awkey(10) ghajr = awkey+10(4)
-
No caso de clientes:
-
Leitura do texto da fatura de SD (id = YUUD; objeto = VBBK; nome = akkey(10))
-
Se não encontrar dados, ler o texto da fatura FI (id = YUUD; objeto = BELEG; nome = bukrs&&belnr&&gjahr)
Análise do problema
Precisamos de um algoritmo que se comporte de forma diferente, dependendo da transação em execução.
Uma maneira seria, de forma tradicional, criar um método para cada caso e usá-los no método do BAdI, exibindo as diferentes opções e chamando o método correto em cada caso.
Solução sem o padrão de estratégia
Criaríamos os métodos na mesma classe de implementação (como privados).
CLASS zim_if_items_ch_data DEFINITION.
...