SoporteIniciar sesión
Contáctenos
Leer FlowFields de MS Dynamics NAV 2013 o posterior

Leer FlowFields de MS Dynamics NAV 2013 o posterior

March 25, 2016 · Michael Bock · Funcionalidades

Leer FlowFields o campos calculados de MS Dynamics NAV ahora es más fácil

Nos alegra anunciar que ya admitimos la lectura de FlowFields o campos calculados de MS Dynamics NAV 2013 o posterior (en realidad, NAV 2009, NAV 2013, NAV 2015 y NAV 2016 son todos compatibles).

Como Microsoft dejó de dar soporte a la interfaz C/Front (la última versión compatible con c/Front fue NAV 2009), recuperar los FlowFields de la base de datos de NAV se ha vuelto más difícil. La forma más eficiente de hacerlo es crear una vista nueva que incorpore el índice SIFT correspondiente directamente en la base de datos de NAV. Sí, suena complicado, pero sigue leyendo: ahora tenemos una forma más sencilla de leer los FlowFields, como Balance de un Customer o Inventory de un Item.

Crear una vista nueva que incorpore el índice SIFT correspondiente siempre será la solución con mejor rendimiento, ya que la vista se puede adaptar para darte todos los campos que necesitas en una sola consulta al servidor de base de datos de MS Dynamics NAV (SQL Server). Si tienes los conocimientos para hacerlo y no te importa mantener una vista adicional en NAV al actualizar, etc., seguirá siendo la mejor opción.

Recuperar campos calculados con RapidiOnline

Sin embargo, si quieres mantener limpia la base de datos de MS Dynamics NAV y ahorrar tiempo, puedes conseguir lo mismo directamente en la configuración de RapidiOnline. Ya puedes usar nuestra función DBLookup para recuperar esas sumas de FlowFields de MS Dynamics NAV. Incluso puedes definir los FlowFilters para calcular la suma, por ejemplo, de un intervalo de fechas concreto.

En las versiones más recientes de RapidiOnline, las fórmulas y también los DBLookup se evalúan en el RapidiConnector, así que esta nueva solución también rinde bastante bien, porque todas las consultas a la base de datos SQL se hacen en local.

A continuación tienes algunos ejemplos del uso de esta nueva función:

Obtener Balance para cada Customer

##DBLookup('SOURCEDS','Detailed Cust_ Ledg_ Entry$VSIFT$4','Customer No_',"No_",'SUM$Amount')

En el DBLookup anterior damos por supuesto que estás leyendo de la tabla Customer de NAV y que queremos Balance para cada Customer que leemos. Usamos el índice SIFT llamado "Detailed Cust_ Ledg_ Entry$VSIFT$4" y filtramos por el campo "Customer No_" con el valor de cada Customer (el valor de "No_"). El valor lo recuperamos del campo "SUM$Amount". En realidad, la instrucción Select que usamos será algo como SELECT SUM("SUM$Amount") FROM "Detailed Cust_ Ledg_ Entry$VSIFT$4" WHERE "Customer No_" = 'xxx' (donde xxx se sustituye por cada Customer No concreto), pero tú solo tienes que indicarlo como arriba.

Obtener Total Sales (LCY) del año 2012 para cada Customer

##DBLookup('SOURCEDS','Cust_ Ledger Entry$VSIFT$1','Customer No_',"No_",'Posting Date','##"Posting Date">=\'2012-01-01\' and "Posting Date"<=\'2012-12-31\'','SUM$Sales (LCY)')

En este DBLookup también leemos de la tabla Customer de NAV y queremos obtener Total Sales (LCY) del año 2012 para cada Customer que leemos. Usamos un índice SIFT distinto, esta vez llamado "Cust_ Ledger Entry$VSIFT$1", y filtramos por el campo "Customer No_" con el valor de cada Customer (el valor de "No_"). Además, también tenemos que filtrar por el campo "Posting Date", pero no por una fecha concreta, sino por un intervalo. Esto se hace con nuestro filtro de fórmula especial (el ## hace que el resto de la cadena se establezca como filtro fijo). Dentro de la cadena del filtro tenemos que "escapar" la comilla simple con el \ (barra invertida): nuestro intérprete de fórmulas elimina el \ pero conserva las ' (comillas simples) que necesita la cláusula WHERE de SQL para funcionar. La instrucción SQL Select tendrá un aspecto parecido a: SELECT SUM("SUM$Sales (LCY)") FROM "Cust_ Ledger Entry$VSIFT$1" WHERE "Customer No_" = 'xxx' AND "Posting Date">='2012-01-01' and "Posting Date"<='2012-12-31' (donde xxx se sustituye por cada Customer No concreto).  

Obtener Inventory para cada Item

##DBLookup('SOURCEDS','Item Ledger Entry$VSIFT$3','Item No_',"No_",'SUM$Quantity')

En este último ejemplo leemos de la tabla Item de NAV y queremos obtener el Inventory total de cada Item que leemos. Usamos el índice SIFT llamado "Item Ledger Entry$VSIFT$3" y filtramos por el campo "Item No_" con el valor de cada Item (el valor del campo "No_"). La instrucción SQL Select resultante sería algo como SELECT SUM("SUM$Quantity") FROM "Item Ledger Entry$VSIFT$3" WHERE "Item No_" = 'xxx' (donde xxx se sustituiría por cada Item No concreto). 

Qué índice SIFT usar

El índice SIFT que hay que usar para calcular una suma concreta no se puede consultar en un único lugar y puede variar de una instalación de NAV a otra, según la versión de NAV y el nivel de personalización. Puedes obtener algunas pistas mirando en NAV, en el Object Designer de la tabla correspondiente, y después consultando las vistas definidas en la propia base de datos SQL de NAV (busca en las vistas).

Para usar esta nueva función necesitas tener tanto el servicio central de Rapidi como el RapidiConnector en la versión 3.2.92v o posterior. Ponte en contacto con nuestro soporte para organizar la actualización si es necesario.

Conoce a nuestro equipo de Customer Success: ¡reserva tu hora ahora!

Compruebe si encaja con su entorno

Díganos qué sistemas utiliza y le diremos con franqueza si Rapidi es la herramienta adecuada.