miércoles, 18 de junio de 2014

Frases de: El principe, Maquiavelo


A los hombres se les ha de aplastar o mimar, pues se vengan de las ofensas ligeras, ya que de las graves no pueden
La guerra no se evita, se retrasa para ventaja del enemigo
Quien propicia el poder de otro, labra su propia ruina
Los hombres hacen daño o por odio o por miedo
Quien cree que nuevas recompensas hacen olvidad viejas injusticias, se engaña
La naturaleza del hombre es contraer obligaciones entre si tanto por los favores que se hacen como por los recibidos
No es una victoria verdadera la que se consigue con armas ajenas
Las armas de otro o te vienen grandes o te pesan o te oprimen
Un príncipe sabio jamás permanecerá ocioso en tiempo de paz
Los hombres vacilan menos en hacer daño a quien se hace amar que a quien se hace temer
Un príncipe debe tener poco temer a las conjuras cuando goza del favor del pueblo
Un príncipe debe ejecutar a través de otros las medidas que puedan acarrearle odio, y por sí mismo las que reporten el favor de sus súbditos
El que no es tu amigo buscara tu neutralidad, el que lo es te exhortara a que combatas a su lado
Un príncipe debe mostrar su aprecio poe el talento
Los buenos consejos han de nacer de la prudencia del príncipe, y no la prudencia del príncipe de los buenos consejos
Solamente son buenas, seguras y duraderas aquellas formas de defensa que dependen de uno mismo

martes, 1 de abril de 2014

Ax2012, Saldo de ficha de proveedor o cliente

Introducción

Se trata de mostrar las diferentes vías en las que se puede obtener cual es el saldo abierto de una fecha. Este texto se centrará en proveedores, Pero es aplicable igualmente a Clientes.

Transacciones
Se trata de la tabla que almacena cualquier transacción asociada a la ficha, como por ejemplo facturas, pagos, efectos,.. La tabla se denomina VendTransOpen.
La primera forma y más sencilla de obtener el saldo es sumar el campo Importe (AmountMST) de todas las transacciones del proveedor.
La segunda manera de obtener el saldo sería sumar el resultado de la operación Importe (AmountMST) -Divisa liquidada (SettleAmountMST) de todas las transacciones del proveedor.
La tercera y cuarta manera sería igual que las anteriores, pero sumando aquellas transacciones que están abiertas de acuerdo al campo Fecha cerrada (Closed)

Transacciones abiertas
La quinta opción sería sumar el Importe (AmountMST) de todos los registros con el proveedor deseado (AccountNum) de esta tabla, llamada VendTransOpen.
Recordar que esta tabla se relaciona con la tabla de transacciones a través del campo Referencia de recid (RefRecId), que debe coincidir con el RecId de la tabla de transacciones. De esta manera, una transacción puede tener relacionadas múltiples transacciones abiertas, por ejemplo porque cada una de ellas tenga distintos vencimientos.

Integridad entre ambas
1. No puede haber transacciones abiertas no relacionadas con una transacción
2. No puede haber transacciones abiertas relacionadas con una transacción que tenga informado el campo Fecha cerrada (Closed)
3. Toda transacción que no este cerrada, Fecha cerrada no informado, debe tener relacionado al menos una transacción abierta relacionada.
4. La suma de las transacciones abiertas de una transacción debe coincidir con la operación Importe (AmountMST) - Divisa liquidada (SettleAmountMST) de dicha transacción.

jueves, 27 de febrero de 2014

Ax2012, AIF Services

Tras una segunda lectura del libro "Microsoft Dynamics Ax 2012 Services" publicado por Pack Publishing, voy a tratar de sintetizar los concepto clave y conclusiones que extraigo.

Microsoft ha realizado un esfuerzo grande para que Ax proporcione los medios, más que suficientes, para que el sistema sea conectable con cualquier otro sistema. Para ello, el servidor de aplicaciones (AOS) se ha convertido en un host WCF (Windows Communication Foundation, concebida para permitir una programación rápida de sistemas distribuidos y el desarrollo de aplicaciones basadas en arquitecturas orientadas a servicios, SOA)

Las ventajas que ello trae son:

  1. Podemos diseñar y programar nuestros servicios en X++, reutilizando la lógica que ya tenemos!
  2. No necesitamos IIS, si nos limitamos al ámbito de la red local
  3. Posibilita el uso de todos sus protocolos, tanto los síncronos y asíncronos (NetTcp, HTTP, FileSystem, MSMQ)
  4. Poblemos emplear IIS para servicios expuestos fuera de nuestra red local, y la comunicación entre IIS y AOS ya no se realizará mediante Business Connector sino como WCF Routing.
  5. Podemos publicar servicios básicos (netTcp) de una forma sencilla

Veamos gráficamente y fundamentalmente lo que ofrece:

Como podemos ver hay varios tipos de servicios, vamos a entrar en detalle en cada uno de ellos y sobre todo en cuál es su utilidad y cuando deben ser utilizados.

Document services
Permiten exponer un documento (una o varias tablas) y realizar operaciones CRUD sobre el mismo. Su desarrollo es más laborioso, requiere definir una query, unas tablas (Axd) y una clase para el documento y otra para el servicio. Las operaciones CRUD se simplifican ya que en la tabla Axd podemos incluir la lógica de acceso a datos y sus validaciones.
Es recomendado para servicios complejos y que deriven en operaciones con datos, aunque hemos de tener cuidado con los cambios en el esquema de datos de las tablas que se emplean, ya que pueden alterar el servicio.

Custom services
Se desarrollan en base a una clase de contrato (service contract) que contendrá la lógica y un conjunto de clases de datos (data contract) que definirán los parámetros de entrada y salida.
Son recomendables para servicios menos complejos, servicios de proceso y no tanto orientados a datos. Son más sencillos y flexibles a la hora de desarrollar, no seremos dependientes del modelo de datos e incluso podemos llegar a reutilizar los data contract entre diversos servicios.
El nuevo marco de SysOperation será ideal para que reutilicemos la lógica de proceso para clientes Ax como para sus servicios, debemos orientar nuestros desarrollos a ese nuevo marco e ir discontinuando el uso de RunBase.


System services
Estos servicios son proporcionados out-of-the-box, por lo tanto están a nuestra disposición para ser consumidos desde soluciones externas. Tenemos a disposición:

  • Query service: Facilita consultar información de tablas y campos Ax, pero no de métodos, por lo tanto no podemos obtener datos calculados y re aprovechar esa lógica. Los datos son devueltos en un DataSet. Ese acceso puede hacerse utilizando:
    1. Una query ya definida en el AOT
    2. Una query definida al vuelo mediante la clase QueryMetadaClass
    3. Una query dinamica definida como clase extendida de AIFQueryBuilder
  • Metadata service: Permite acceder a información de los metadatos de objetos de AOT. Por ejemplo obtener el nombre de las tablas, propiedades, etc.
  • Session service: Nos proporcionará información de la sesión por la que estamos realizando la conexión. Podremos consultar el usuario, idioma, empresa, etc.