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?
Comments