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++.
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);
}