lunes, 31 de enero de 2011

Envío de correos electrónicos en NAV mediante Outlook

Navision tiene la posibilidad de enviar correos mediante la Code Unit 400 y  el Automation ‘Microsoft Navision Mail.SmtpMessage‘, que se registra en la instalación del cliente de Navision.
Gracias a esto tenemos la posibilidad de realizar desarrollos que nos permitan por ejemplo enviar correos electrónicos a nuestros clientes adjuntando sus facturas.
Este Automation nos es muy útil pero a su vez es limitado. En ocasiones queremos poder tener más potencia en cuanto al envío de correos electrónicos. Este tipo de características que no son cubiertas, las podemos cubrir en muchos casos con los Automations de Outlook.
Gracias a estos Automations, podremos por ejemplo mandar los correos con acuse de recibo y lectura, enviar correos con plantillas creadas en Outlook e incluso interactuar con sus contactos. Para ello en cada  equipo cliente de Navision deberemos de tener instalado y configurado un cliente de Outlook (versión 2003 en adelante).
Vamos a ver un ejemplo de un envío de correo con adjunto, con acuse de recibo y lectura y con una plantilla creada en Outlook.

Para el ejemplo he utilizado Microsoft Dynamics NAV R2 con Outlook 2003.

Lo primero será tener un plantilla de Outlook (*.oft) con el diseño deseado. Nótese que la función de plantillas es incompatible con la función de escribir un cuerpo en el correo, es decir o decidimos poner una plantilla o escribir el cuerpo con el texto deseado.
Creamos las siguientes variables en la Code Unit donde vayamos a poner el código:

Name   DataType         Subtype           Length
OMail  Automation      'Microsoft Outlook 11.0 Object Library'.MailItem
OApp  Automation      'Microsoft Outlook 11.0 Object Library'.Application

Y el código sera el siguiente:
//Envío correo mediante dll Outlook
IF ISCLEAR(OApp) THEN
  CREATE(OApp,FALSE,TRUE);

//OMail := OApp.CreateItem(0);//Si no utilizamos plantillas
OMail := OApp.CreateItemFromTemplate('C:\Plantilla Correos\plantilla.oft');

OMail."To" := 'correodestino@correo.com';
OMail.Attachments.Add('C:\Plantilla Correos\adjunto.xml'); //Si queremos adjuntar un fichero
OMail.Subject := 'Asunto del correo';
//OMail.Body := 'El cuerpo del mensaje'; //O ponemos este código o el de la plantilla.
OMail.OriginatorDeliveryReportRequested := TRUE; //Confirmación de recepción.
OMail.ReadReceiptRequested := TRUE; //Confirmación de lectura.
OMail.Send;

Como curiosidad debido a un tema de límite de tamaño interno de nombres cuando escribimos o seleccionamos la función OMail.OriginatorDeliveryReportRequested, Navision nos copia OMail.OriginatorDeliveryReportRequest, con lo que cada vez que entramos en la Code Unit y modificamos código nos da error de que no existe la variable OriginatorDeliveryReportRequest porque no reconoce ese nombre y debemos de poner ‘ed’ al final del nombre de la función cada vez.

martes, 11 de enero de 2011

Simular "Skip All" en el formulario de importación de objetos

En muchas ocasiones echamos de menos la existencia el botón de “Skip All” en el formulario de importación de objetos. ¿Quien no ha tenido alguna vez un fob como numerosos objetos y solo tenía que importar una pequeña parte de ellos?.


Yo cuando no conocía la posibilidad de hacer lo siguiente, me ha tocado destrozar el F8 + Cursor Abajo como un energúmeno para marcar con Skip todos los objetos. Con este pequeño truco podremos seleccionar solo los objetos deseados sin tener que manualmente marcarlos como Skip.
El truco es simple, consiste en utilizar la funcionalidad que tienen Navision en los formularios tipo lista, de marcar las líneas deseadas con Ctrl + F1. Tras la selección de las mismas pulsamos a Ver -> Solo los marcados. De esta forma nos quedará el formulario de importación de objetos solo con los que hemos marcados. Tras estas acciones, lo de siempre, “Replace All” y Aceptar.
De la misma forma podemos también utilizar los filtros de Navision (F7), si por ejemplo tenemos los objetos versionados correctamente, o si queremos solo las tablas o un objeto en concreto.



          


martes, 4 de enero de 2011

Como "buscar" en las variables y funciones del entorno de programación de NAV

Hola a tod@s, para empezar mi andadura en el mundo de los Blogs y particularmente en el de los Blogs acerca del ERP Microsoft Dynamics NAV, he decidido escribir una primera entrada sobre algo muy sencillo, que muchos de los profesionales de Microsoft Dynamics NAV ya conocerán, pero que muchos otros no y que seguro que les resultará muy útil. Par mí lo fue en su momento (sobre todo cuando se está empezando) y lo sigo utilizando a diario.

Quien no se ha preguntado, ¿porque no puedo buscar en las variables globales?,estoy buscando donde se utiliza una variable, pero no sé como se llama, o sé que tipo de Record es pero no sé con que nombre está la variable que lo instancia o ¿porque no puedo buscar en la lista de las funciones de una Code Unit?

Bueno, pues con este pequeño truco no lo vas a conseguir del todo, pero te podrá ayudar ;)

Ejemplo :

Estoy en la Code 80 buscando algo relacionado con los cargos de producto, más concretamente quiero buscar la variable "TempItemChargeAssgntSales", pero como el nombre es un poco complicado y no me acuerdo, pues me voy a las variables globales y la voy  buscar, claro hay un montón de variables y es un "coñazo" tener que buscarla con la vista.
Truco :
     1 - Nos situamos en la prima línea de las lista de las variables globales.
     2 - Pulsamos la tecla Shift (la que está debajo del Bloq. mayúsc.).
     3 - Pulsamos la tecla del cursor abajo sin soltar el Shift.
     4 - Podemos soltar el cursor pero no el Shift.
     5 - Pulsamos en nuestro caso la tecla T, repetidas veces hasta encontrar la variable buscada.

Es decir podemos buscar por la primera letra.

Parece complicado pero cuando lo utilizas a diario, se hace muy sencillo. Este tuco se puede utilizar tanto en el nombre de la variable como en el Subtype de la misma (locales y globales). Y como he comentado antes, en las funciones, siendo en este caso también bastante útil. Incluso dentro de una Code va saltando por la primera letra del código de las líneas de la misma.

Revisión : También funciona para los campos en las tablas.

Un saludo, y espero que a alguien le sirva de ayuda.... :)