Hola a todos, hoy toca abordar un post técnico: el tipo de datos Mediaset y su utilización.
Mediaset es un nuevo tipo de datos que aparece a partir de la version 2017 de Dynamics NAV. Puedes leer mas información sobre este tipo de datos aquí.
Al trabajar con este tipo de datos, es posible que desee copiar su contenido de una tabla a otra, pero no la misma referencia a ese tipo de datos.
Si la misma referencia se copia a través de una instrucción de asignación, cualquier acción se realizará y se realizará en el mismo Mediaset. Si se elimina un registro que contiene el dato, entonces todos los demás registros en tablas diferentes que se adhieren a la misma referencia de Mediaset se ven afectados. Esto da como resultado un contenido vacío y que tras la eliminación ya no se muestre ninguna imagen.
Hagamos un ejemplo simple.
Cree una tabla personalizada como, por ejemplo, » Imagen de oferta » con la siguiente estructura:
Artículo No. >> Código 20
Imagen principal >> MediaSet
Cree una code unit simple donde » Artículo » es una variable tipo record y se realiza un GET, en un registro que almacena un MediaSet válido (por ejemplo, una imagen de artículo) y PriceQuotationPicture es la tabla de destino de la asignación de Mediaset.
…
Item.GET (ItemNo);
PriceQuotationPicture. «Imagen principal»: = Item.Picture; // Asigna Mediaset de la fuente
PriceQuotationPicture.MODIFY (TRUE); // o INSERT, dependiendo de tu desarrollo
…
Si le ordena a la aplicación que ejecute el código escrito anteriormente, al final tendrá el MediaSet copiado de la tabla de origen » Artículo » a la tabla de destino » Imagen de oferta «, pero también con la misma referencia.
Si ELIMINA el registro fuente o el registro de destino a través del Código AL o de la interface de usuario, ya que tanto la tabla de origen como la de destino contienen la misma referencia de MediaSet, el comando de eliminación avanzará y eliminará todos los contenidos. Esto sucederá en ambas tablas y ambos registros mostrarán el contenido de Mediaset vacío (no se muestra ninguna imagen).
Por el contrario si en su desarrollo pretende copiar el contenido con una referencia diferente, se recomienda codificar o refactorizar su código tal y como se muestra en el siguiente ejemplo:
…
Item.GET (ItemNo);
PriceQuotationPicture.INIT;
Index FOR: = 1 TO Item.Picture.COUNT DO
PriceQuotationPicture. «Imagen principal» .INSERT (Item.Picture.ITEM (index));
PriceQuotationPicture.MODIFY (TRUE);
…
Esto creará un nuevo MediaSet que contiene las llamadas referencias compartidas de MediaSet.
Cuando BORRA la MediaSet (por ejemplo, mediante la supresión de la tabla de destino o el destino o registro asociado) la ejecución de la aplicación detectará que se usa el artículo MediaSet (compartido) en múltiples MediaSets y no borrará el contenido.
El contenido se eliminará solo cuando en tiempo de ejecución, la aplicación no pueda encontrar otras referencias.
El tiempo de ejecución de la aplicación no se verá en todas las tablas en toda la base de datos para ver si el contenido de MediaSet se usa en otro lugar. Esta última acción podría causar un escaneo de tabla de SQL Server muy costoso y esta es la razón técnica principal que se encuentra debajo de este diseño.
Normalmente, se recomienda utilizar la asignación directa solo si las tablas de origen y de destino son las mismas, además del número de campo. Si su desarrollo implica que su contenido de MediaSet debe compartirse, debe compartirse a través de una tabla de referencia común, o clonando el contenido del campo como se muestra arriba.
Mas información no dudes en consultarnos.