Creación de un campo de búsqueda para una dimensión financiera en Dynamics 365
Publicado: 16 de febrero de 2025, 11:33:32 UTC
Este artículo explica cómo crear un campo de búsqueda para una dimensión financiera en Dynamics 365 for Operations, incluido un ejemplo de código X++.
Creating a Lookup Field for a Financial Dimension in Dynamics 365
La información de esta publicación se basa en Dynamics 365 for Operations, pero la mayor parte también funcionará para Dynamics AX 2012 (ver a continuación).
Recientemente me encargaron la tarea de crear un nuevo campo en el que debería ser posible especificar una única dimensión financiera, en este caso, Producto. Por supuesto, el nuevo campo también debería poder buscar los valores válidos de esta dimensión.
Esto es un poco más complicado que una búsqueda normal en una tabla, pero si sabes cómo hacerlo, en realidad no es tan complicado.
Afortunadamente, la aplicación estándar proporciona un formulario de búsqueda conveniente (DimensionLookup) que puede usarse para este propósito, si simplemente le indica qué atributo de dimensión buscar.
En primer lugar, debe crear el campo de formulario en sí. Puede basarse en un campo de tabla o en un método de edición; no importa para la búsqueda en sí, pero de una forma u otra debe utilizar el tipo de datos extendido DimensionValue.
A continuación, debe crear un controlador de eventos OnLookup para el campo. Para crear un controlador de eventos, haga clic con el botón derecho en el evento OnLookup para el campo y, a continuación, seleccione "Copiar método de controlador de eventos". A continuación, puede pegar un método de controlador de eventos vacío en una clase y editarlo desde allí.
Aviso: la mayor parte de esto también funcionará para Dynamics AX 2012, pero en lugar de crear un controlador de eventos, puede anular el método de búsqueda del campo de formulario.
El controlador de eventos debe verse así (reemplace el nombre del formulario y el nombre del campo según sea necesario):
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);
}