Una de las grandes características de la plataforma Acumatica XRP es que elimina la necesidad de mucha codificación personalizada a través de los atributos. Por ejemplo, la pantalla Stock Items proporciona atributos según la clase de artículo del artículo; la pantalla Vendor proporciona atributos basados en la clase de proveedor; y la lista sigue y sigue. Lo que hace que esta característica sea tan increíble es que el administrador del sistema puede configurar una lista de atributos que se mantendrán según la clasificación del artículo, proveedor, etc. Aunque estos atributos podrían ser valores que aún no tienen un marcador de posición en el sistema, también pueden variar de una clase a otra.
La plataforma Acumatica XRP contiene muchos ejemplos de pantallas y códigos que pueden copiarse para agregar atributos a pantallas personalizadas. Sin embargo, ¿qué ocurre si el objetivo es mostrar los atributos de OTRA pantalla... de un objeto relacionado? No se preocupe. El proceso es bastante fácil para un desarrollador y se puede dividir en 3 sencillos pasos como ilustro a continuación.
Para preparar el escenario, se ha recibido un requerimiento de negocio para mostrar varias pestañas de datos relacionados con un artículo desde la pantalla de Artículos de Inventario, por lo que la pestaña de atributos en la pantalla personalizada buscará atributos en InventoryItem. Dado que se pretende que esto se defina para visibilidad más que para mantenimiento, asegúrese de bloquear el acceso para mantener la pestaña de atributos mediante permisos o código. (Descargo de responsabilidad: Este código 2021 R1 no ha sido probado para mantener los atributos relacionados).
Paso 1 - Crear una versión personalizada de CRAttributeList
GIST: https://gist.github.com/BrianMRO/6e442e41e0dcaa748f6efceb8c67aeed
Este código puede parecer complicado para los nuevos desarrolladores, pero en realidad no lo es. La mayor parte del código importante está en redefinir SelectDelegate para que recuperemos el objeto relacionado y obtengamos sus atributos. La mayor parte de esta sección se debe a que debemos copiar el constructor y todos los métodos y variables internos y privados de CRAttributeList para hacerlos accesibles, ya que su nivel de protección los hace inaccesibles a través de la herencia. Recuerda, técnicamente la herencia permite heredarlos, pero eso no significa que sean accesibles para ti en tu nueva clase.
Si nos fijamos en SelectDelegate, el registro MyDAC actual se recupera de la caché y, a continuación, se recupera el registro InventoryItem relacionado al que se hace referencia en MyDAC. Pasando el objeto InventoryItem (item) a SelectInternal permitirá que el resto del atributo funcione normalmente pero basado en el InventoryItem relacionado en lugar del registro MyDAC de la pantalla personalizada.
Paso 2 - Definir la vista Respuestas para la pestaña Atributos
GIST: https://gist.github.com/BrianMRO/4e78a158f7dce459395c6b5710d95a06
Esto refleja el uso de CRAttributeList por razones obvias. El atributo personalizado se basa en CRAttributeList, y el nombre básicamente es lo único que cambia aquí de cualquier otra pantalla.
Paso 3 - Añadir la pestaña Atributos
GIST: https://gist.github.com/BrianMRO/ae4e7bb280477faa80a54c7b3bce6e46
Este código .aspx puede copiarse de casi cualquier pantalla que contenga una pestaña de atributos. Simplemente busca la vista Respuestas pararellenar la cuadrícula estándar.
Después de compilar, actualizar el proyecto de personalización con la nueva DLL y publicar el proyecto, la nueva pestaña Atributos debería mostrar los atributos del objeto relacionado desde dentro de la pantalla personalizada.
¡Feliz codificación!