Criando um campo de pesquisa para uma dimensão financeira no Dynamics 365
Publicado: 16 de fevereiro de 2025 às 11:33:59 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++.
Creating a Lookup Field for a Financial Dimension in Dynamics 365
As informações nesta postagem são baseadas no Dynamics 365 for Operations, mas a maioria delas também funcionará no Dynamics AX 2012 (veja abaixo).
Recentemente, fui encarregado de criar um novo campo no qual deveria ser possível especificar uma única dimensão financeira, neste caso, Produto. Claro, o novo campo também deveria ser capaz de procurar os valores válidos desta dimensão.
Isso é um pouco mais complicado do que uma pesquisa comum em uma tabela, mas se você souber como, não é tão ruim assim.
Felizmente, o aplicativo padrão fornece um formulário de pesquisa conveniente (DimensionLookup) que pode ser usado para essa finalidade, se você apenas informar qual atributo de dimensão pesquisar.
Primeiro, você precisa criar o campo de formulário em si. Isso pode ser baseado em um campo de tabela ou um método de edição, não importa para a pesquisa em si, mas de uma forma ou de outra, ele deve usar o tipo de dado estendido DimensionValue.
Você precisa então criar um manipulador de eventos OnLookup para o campo. Para criar um manipulador de eventos, clique com o botão direito do mouse no evento OnLookup para o campo, então escolha "Copiar método do manipulador de eventos". Você pode então colar um método de manipulador de eventos vazio em uma classe e editá-lo a partir daí.
Aviso: A maior parte disso também funcionará no Dynamics AX 2012, mas em vez de criar um manipulador de eventos, você pode substituir o método de pesquisa do campo de formulário.
O manipulador de eventos deve ser parecido com 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);
}