Miklix

Criação de um campo de pesquisa para uma dimensão financeira no Dynamics 365

Publicado: 16 de fevereiro de 2025 às 11:34:00 UTC

Este artigo explica como criar um campo de pesquisa para uma dimensão financeira no Dynamics 365 for Operations, incluindo um exemplo de código X++.


Esta página foi traduzida automaticamente do inglês para a tornar acessível ao maior número possível de pessoas. Infelizmente, a tradução automática ainda não é uma tecnologia aperfeiçoada, pelo que podem ocorrer erros. Se preferir, pode ver a versão original em inglês aqui:

Creating a Lookup Field for a Financial Dimension in Dynamics 365

As informações neste post são baseadas no Dynamics 365 for Operations, mas a maioria delas também funcionará no Dynamics AX 2012 (ver abaixo).

Recentemente, fui encarregue de criar um novo campo no qual deveria ser possível especificar uma única dimensão financeira, neste caso, Produto. É claro que o novo campo também deve ser capaz de procurar os valores válidos desta dimensão.

Isto é um pouco mais complicado do que uma pesquisa comum numa tabela, mas se souber como, não é assim tão mau.

Felizmente, a aplicação padrão fornece um formulário de pesquisa conveniente (DimensionLookup) que pode ser utilizado para este fim, se apenas lhe disser qual o atributo de dimensão a pesquisar.

Primeiro, precisa de criar o próprio campo de formulário. Isto pode ser baseado num campo de tabela ou num método de edição, não importa para a pesquisa em si, mas de uma forma ou de outra deve utilizar o tipo de dados estendido DimensionValue.

Em seguida, precisa de criar um manipulador de eventos OnLookup para o campo. Para criar um manipulador de eventos, clique com o botão direito do rato no evento OnLookup do campo e escolha "Copiar método do manipulador de eventos". Pode então colar um método de manipulador de eventos vazio numa classe e editá-lo a partir daí.

Aviso: A maior parte disto também funcionará no Dynamics AX 2012, mas em vez de criar um manipulador de eventos, pode sobrescrever o método de pesquisa do campo de formulário.

O manipulador de eventos deve ser semelhante a isto (substitua o nome do formulário e o nome do campo conforme necessário):

[
    FormControlEventHandler(formControlStr( MyForm,
                                            MyProductDimField),
                            FormControlEventType::Lookup)
]
public static void MyProductDimField_OnLookup(  FormControl _sender,
                                                FormControlEventArgs _e)
{
    FormStringControl   control;
    Args                args;
    FormRun             formRun;
    DimensionAttribute  dimAttribute;
    ;

    dimAttribute    =   DimensionAttribute::findByName('Product');
    args            =   new Args();
    args.record(dimAttribute);
    args.caller(_sender);
    args.name(formStr(DimensionLookup));
    formRun         =   classFactory.formRunClass(args);formRun.init();
    control         =   _sender as FormStringControl;
    control.performFormLookup(formRun);
}
Partilhar no BlueskyPartilhar no FacebookPartilhar no LinkedInPartilhar no TumblrPartilhar em XPartilhar no LinkedInFixar no Pinterest

Mikkel Bang Christensen

Sobre o autor

Mikkel Bang Christensen
Mikkel é o criador e proprietário do miklix.com. Tem mais de 20 anos de experiência como programador informático/desenvolvedor de software profissional e trabalha atualmente a tempo inteiro para uma grande empresa europeia de TI. Quando não está a escrever no blogue, dedica o seu tempo livre a um vasto leque de interesses, passatempos e actividades, que podem, em certa medida, refletir-se na variedade de tópicos abordados neste sítio Web.