Mostrando entradas con la etiqueta automation. Mostrar todas las entradas
Mostrando entradas con la etiqueta automation. Mostrar todas las entradas

miércoles, 22 de abril de 2015

Envío email a traves de librerias outlook


Con esta función se consigue enviar un correo utilizando las librerias de outlook. existen varias opciones tanto de formato como de tipo de envio ya sea enviado directamente o levantando el cliente Outlook para comprobar antes de enviar. Para ello primero vamos a crear dos variables locales tipo automation asignando librerias de Outlook.

    - OMail Automation 'Microsoft Outlook 9.0 Object ibrary'.MailItem
    - OApp Automation 'Microsoft Outlook 9.0 Object ibrary'.Application



En este caso se ha puesto la versión 9.0 porque es la versión que tengo instalada en mi equipo. Es necesario que todos los equipos desde donde se va lanzar esta función tengan instalada mínimo la misma versión con la que se han definido las variables. No habría problema con los equipos que tengan instalada una versión superior de las librerías ya que leerían las dll perfectamente no asi los equipos con versiones anteriores.


la funcion creada tiene varios parámetros :
eMail - dirección de correo del o de los destinatarios.
RutaPlantilla - Es la ruta al fichero de plantilla con la que abrir el correo.
RutaYFichero - Ruta del documento adjunto.
MostrarCorreo - Es un booleano para determinar si queremos o no levantar el cliente Outlook antes de enviar el correo

IF ISCLEAR(OApp) THEN
  CREATE(OApp,FALSE,TRUE);
//OMail := OApp.CreateItem(0); //Si NO utilizamos plantillas
OMail := OApp.CreateItemFromTemplate(rutaplantilla); //Si se usan plantillas
OMail."To":=eMail;
IF RutayFichero <> '' THEN
  OMail.Attachments.Add(RutayFichero); //Si queremos adjuntar un fichero
OMail.Subject :=Asunto;
//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.
IF MostrarCorreo=TRUE THEN
  OMail.Display //levanta el cliente correo si no se llama a esta funcion envai el correo                 directamente.
ELSE
OMail.Send;



jueves, 2 de junio de 2011

Recorrer Xml en Navision

Como la propia funcionalidad de Navision no nos permite realizar lectura de ficheros Xml tendremos que crear variables "automation" que puedan tratar ficheros Xml.

Variables a Crear

locautXmlDoc Automation 'Microsoft XML, v6.0'.DOMDocument
XMLNodeList Automation 'Microsoft XML, v3.0'.IXMLDOMNodeList
XMLNode Automation 'Microsoft XML, v3.0'.IXMLDOMNode
XMLNodeBucle Automation 'Microsoft XML, v3.0'.IXMLDOMNode
vConta Integer
vConta2 Integer


Tambien es necesario crear dos funciones para tratar los ficheros. Una función es para recorrer los nodos del propio Xml (LoadNodeList) y otra que recorra todos los nodos pero de la lista que ya hemos leido(Load node)

Funcion LoadNodeList

XMLDocument : Automation "'Microsoft XML, v3.0'.IXMLDOMDocument2";VAR XMLNodeList : Automation "'Microsoft XML, v3.0'.IXML;VAR ElementName:Text

XMLNodeList := XMLDocument.getElementsByTagName(ElementName);

Funcion LoadNodelist

XMLNodeList : Automation "'Microsoft XML, v3.0'.IXMLDOMNodeList";VAR XMLNode : Automation "'Microsoft XML, v3.0'.IXMLDOMNode";VAR RecordIndex:Integer

XMLNode := XMLNodeList.item(RecordIndex);

Una vez creadas estas funciones que nos van a ayudar a reconocer los elementos del xml vamos con el cuerpo del código. Se ha hecho un aplicación que lea nodos hasta un máximo de dos niveles de jerarquía. Si existiesen más niveles unicamente sería necesario ir añadiendo código siguiendo el mismo criterio que el primero de los hijos.


Código

XMLDocument.load('C:\NewPolizaInstance.xml'); //se carga el fichero
LoadNodeList(XMLDocument,XMLNodeList,'newPolizaInstanceResponse');//se cargan los nodos a partir del descrito
TotNumbOfRecsA := XMLNodeList.length; //se sacan el numero de nodos
LoadNode(XMLNodeList,XMLNode,0); //se cargan los nodos de la lista que hemos sacado
IF TotNumbOfRecsA > 0 THEN REPEAT
//aquí empezamos a recorrer los hijos que cuelgan del metodo buscado
XMLNodeList2 :=XMLNode.childNodes;
LoadNode(XMLNodeList2,XMLNodeBucle,0);

//cargamos los nodos hijos
IF XMLNodeBucle.hasChildNodes THEN

FOR vConta:=0 TO XMLNodeList2.length DO BEGIN
//si cada nodo hijo tiene hijos se recorre
//comprobar que tiene hijos el nodo

XMLNodeList3:=XMLNodeBucle.childNodes;
//aquí el tercer nivel de jerarquia
LoadNode(XMLNodeList3,XMLNodeBucle2,0);

IF XMLNodeBucle2.hasChildNodes THEN


FOR vConta2:=0 TO XMLNodeList3.length DO BEGIN

IF UPPERCASE(XMLNodeBucle2.nodeName) = 'PR' THEN

//con esto se opera para un nodo en concreto, en este caso
XMLNodeComprobar :=XMLNodeBucle2.childNodes.item(0);
// se introduce la información en una tabla en caso de que
IF NOT ISCLEAR(XMLNodeComprobar) THEN
// el nodo se llame programa
rLecturaXml.text1:=XMLNodeComprobar.text;
END;
XMLNodeBucle := XMLNodeList2.nextNode;
END;
XMLNode := XMLNodeList.nextNode;
UNTIL ISCLEAR(XMLNode);