top of page

Pongamos emoción a las selects: SysDaQuery

Updated: Jun 29, 2022

Y aquí sí que sí tenemos la primera entrada real del blog!!


La entrada de hoy tratará sobre unos objetos peculiares que existen en D365FO, que el estándar usa algunas veces y que nos pueden sacar de algún apuro.


Todos nosotros (los programadores seguro que lo hemos usado, y los consultores seguro que alguna vez han visto alguna de ellas) hemos usado "selects" o "while selects" para consultar registros de una tabla y realizar acciones sobre ellos. Es más, incluso muchas veces hemos usado los famosos "queryruns" para hacer prácticamente lo mismo pero de un modo más limpio.


Pero hay veces en las que según qué "select" no puede ser transformada a "queryrun" o que simplemente el desarrollador no tiene la mentalidad orientada a detectar tan fácilmente cómo hacer una consulta concreta. Al final todos somos personas y cada uno de nosotros tiene facilidad para ver o realizar tareas de un modo determinado.


Es por ello que existen otro modo de hacer consultas, un modo distinto pero que a su vez es muy visual y entendedor: usando SysDaQuery.


Esta colección de objetos no hacen ningún tipo de magia negra ni realizan acciones complejas en sí, simplemente nos facilitan la forma en la que escribir sentencias mediante código.


Sentencia de consulta


Veamos un ejemplo del estándar donde se usa este tipo de objeto:


Este fragmento de código es usado por el módulo de gestión de almacenes a la hora de realizar la liberación de una carga (o de parte de ella). Más adelante haré una entrada dedicada exclusivamente a procesos de almacén y qué elementos están implicados en ellos.


Cuando una carga es liberada al almacén la cantidad de pedido que forma parte de los trabajos creados en la liberación pasa de estado "En pedido" o "Pedido reservado" a estado "Física reservada". Este paso es el que se realiza en el fragmento anterior. Como podéis ver en primer lugar declara las dos tablas principales que llevarán a cabo la consulta (en amarillo), una de ellas sobre toda la tabla y la otra sobre una selección de ella que entra por parámetro en el método. En segundo lugar se suceden las partes más interesantes de este tipo de sentencias; se van usando seguidamente todas esas condiciones aplicables a modo de "where", "and" o "or" del mismo modo que lo escribiríamos en un editor de SQL. (en rojo) Por último, como las dos tablas deben estar unidas mediante un join, realiza esa unión con otra sentencia a parte (en azul).


Con ello ya tenemos la sentencia montada y de una forma bastante curiosa y que podemos tener en un método a parte. Después de ello ya podemos iterar sobre ella y realizar las acciones que queramos.


Sentencias de acción


Pero esto no todo. No solo podemos hacer sentencias de consulta sino que podemos insertar, actualizar y borrar registros.


Veamos ejemplos de estos tipos:


Como veis en estos ejemplos se usan otros objetos distintos que tienen las características y las condiciones que tienen que cumplir las sentencias de inserción, actualización y borrado.


Biblioteca de objetos


Para poder montar estas sentencias hay multitud de objetos a utilizar. Ya sea para agrupar, para definir la selección, para tratar temas de fechas (Valid Time State), etc...


Os comparto el listado de todos los objetos de esta utilidad (marco en negrita los comentados anteriormente). Veréis que las posibilidades son inmensas:


SysDaAggregateProjectionField

SysDaAndExpression

SysDaAvgOfField

SysDaBinaryExpression

SysDaCountOfField

SysDaCrossCompany

SysDaCrossCompanyAll

SysDaCrossCompanyContainer

SysDaDataAccessStatement

SysDaDeleteObject

SysDaDeleteStatement

SysDaDivideExpression

SysDaEqualsExpression

SysDaFieldExpression

SysDaFindObject

SysDaFindStatement

SysDaGreaterThanExpression

SysDaGreaterThanOrEqualsExpression

SysDaGroupBys

SysDaInsertObject

SysDaInsertStatement

SysDaIntDivExpression

SysDaLessThanExpression

SysDaLessThanOrEqualsExpression

SysDaLikeExpression

SysDaMaxOfField

SysDaMinOfField

SysDaMinusExpression

SysDaModExpression

SysDaMultiplyExpression

SysDaNotEqualsExpression

SysDaOrderBys

SysDaOrExpression

SysDaPlusExpression

SysDaProjectionField

SysDaQueryExpression

SysDaQueryObject

SysDaQueryObjectBuilder

SysDaSearchObject

SysDaSearchStatement

SysDaSelection

SysDaSettingsList

SysDaSumOfField

SysDaUpdateObject

SysDaUpdateStatement

SysDaValidTimeState

SysDaValidTimeStateAsOfDate

SysDaValidTimeStateAsOfDateTime

SysDaValidTimeStateDateRange

SysDaValidTimeStateDateTimeRange

SysDaValueExpression

SysDaValueField


Vistas todas estas opciones apetece un poco probar y familiarizarse con estos nuevos amigos. Y también descubrir qué sucede cuando las consultas son realmente complejas.


¿Os atrevéis?

bottom of page