<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3649773826080443777</id><updated>2012-02-01T04:03:00.661-08:00</updated><category term='VB Script'/><category term='Tablas'/><category term='Errores'/><category term='Presentación'/><category term='Addin'/><category term='Informes'/><category term='Qlikview'/><category term='Javascript'/><category term='Arquitectura'/><category term='Recordref'/><category term='Fieldref'/><category term='ERP'/><category term='fichero zup'/><category term='VS2008'/><category term='Interop'/><category term='C#'/><category term='Introducción'/><category term='NAVidad'/><category term='CAL'/><category term='Servidor'/><category term='SMTP'/><category term='Dynamics'/><category term='Controles extendidos 2009'/><category term='RDLC'/><category term='googlegagdet'/><category term='Licencia'/><category term='Flowfields'/><category term='Servicios web'/><category term='NAV'/><category term='Objetos'/><category term='registros'/><category term='Utilidad'/><category term='Automation'/><category term='google'/><category term='Roletailored'/><category term='Excel'/><title type='text'>Dynamics NAV blog Español</title><subtitle type='html'>Blog de teoría, programación y ejemplos de Dynamics NAV en español.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>49</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-5882659319039630520</id><published>2012-02-01T04:03:00.000-08:00</published><updated>2012-02-01T04:03:00.670-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Controles extendidos 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='Addin'/><title type='text'>Uso de controles extendidos en NAV 2009 R2 III</title><content type='html'>&lt;br /&gt;&lt;div&gt;&lt;b id="internal-source-marker_0.42020317330025136"&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Hola,&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Continuamos con el ejemplo de este nuevo control extendido en C#. A continuación vamos a ver cómo desarrollar la parte de la lógica del control en C# e integrar la comunicación con Dynamics NAV correctamente.&lt;/span&gt;&lt;span style="font-weight: bold; text-decoration: none; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Para poder hacer un control extendido, hay que tener en cuenta los siguientes pasos fundamentales, hago un repaso rápido:&lt;/span&gt;&lt;ol style="font-weight: bold;"&gt;&lt;li style="font-size: 13px; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Nuestro proyecto tiene que tener referencia a la librería Microsoft.Dynamics.Framework.UI.Extensibility.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Nuestro proyecto debe encontrarse firmado.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;No olvidar la sentencia &amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;[&lt;/span&gt;&lt;span style="color: #2b91af; font-family: 'Courier New'; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;ControlAddInExport&lt;/span&gt;&lt;span style="font-family: 'Courier New'; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;(&lt;/span&gt;&lt;span style="color: #a31515; font-family: 'Courier New'; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"NombreParaNav"&lt;/span&gt;&lt;span style="font-family: 'Courier New'; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;)]&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Heredar la clase&lt;/span&gt;&lt;span style="font-family: 'Courier New'; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af; font-family: 'Courier New'; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;StringControlAddInBase&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Todo esto se puede ver en más detalle en el post que publiqué hace bastante tiempo referente a los controles añadidos &lt;/span&gt;&lt;a href="http://dynamicsnaves.blogspot.com/2010/07/uso-de-controles-extendidos-en-nav-2009.html" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;aquí&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Una vez que tenemos establecidas las bases necesarias para nuestro control, tenemos que definirlo. Para ello, vamos a utilizar un control que ya existe en el cliente de Roles, y vamos a modificar su comportamiento para que pueda hacer más acciones, el control a utilizar es la pila de documentos (stack, en inglés).&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;La librería que contiene los controles del cliente de roles, se denomina &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Microsoft.Dynamics.Framework.UI.Winforms.Controls&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, agregamos la refenrencia a nuestro proyecto.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;img height="228px;" src="https://lh5.googleusercontent.com/dKrKB__k4OvP-uxobadyzy3XFEZYLKsGGFz3lA2DYmZDloc6IbiOdnrQBZMSxMJzUJR2J9MpF3N6_NYU-2kdYnxqyAsXDFUTj_-M-IrE-WAVVs9m4OQ" width="305px;" /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Añadimos las sentencias Using para poder utilizar las clases correspondientes:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;img height="181px;" src="https://lh6.googleusercontent.com/85EHk_vmsLLCP6-r2cDc12cB6BJF3Cm_JAZYvT59c59YZoqQohui_l0hJgGSlsYioYPf47N3aIL3pOPXa_v2KphhzLRXPV0sSH3LfX7c953OQvh0JBc" width="430px;" /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;En este punto, establecemos el objeto que será la base de nuestro control extendido, y uno del tipo String para poder almacenar la ruta de fichero de texto que se arrastra dentro de nuestro objeto, y que regresará a Dynamics NAV para poder crear el vínculo.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;b&gt;&lt;img height="138px;" src="https://lh5.googleusercontent.com/OYOa6oBfG4m-sK0FKJhYAist6lidVX_TWY2_tlPML-BD1gknJ7_KszruXz40EUMIE1cZsZ2JJU9jGRk5Wu_w2QO8grx4y4LhSNZpZot0fMWYSd-rbRE" width="567px;" /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Ahora tenemos que definir la construcción y creación de nuestro control, estableciendo el aspecto y eventos disponibles del mismo.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;img height="461px;" src="https://lh4.googleusercontent.com/tFbHqVHtsaAvFyO3U1eBYbzP8r3uzsBrf0reugB1GKZ-JrpQQ-untVCrSmLCXhxqfDSJD0fk2DzwK4Q2uqt9JegEdUAgaU1C8ELYRVGOsRycepCJM5c" width="567px;" /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Algunos aspectos importantes a destacar de este proceso. Para poder utilizar la pila de documentos, (objeto stack) tenemos que utilizar también el objeto &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;StackRenderer&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, que es el que se encarga de gestionar la visualización de la pila de documentos. Además de las propiedades mas habituales de cualquier control C# (posición, permitir arrastrar encima, transparencia…), la parte importante es añadir los dos eventos nuevos de arrastre &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;DragDrop&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; y &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;DragEnter&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;para añadir este nuevo comportamiento a nuestro control. También es fundamental activar la propiedad &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;AllowDrop&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; a true.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;NOTA: Aunque aparece disponible, no he conseguido acceder al parent del control ni nada parecido, se encuentra protegido. El cliente de NAV cerrará inmediatamente si intentamos acceder de esta forma a algún componente del cliente de roles.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Ahora llega el punto directamente relacionado con NAV, como podemos acceder desde NAV al control y viceversa? Pues bien, por un lado tenemos la propiedad Value del control que corresponde con el SourceExpresion que indiquemos al control desde NAV. Para ella, definiremos que el numero de documentos en pila corresponda con el SourceExpr de NAV.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;img height="136px;" src="https://lh6.googleusercontent.com/StxG_BgRDRdqU4242YgP3mooSJ6azSNGrhD9m8lu6JAL4K9-CObhXbSmSE90YrzMiKq29qqGc5TY4fdyV3BVB0fbTSIW7dafD_wJsgnkn2eUKfLKYaM" width="567px;" /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Hasta aquí la propiedad Value es la misma que tratamos en el post anterior.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Ahora bien, tenemos que comunicar el control con NAV en algún punto, es decir, cuando se produzca el evento de arrastrar encima, tenemos que añadir la ruta obtenida del fichero a NAV para que cree un vínculo.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Para ello, por un lado dentro de NAV disponemos de un evento genérico para todos los controles de nuestras páginas &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;OnControlAddIn.&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; Dentro de ese evento, hacemos un ADDLINK dentro de la página de NAV correspondiente:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;img height="38px;" src="https://lh6.googleusercontent.com/OKp6n3PdLV-gNR6kAMPuF0e4svc3-5eqYlevXHfCd4cf1W9nba_i23SdmqN3lpP4kfJR1uaKn2mSx-4KDUPeH-vxixV98Gu5F2NdqozUBJp-NDKHS4M" width="567px;" /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Por otro lado, indicamos la información a enviar y el id numérico del evento en la llamada de C#, dentro de nuestro propio evento C#, mediante la sentencia &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;RaiseControlAddInEvent&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;img height="323px;" src="https://lh6.googleusercontent.com/tqkGUdytuNvsXa7p-mO_xXgJjLyn5hR0sLwKZp81JUO0pdUMQHvZm6xenURbpeetIn_DuWHjYXnLp1wieqg6fxp1uMIsP7xO7sX8nUwU199XvSsy14o" width="417px;" /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;NOTA: En este caso sólo existe un evento que queramos controlar en NAV, si quisiéramos gestionar varios eventos en el control dentro de C# que disparen el evento de NAV, tendremos que utilizar el entero para evaluar y programar los comportamientos en NAV. Básicamente N eventos de C# corresponderán con un único evento NAV, controlando de qué evento se trata con el parámetro index.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Finalmente ya tenemos nuestro nuevo control extendido, reutilizando uno ya existente de roles, y ampliando su comportamiento dentro de NAV, relacionando los eventos del control propios de C# con los eventos de NAV, lo que nos otorga mayor capacidad de manejo e integración desde el control extendido con NAV.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Compilamos nuestro proyecto en C# y generamos la dll (Al final del post existe un link para poder descargar el codigo y dll). En este caso, para poder registrar nuestro control extendido, en lugar de utilizar las herramientas indicadas en post previos, he utilizado una nueva, que se encuentra desarrollada por Christian Abeln aquí:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #1155cc; font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://blogs.msdn.com/b/cabeln/archive/2009/06/08/registration-tool-for-dynamics-nav-roletailored-client-add-ins.aspx" style="font-weight: bold;"&gt;http://blogs.msdn.com/b/cabeln/archive/2009/06/08/registration-tool-for-dynamics-nav-roletailored-client-add-ins.aspx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;span style="color: #1155cc; font-family: Arial;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Se trata de un pack de objetos con un formulario con una codeunit que agiliza bastante el proceso. Por último, indicamos el control en la propiedad de la página de Dynamics NAV:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;img height="236" src="https://lh4.googleusercontent.com/nFJwDZwTHHBfeBEQRGZGuCnwZdg4zNwJDQyOaosnnHc2ZmnHN2CoYI9Q9BZiSgSAu_CrtoPgCqS68I8SbBYmZKZ3b2c-Bc3e9gv939SqreXBWBL1I28" width="400" /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Con esto, ya tenemos nuestro nuevo control a la última moda con arrastrar y soltar para poder crear nuestros vínculos al documento que queramos, y con un aspecto muy visual, sin romper con el aspecto del cliente de roles.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Un saludo.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Enlaces a los ficheros utilizados en el ejemplo:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- &lt;/span&gt;&lt;a href="http://dl.dropbox.com/u/52153328/Objetos%20NAV%20-%20ArrastrarVinculoNAV.zip" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Objetos Dynamics NAV (Ojo, Dynamics NAV 2009 R2)&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- &lt;/span&gt;&lt;a href="http://dl.dropbox.com/u/52153328/PROYECTO%20VS2008%20-%20ArrastrarVinculoNAV.zip" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Proyecto Visual Studio 2008&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- &lt;/span&gt;&lt;a href="http://dl.dropbox.com/u/52153328/DLL%20-%20ArrastrarVinculoNAV.zip" style="font-weight: bold;"&gt;&lt;span style="color: #1155cc; font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;DLL Generada&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-5882659319039630520?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/5882659319039630520/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2012/02/uso-de-controles-extendidos-en-nav-2009.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/5882659319039630520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/5882659319039630520'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2012/02/uso-de-controles-extendidos-en-nav-2009.html' title='Uso de controles extendidos en NAV 2009 R2 III'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-6406925948435823335</id><published>2012-01-24T08:29:00.000-08:00</published><updated>2012-01-24T08:29:09.748-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Recordref'/><category scheme='http://www.blogger.com/atom/ns#' term='Controles extendidos 2009'/><title type='text'>Uso de controles extendidos en NAV 2009 R2 II</title><content type='html'>&lt;br /&gt;&lt;div&gt;&lt;b id="internal-source-marker_0.8096637516282499"&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Hola,&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;En este post vamos a proseguir con esta serie de post que tratan acerca de cómo programar en NAV 2009 R2 un control extendido, re-utilizando y ampliando el funcionamiento de un control extraído del cliente de roles, la pila de documentos.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;img height="331px;" src="https://lh5.googleusercontent.com/EmkJo7guRdLRlLlqQ0iQXgI0riLeK2uSCipHHW3idXNp--HD4JPcjwe4XRgip4l1CANgTUeIQ2hL7ZSf7-uzOavAvU51WaJHFiHRNG_NuBQSGWcDGt0" width="483px;" /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Antes de comenzar con el desarrollo del control añadido en C#, tenemos que tener claro en el lado de Dynamics NAV como va a funcionar este control y que necesitamos que haga NAV con él.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;En principio la necesidad es que el control sea capaz de indicarnos los vínculos que tiene un documento relacionados. Un registro solo consta de las siguientes funciones relacionadas con vínculos:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;img height="180px;" src="https://lh5.googleusercontent.com/PpBR5EyXXrizLFwlYEUe4xUtDGeknnWzPI174QPYPmfF0Ogw9HG6dXpgY25QjslK03BhbW2w8koHXiAFVXp28k4AouUQ7H0LLqCNGb2AswNaTbqBTvA" width="464px;" /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;ADDLINK: &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Esta función permite añadir un vínculo al registro actual, ya sea mediante una ruta a un fichero local en nuestro PC, una url web, etc..&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;DELETELINK:&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;Cuando un vínculo es generado, automaticamente se le asigna una clave numerica (ID), si pasamos este id al método el vínculo es borrado.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;DELETELINKS: &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Borra automaticamente todos los vínculos relacionados con un registro.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- COPYLINKS: &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;Permite copiar vínculos entre registros diferentes.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;- HASLINKS: &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Devuelve verdadero/falso si el registro asociado tiene vínculos.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;NOTA: Los vínculos existen en NAV desde la versión 5.0. Anteriormente no existe esta funcionalidad.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Por tanto, no existe ningun modo estándar que nos permita conocer cuantos vínculos tiene relacionados un registro. Para poder conocer este dato, la solución propuesta es construir una función dentro de la tabla deseada que nos devuelva el numero de vinculos que tiene cada registro.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Lo primero de todo, es localizar y ver como se almacenan los vínculos. &amp;nbsp;La tabla en cuestión que necesitamos es la tabla &amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;2000000068, Record Link&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;:&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;img height="269px;" src="https://lh6.googleusercontent.com/poQKIull_cwhm3aBQ6lAkd3XObBN2DPHG70je18w-U5N_nYOYOrtetkkGX57eRFtAQ5zpPlRFY3wbSrbkeLgYXbkTxL0pFbH_CAKbZRT3na_cPXYBVM" width="567px;" /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Esta &amp;nbsp;tabla tiene como clave un numero entero, denominado LinkID, y las diferentes URL e información del vinculo. El campo importante es Record ID, que se trata de un dato del tipo RecordID. Este tipo de dato no es demasiado usual en los desarrollos de NAV, y sirve para identificar inequívocamente cada registro de una tabla. &amp;nbsp;Para poder trabajar mejor con este tipo de dato, utilizo la variable RecordRef, tal y como vemos a continuación.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;NOTA: Como utilizar las variabres recordref, fue tratado en este post: &lt;/span&gt;&lt;a href="http://dynamicsnaves.blogspot.com/2010/11/uso-de-recordref-y-fieldref-en-nav.html" style="font-weight: bold;"&gt;&lt;span style="color: #000099; font-family: Arial; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;http://dynamicsnaves.blogspot.com/2010/11/uso-de-recordref-y-fieldref-en-nav.html&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;El método &amp;nbsp;creado dentro de la tabla &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;112 Sales Invoice Header&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;se llama &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;ObtenerNumeroVinculos &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;y contiene &amp;nbsp;las siguientes variables:&lt;/span&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li style="font-family: Verdana; font-size: 13px; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;ReferenciaRegistro&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;RecordRef&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: Verdana; font-size: 13px; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;TableInfo&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;Record&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Table Information&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-family: Verdana; font-size: 13px; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;RecordLink&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;Record&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Record Link&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;La función retorna un entero, que es el número de registros de tipo vínculo que encuentra para un registro concreto, de la siguiente forma:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;img height="338px;" src="https://lh3.googleusercontent.com/6_SyHE-HUX1e-23gRpuocS_fGpsTfl455Fs-qhGaZ5u7cCd9OdA_NcpXAjN-urdqaufGPoUAYzLJXfC4rjgp51JoTuKzECG_Wb98JBPccLaxoJoZ1dk" width="567px;" /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Para tratar de hacer el método lo más generalizado posible (fácilmente replicable para todas las tablas que necesitemos mediante copiar-pegar), &amp;nbsp;a través de la tabla &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Table Information&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, obtenemos el numero de tabla actual. Luego ejecutamos el método OPEN para abrir la tabla obtenida, y GETTABLE, para obtener el registro concreto. Mediante un setrange, ya se puede conocer el numero de registros con el record id del registro actual, y devolverlo en el último momento, ya que la función devuelve un entero.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Con esto ya tendríamos la parte necesaria para conocer el numero de vínculos en cada registro. &amp;nbsp;Llamando al método en la página de facturas de venta, como la SourceExpr de tipo campo, tenemos un cuadro de texto con el numero de vínculos.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;img height="178px;" src="https://lh4.googleusercontent.com/9UOK4EU5YMwV8sEr2FNhERlKmtX-0algt2-iWyPia6jxWQ4KlDucK4ItFW2mI9HPQeAPFxF_yiikUIGtbH_mIvGLkA_4TYM-G3hWl5qAdWoOw2tsWr0" width="485px;" /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Ahora falta añadir la funcionalidad de añadir un vinculo a nuestro registro. Esto lo haremos ya mediante el control propiamente desarrollado en C# y llamando a NAV, en &amp;nbsp;siguientes post.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Nos leemos,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Un saludo.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;El objeto de tipo tabla realizado en el post, aquí: &lt;/span&gt;&lt;a href="http://dl.dropbox.com/u/52153328/Tabla112Vinculos.fob" style="font-weight: bold;"&gt;&lt;span style="color: #000099; font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;http://dl.dropbox.com/u/52153328/Tabla112Vinculos.fob&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-6406925948435823335?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/6406925948435823335/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2012/01/uso-de-controles-extendidos-en-nav-2009_24.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/6406925948435823335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/6406925948435823335'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2012/01/uso-de-controles-extendidos-en-nav-2009_24.html' title='Uso de controles extendidos en NAV 2009 R2 II'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-723609423684155654</id><published>2012-01-19T15:54:00.000-08:00</published><updated>2012-01-19T15:55:36.969-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Controles extendidos 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='Addin'/><title type='text'>Uso de controles extendidos en NAV 2009 R2 I</title><content type='html'>&lt;br /&gt;&lt;div&gt;&lt;b id="internal-source-marker_0.18437986774370074"&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Hola a todos,&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Hace bastante tiempo, publiqué un breve post acerca de la creación de controles extendidos (Control addin) para el cliente de roles en NAV 2009 SP1.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;NOTA: El link anterior es este:&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="color: blue; font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://dynamicsnaves.blogspot.com/2010/07/uso-de-controles-extendidos-en-nav-2009.html" style="font-weight: bold;"&gt;http://dynamicsnaves.blogspot.com/2010/07/uso-de-controles-extendidos-en-nav-2009.html&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: blue; font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Tras esta breve toma de contacto, voy a tratar de profundizar en bastantes aspectos de los controles extendidos que resultan &amp;nbsp;interesantes y dar una vuelta de tuerca a la reutilización de recursos existentes en el cliente de roles de Dynamics NAV para nuestros desarrollos. En el ejemplo que voy a tratar en esta nueva serie de post, voy a realizar un nuevo control extendido, pero éste va a tener alguna nueva peculiaridad que va a exigir que sea más completo que el visto anteriormente, teniendo mas integración con NAV que el anteriormente propuesto.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Con el nuevo control queremos arrastrar ficheros encima, y que &amp;nbsp;de forma automática se genere un vínculo para la ficha de documento donde nos encontremos. Por otro lado, en la pila de documentos nos mostrará con un número la cantidad de vínculos disponibles que tenemos para ese documento.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;La idea inicial es la siguiente, reutilizar el control de documentos del cliente de roles, modificando su comportamiento actual y reutilizándolo dentro de nuestro control extendido para el cliente de roles, mejorando la experiencia del usuario con la interfaz y agilizando el proceso de anexar documentos, sin dejar de lado la unificación del aspecto de nuestro control respecto a la interfaz de usuario que ya existe.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;FIG.1 Detalle del control de documentos:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-dUunqeRUA6k/Txir4o5tV0I/AAAAAAAAAR8/PUOQLEofIlQ/s1600/Docs.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="160" src="http://4.bp.blogspot.com/-dUunqeRUA6k/Txir4o5tV0I/AAAAAAAAAR8/PUOQLEofIlQ/s200/Docs.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;FIG. 2 Captura de funcionamiento:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;img height="328px;" src="https://lh6.googleusercontent.com/gPCnJPZu_H6Vdr7OMrvID_u8gh0Y9fz7lpPtZ-5t3P2Ohd88z_-xi3pRRsB9VsoQxau4hEPN2OkIeaHHYhgGbC4ly4Xo-xKpT0SJiOGvDu7Nvgpx14c" style="text-align: -webkit-auto;" width="451px;" /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Una vez que tenemos establecido el funcionamiento deseado, podemos comenzar a desarrollar, pero eso será en siguientes post.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Nos leemos,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Un saludo.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-723609423684155654?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/723609423684155654/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2012/01/uso-de-controles-extendidos-en-nav-2009.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/723609423684155654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/723609423684155654'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2012/01/uso-de-controles-extendidos-en-nav-2009.html' title='Uso de controles extendidos en NAV 2009 R2 I'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-dUunqeRUA6k/Txir4o5tV0I/AAAAAAAAAR8/PUOQLEofIlQ/s72-c/Docs.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-6146049612239658499</id><published>2012-01-11T04:50:00.000-08:00</published><updated>2012-01-11T04:50:13.233-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Automation'/><category scheme='http://www.blogger.com/atom/ns#' term='SMTP'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>SMTP y envío de correos desde Dynamics NAV III</title><content type='html'>&lt;br /&gt;&lt;div&gt;&lt;b id="internal-source-marker_0.8418023977428675"&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Hola,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Voy a comenzar el 2012 cerrando el asunto del SMTP y el correo, o de una forma más genérica, como registrar un fichero dll que hayamos desarrollado en C# como clase para poder utilizarlo como un automatismo dentro de Dynamics NAV.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;En el caso del ejemplo anterior, si hemos realizado los pasos descritos en el anterior post, al compilar nuestro proyecto desde VS2008, se informará de que no se puede iniciar un proyecto del tipo clase. Entonces debemos buscar los ficheros generados. En la carpeta de destino del proyecto, encontramos dos&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;ficheros:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;img height="108px;" src="https://lh3.googleusercontent.com/mlrplz4DLVLrWdIlzaso-6mP3JqcMu505lAmczJxjoMFXqBPtZE3T-PA5duidDde0nmGZ4KzFD4JWbCODR68EC7wj4AKCIgI9s55wskRWhFLOCEGyNw" width="211px;" /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Para poder utilizar en Dynamics NAV este fichero, debemos registrar en cada equipo que utilicemos estos ficheros la dll para poder utilizarla en NAV como un automatismo. Diversas soluciones podréis encontrar en la red para este tema. En este caso, yo he optado por utilizar es la siguiente.&lt;/span&gt;&lt;ol style="font-weight: bold;"&gt;&lt;li style="font-size: 13px; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Copiamos en la carpeta de instalación classic Dynamics NAV, el fichero .dll y .tlb.&lt;/span&gt;&lt;/li&gt;&lt;li style="font-size: 13px; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Creo un fichero bat, que utilizando el ejecutable del &amp;nbsp;Framework de NET, regasm.exe le indicamos lo siguiente:&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 13px; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\regasm.exe "C:\Archivos de programa\Microsoft Dynamics NAV\60\Classic\DynamicsNAV.Mail.Avanzado.dll" /tlb:"C:\Archivos de programa\Microsoft Dynamics NAV\60\DynamicsNAV.Mail.Avanzado.tlb" /codebase /verbose&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: x-small;"&gt;&lt;span style="white-space: pre-wrap;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;NOTA: Ojo, en algunas ocasiones esta sentencia me ha dado algún problema si el internet explorer se encuentra abierto, por tanto, recomiendo el tener cerrado el mismo cuando ejecutemos el batch.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Una vez registrado en el equipo, podemos utilizar la librería como un automation. Para ello, declaramos en el objeto que queramos una variable del tipo Automation. En este caso, &amp;nbsp;buscamos dentro de los automation, uno que corresponda con el nombre &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;DynamicsNAV_Mail_Avanzado, &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;que es el nombre de nuestro proyecto en VS2008 , y dentro de él tendremos nuestra clase:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;img height="249px;" src="https://lh4.googleusercontent.com/Y4La0iRlIhCR6gnAhyX-j48j1dHIJaMP5VFLyRp-7y45nipgH-PgovaUG6MYXFCPuFYP7EWsiCxi7djJ2NUvtuG5prj4CotRii0OycWQd3PLU5OUZP4" width="287px;" /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Para poder probar este nuevo automatismo, en mi caso, he realizado una pequeña codeunit con 2 variables y un poco de código:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;img height="468px;" src="https://lh6.googleusercontent.com/olG7Pk7S2UUkWDq00BPdYtcMgYAHAZsSciwO-1EcpQqEuHiK16tlqFX7bb_yFb1jgYIjMKhTFCHaLIn6fxM9Y4DfAUUgyw-MZ27Zrd-EWTpo0UXN4_Y" width="567px;" /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Esta crea una variable del tipo automation de la clase desarrollada, indica los datos del mail tanto de formato y contenido, como origen y destino. Finalmente, el correo se envía mediante el método Send.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Adjunto al final del Post dejo links a los objetos de Dynamics NAV se encuentran tanto un ejemplo del fichero batch, renombrado a txt, como la dll y el tlb.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Con esto, ya podéis comenzar a desarrollar vuestras clases en C# y reutilizarlas desde NAV. Personalmente, creo que tiene mucha más potencia y es mejor el uso de interoperabilidad de forma nativa que trabajar con automatismos, pero todavía hay muchos clientes que se encuentran en versiones previas y no compatibles a esta funcionalidad, y la única forma de aprovechar la potencia de NET es mediante automatismos.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Nos leemos,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Un saludo.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Link del ejemplo: &lt;/span&gt;&lt;span style="color: #000099; font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://dl.dropbox.com/u/52153328/Ejemplo%20SMTP.zip" style="font-weight: bold;"&gt;http://dl.dropbox.com/u/52153328/Ejemplo%20SMTP.zip&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;span style="color: #000099; font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt;Off-Topic: Un apunte fuera del ámbito de NAV, pero dentro de las tecnologías de Microsoft. Durante el desarrollo de esta dll, surgió la oportunidad de utilizar esta misma dll desde visual basic para aplicaciones, creando una macro desde Project que mandara mail por SMTP. Puedo confirmar que esta forma de crear DLL y registrarlas sirve también para si queremos desarrollar nuestras propias librerías para alguna Macro de vbs correctamente y llamarlas después.&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-6146049612239658499?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/6146049612239658499/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2012/01/smtp-y-envio-de-correos-desde-dynamics.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/6146049612239658499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/6146049612239658499'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2012/01/smtp-y-envio-de-correos-desde-dynamics.html' title='SMTP y envío de correos desde Dynamics NAV III'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-1944708643035600060</id><published>2011-12-30T01:08:00.000-08:00</published><updated>2011-12-30T01:08:13.835-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Automation'/><category scheme='http://www.blogger.com/atom/ns#' term='SMTP'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2008'/><title type='text'>SMTP y envío de correos desde Dynamics NAV II</title><content type='html'>&lt;br /&gt;&lt;div&gt;&lt;span id="internal-source-marker_0.8589484707918018"&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Hola,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Tras el primer post enfocando la problemática actual con Dynamics NAV con el envío de correos SMTP, voy a proponer una solución desarrollada, a pesar de que existe un parche que soluciona el problema de forma estándar en versiones 2009. Debido a que ya existe una solución, no voy a explayarme en la programación, pero sí en como generar y registrar un fichero DLL válido para Dynamics NAV con VS2008 y C#.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Lo primero de todo es que para generar un componente de estas características, desde VS2008, seleccionamos un nuevo proyecto, e indicamos Biblioteca de clases:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span style="font-weight: bold;"&gt;&lt;img height="242px;" src="https://lh5.googleusercontent.com/mu5QIi-lKbQmdTDo33uiKAJm3FH0E2-DNU630J-Wr6ezvOS1Ua0YVyDQh6ehQJzJxcfKX-gcMlksRoRqXMqTY4UcC7kceOVqvHGpx5HcG19ySbMfSFI" width="351px;" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Para poder hacer que una clase desarrollada en C# sea re-utilizable desde NAV, tenemos que tener en cuenta varios aspectos a la hora de desarrollarla. Lo primero de todo es incluir la librería &amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 13px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;System.Runtime.InteropServices &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;dentro de las clausulas using de nuestra clase, tal que así:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span style="font-weight: bold;"&gt;&lt;img height="160px;" src="https://lh4.googleusercontent.com/DdYKW7Kc95SEAP-gyqG1H8NCjLtO1_BcFESrI-V8kl_1XTD9vrsABAqmHKz_gJEivlgVpiBYK9vi_s8RNZcivk-dFjs4ZvCSSGfUhvndEXoTB2ozCyI" width="281px;" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;El uso de esta librería es para poder tener los miembros necesarios para poder efectuar la interoperabilidad COM. &amp;nbsp;Después de esto, hay que escribir varias sentencias necesarias para establecer los atributos necesarios para poder tener interoperabilidad:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span style="font-weight: bold;"&gt;&lt;img height="122px;" src="https://lh3.googleusercontent.com/EoK4rbIuEbGc-hk9dNcbN1V3wd6hKjmgpJLPioJPTGQyTrUIjW-SLy-yotU_P1JhnGCgMh-kyhv3ysvLS8t22tqTjqDsr7Ey5YfJoFHI7M_oYTf08jY" width="402px;" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Ojo, el ProgId debe ser el mismo que el nombre de nuestra clase. Se puede escoger entre los tipos de ClassInterface None y Autodual. &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Después, tenemos que indicar en el proyecto varias opciones para que nuestra clase funcione correctamente como COM. &lt;br /&gt;&lt;ol&gt;&lt;li&gt;En las propiedades del proyecto, dentro de la pestaña Aplicación, &amp;nbsp;buscamos el botón de información de ensamblado. Dentro de esta información, marcamos “Crear ensamblado visible a través de COM”&lt;/li&gt;&lt;/ol&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;img height="352px;" src="https://lh4.googleusercontent.com/eNT8sfb137ZB8hRTTdl6bma3CNQ-a7mJRFbCcS_eYFYv5SLhn2GXiF7aUR7OEuZ7dEGfy7s5vKNOpDElMyHxsFR7areP99nERnTcM3qDexy1CrYx21Y" style="font-size: 13px;" width="566px;" /&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;ol start="2" style="font-weight: bold;"&gt;&lt;li style="font-size: 13px; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Habilitamos la opción en “Registrar para interoperabilidad COM”, en la pestaña Generar:&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;img height="355px;" src="https://lh3.googleusercontent.com/xgB0aAaFliLLwyib3fjhkZluGh9Sv7Wxp7aLQ5UCgUmdUu7-hPc4U9SzEzAes1SNLLUF8akkCn6DhRB80FA34n8Lbn02tA46hdoqnOsqJJ_GYJbbHnc" width="567px;" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-weight: bold; text-align: left;"&gt;&lt;b id="internal-source-marker_0.8589484707918018"&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Con esto, ya tenemos nuestro proyecto y clase preparados para poder definir los atributos y métodos que queramos utilizar en ella sin problema. En este caso concreto, he definido la clase de la siguiente forma, os muestro el diagrama: (adjunto el el fichero.cs con el detalle al final del post)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-weight: bold; text-align: left;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-weight: bold; text-align: left;"&gt;&lt;b&gt;&lt;img height="370px;" src="https://lh4.googleusercontent.com/01fBpi60GU67BiIB8d3d0xiO834LjoM4NHmvPsfcNPmvZ51RytOIpIcuwJOI7rv-dAb8AJP06m9KlurSuYKKwJ5lbfXXFXX2hEitXt-KZ9SgKt61mLE" width="200px;" /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="font-weight: bold; text-align: center;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;El método Send es el que tiene más complejidad, ya que es el que aplica los nuevos parámetros que la DLL de NAV no utiliza:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;img height="309px;" src="https://lh3.googleusercontent.com/AA89tYTfw-TUFxLsNlaftykvE9NW5UOBrlo3iH-BI7kBwsKRS2OBkEtCKBXKlx8Xo_fEnR8qkLkuKoKq-swOIFpBC0JDJCPln1Ecyjhgu4hOgeAF728" width="566px;" /&gt;&lt;/b&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Lo mas importante de todo es definir los aspectos de la clase que son necesarios para poder utilizarla como COM, requisito fundamental para poder utilizar el DLL resultante desde NAV. Estas mismas operaciones deben ser completadas para poder desarrollar nuestros propios automatismos en C# para NAV.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;En el siguiente post, aclararé por último como registrar una dll generada con un proyecto de estas características. Pero esto será al año que viene ;) &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;espero que tengáis todos una feliz entrada de 2012, nos leemos!!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Un saludo.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;El link al archivo de clase del ejemplo en VS2008, aquí: &lt;/span&gt;&lt;a href="http://dl.dropbox.com/u/52153328/NavMailAvanzado.cs" style="font-weight: bold;"&gt;&lt;span style="color: blue; font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;http://dl.dropbox.com/u/52153328/NavMailAvanzado.cs&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-1944708643035600060?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/1944708643035600060/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/12/smtp-y-envio-de-correos-desde-dynamics_30.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/1944708643035600060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/1944708643035600060'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/12/smtp-y-envio-de-correos-desde-dynamics_30.html' title='SMTP y envío de correos desde Dynamics NAV II'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-7127064082686695661</id><published>2011-12-22T03:54:00.000-08:00</published><updated>2011-12-22T15:09:59.452-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Automation'/><category scheme='http://www.blogger.com/atom/ns#' term='SMTP'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>SMTP y envío de correos desde Dynamics NAV I</title><content type='html'>&lt;b id="internal-source-marker_0.7243192698806524"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Hola,&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="font-family: Calibri;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Hoy voy a comenzar una mini serie de artículos acerca del envío de correos desde NAV mediante el servicio SMTP, y en nuestro NAV, más concretamente con la codeunit 400.&lt;/span&gt;&lt;span style="background-color: transparent; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Tras varias personas que he visto que preguntan por el blog y foros, he querido profundizar un poco más en el tema.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;b style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img height="200" src="https://lh3.googleusercontent.com/iVrxiN7_qgns-j3ZIZRIGbIYFsaRqYSqQc-4u54Fvt-k9bHkxl8whFHETQDOotIdsfl-37GZuyLvbqkIdOcW1kuBo3Xk8A7mfqCBCfYz7-OIxbbf2rI" width="200" /&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;b&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Lo primero de todo, en que consiste el SMTP. &amp;nbsp;Las siglas corresponden con Simple Mail Transfer Protocol. Básicamente, lo que a nosotros nos interesa es que se trata de un servicio complejo de correo a través de servidores, tanto para recibir como para enviar correo. En el caso que nos ocupa, se trata de enviar correos desde NAV con las aprobaciones que tengamos parametrizadas en nuestro ERP. La gestión en NAV se hace a través de la Codeunit 400 &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;SMTP Mail&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. Para parametrizar el funcionamiento de esta codeunit, se realiza desde &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Administración -&amp;gt; Administración de IT -&amp;gt; Configuración correo SMTP&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;b&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-PKV5xVVUUoM/TvMZ2P9woSI/AAAAAAAAAR0/JpS2jTLnE6U/s1600/4.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="342" src="http://4.bp.blogspot.com/-PKV5xVVUUoM/TvMZ2P9woSI/AAAAAAAAAR0/JpS2jTLnE6U/s400/4.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="font-family: Calibri;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;div style="background-color: transparent;"&gt;&lt;span id="internal-source-marker_0.7243192698806524"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;La parametrización existente permite introducir la siguiente información:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul style="font-weight: bold;"&gt;&lt;span id="internal-source-marker_0.7243192698806524"&gt;&lt;li style="background-color: transparent; font-family: Verdana; font-size: 13px; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Servidor SMTP:&lt;span class="Apple-style-span" style="font-weight: normal;"&gt; Dirección del servidor SMTP de la empresa.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; font-family: Verdana; font-size: 13px; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Autenticación: &lt;/span&gt;&lt;/li&gt;&lt;/span&gt;&lt;/ul&gt;&lt;span id="internal-source-marker_0.7243192698806524"&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;ul&gt;&lt;span id="internal-source-marker_0.7243192698806524"&gt;&lt;li style="background-color: transparent; font-family: Verdana; font-size: 13px; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;Anónima: &lt;/i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Sin autenticación.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; font-family: Verdana; font-size: 13px; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;NTLM: &lt;/i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Recoge la autenticación del usuario NTLM.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; font-family: Verdana; font-size: 13px; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;Básica: &lt;/i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Se introduce el usuario y el password para configurar el acceso al servidor.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/span&gt;&lt;/ul&gt;&lt;span id="internal-source-marker_0.7243192698806524"&gt;&lt;/span&gt;&lt;/ul&gt;&lt;span id="internal-source-marker_0.7243192698806524"&gt;&lt;ul&gt;&lt;li style="background-color: transparent; font-family: Verdana; font-size: 13px; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt;Id Usuario:&lt;/b&gt; Id. Usuario configurado en caso de configuración básica.&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; font-family: Verdana; font-size: 13px; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt;Contraseña: &lt;/b&gt;Password configurado en caso de configuración básica.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Las comunicaciones por defecto de esta codeunit se efectúan con por el puerto 25. Este es el primer escollo, ya que, aunque se trata de un puerto estándar, este puerto no sirve para todos los servidores SMTP. Aquí se indica &lt;/span&gt;&lt;a href="http://gotcal.com/index.php/2010/06/smtp-mail-functionality-in-pre-dynamics-nav-5-version/" style="font-weight: bold;"&gt;&lt;span style="background-color: transparent; color: blue; font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;http://gotcal.com/index.php/2010/06/smtp-mail-functionality-in-pre-dynamics-nav-5-version/&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; que existe un parche para poder cambiar el funcionamiento de la codeunit 400 para que pueda ser parametrizado el puerto de acceso directamente desde NAV, y así poder utilizar mas servidores SMTP que tengan diferentes puertos.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="font-family: Calibri;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;No obstante, tras probar con este parche, finalmente he llegado a la conclusión de que si queremos utilizar el SMTP con otro tipo de servidores SMTP externos, como gmail o Hotmail, necesitamos poder mandar el correo habilitando SSL, que es un encriptado de seguridad necesario en el envío del mensaje, y lamentablemente, el automatismo 'Microsoft Navision &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Mail'.SmtpMessage’&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; no contiene la posibilidad de habilitar esta opción, requisito necesario para poder mandar un correo desde estos servidores (a fecha en la que escribo este post, al menos, es así).&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="font-family: Calibri;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Por tanto la CU 400 de forma nativa, aún permitiendo con el parche parametrizar el puerto, no puede enviar mails configurando el servidor SMTP de nuestra cuenta google corporativa (por ejemplo) para poder enviar las notificaciones.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="font-family: Calibri;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;Este post sirve de introducción de la funcionalidad SMTP disponible en NAV, y porqué no funciona con una cuenta de gmail o Hotmail. En principio la solución pasa por utilizar un servidor de correo Exchange que haga de puente. No obstante, en siguientes post voy a plantear una solución diferente, ya que podemos crear una librería que gestione el envío de correo de una forma más avanzada, y utilizarla en NAV directamente. Ya que en anteriores post siempre he planteado la posibilidad de utilizar interop, en este caso vamos a solucionarlo de la otra forma que tenemos para interactuar con componentes externos desde NAV, desarrollando un automatismo a partir de nuestra clase desarrollada en C#, y utilizándolo desde Dynamics NAV. &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="font-family: Calibri;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Nos leemos,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Un saludo.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;EDITO: 23/12/2011. Gracias a un usuario del blog que ha comentado en esta misma entrada, he descubierto la existencia de un parche oficial que permite mejorar la funcionalidad SMTP, se encuentra aquí: &lt;/span&gt;&lt;a href="http://support.microsoft.com/kb/2499881"&gt;http://support.microsoft.com/kb/2499881&lt;/a&gt;&amp;nbsp;(Requiere acceso a Partnersource o Customer Source).&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-7127064082686695661?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/7127064082686695661/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/12/smtp-y-envio-de-correos-desde-dynamics.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/7127064082686695661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/7127064082686695661'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/12/smtp-y-envio-de-correos-desde-dynamics.html' title='SMTP y envío de correos desde Dynamics NAV I'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-PKV5xVVUUoM/TvMZ2P9woSI/AAAAAAAAAR0/JpS2jTLnE6U/s72-c/4.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-1104995403870127261</id><published>2011-12-14T03:55:00.000-08:00</published><updated>2011-12-14T03:56:54.722-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Roletailored'/><title type='text'>Diseccionando el cliente de Roles : Centro de Roles - Actividades</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 15px; white-space: pre-wrap;"&gt;Hola,&lt;/span&gt;&lt;br /&gt;&lt;div style="background-color: transparent;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;En esta ocasión, voy a tratar de hacer un conjunto de post acerca del cliente de roles, para ir adentrando a aquellos desarrolladores que todavía no lo conozcan a como funcionan determinados aspectos del mismo que son completamente nuevos respecto al cliente clásico, y, mas concretamente, como se pueden desarrollar.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Lo primero de todo es conocer el concepto de Role Center, o centro de Roles. Microsoft Dynamics NAV ha cambiado toda la estructura de su aspecto visual y funcional, enfocándolo al concepto de roles. Esto consiste en definitiva en que cada usuario cuando se conecta con NAV sólo ve aquello que necesita ver relacionado con su puesto y funciones de trabajo dentro de la empresa.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;El núcleo principal de esta nueva forma de uso, es el centro de roles. En este primer post vamos a ver el centro de roles a partir del que viene predefinido para procesar pedidos de venta.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="327px;" src="https://lh3.googleusercontent.com/w6gy-80ioFDVU4JnCcEIHuDbggMyxWlPKhVQks5H_vh491YtNaYpAeooGHFFSCYPs3D05IjCNGyB8usgdMfIMPv8HRIx7sHdeo67KqDaWUAt8XCa1RM" width="519px;" /&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;En esta primera toma de contacto, vamos a ver en que consiste la página de actividades, una nueva página muy vistosa que indica mediante pilas de documentos las actividades que tiene que realizar el usuario.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="345px;" src="https://lh6.googleusercontent.com/TW_OhsrgLLuAjU-AdCAd2ap-H3DlGDszh-46Zacyp8yWlGQAdBpbzGLiRCuhUTcsoe332b6YhZRfGOdEimZ-ixrOKvj648kzPCPZnVByURQdPYUBZr0" width="549px;" /&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Lo primero de todo es saber que objeto es el que corresponde con el centro de roles que estamos viendo. Si efectuamos un &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;acerca de esta página&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; en el cliente de roles para poder ver la info de la página, podemos ver el id de la pagina del cliente de roles, para buscarlo en el diseñador.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="66px;" src="https://lh5.googleusercontent.com/pRwfDzihSITMd5FTPEaPCKxax-YmhXEv0B9j04oafqoSwgt3JyzK81ssck7ozllolkaqiGiLjw1Xw-z3Ao3bQqhBKftTQSOt4tX9YNp823CpjTeb_mw" width="160px;" /&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Podemos ver que un centro de roles es realmente una página Order Processor Role Center (9006). Abrimos el diseñador de objetos en la parte de objetos y nos situamos sobre nuestra pagina de rolecenter.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="159px;" src="https://lh5.googleusercontent.com/RK5odkCmbW6ojLecm6R6teqr27y-3fuZCXzNJ0yfFHm5d-Yd__APt5rvEwSHfrAfdDXPTYh-M9UqiR_NPg2svlqjF5a_B83WhU_0uTEu2EOhQIWrcVU" width="398px;" /&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Abrimos el diseño de la misma con el botón &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;design&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; para ver el diseño de nuestro centro de roles. De todo lo que vemos disponible, la parte de actividades corresponde con la pagina &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;SO Processor Activities&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, que es la página que corresponde con las actividades.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="210px;" src="https://lh4.googleusercontent.com/onFc5fH9OVvi9zQbsWGyVzYARaRyEF_LWHKOHpF9h-y_bD0QcxKw8pP4d6XII-VnuiJGRak79jHFZdjep31UG994iqO0dioZ1RtyWoximqVPFLZJoYA" width="565px;" /&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;Si vemos las propiedades de este elemento, con Ver-&amp;gt;Properties, podemos ver en la propiedad PagePartID, el nombre de nuestra página para poder buscarla, en este caso es el mismo que podíamos ver anteriormente, &lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;SO Processor Activities&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. Con esto ya tenemos localizada la pagina, y podemos ver como está realizada para nuevos desarrollos o modificar una pagina de actividades que esté incluida en el estándar.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Ahora que ya sabemos como y que queremos ver, vamos a profundizar en como se realiza este tipo de página. Lo primero de todo, es averiguar en qué consiste el origen de datos de la página. Para ello vamos al diseño de la página &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;SO Processor Activities (9060)&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, y vemos las propiedades generales de la misma, de todas ellas la interesante es la propiedad SourceTable, que es idéntica a la utilizada en Formularios de cliente clasico, y nos informa de que tabla es el origen de datos de la pagina. En este caso la tabla de origen es &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Sales Cue&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;(9053). &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Si vemos el diseño es como sigue:&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="221px;" src="https://lh3.googleusercontent.com/FlnBjB26_f0UNsLlXGsmW-4SBgpZjDHFw7FVlx6ErVmsxbdKBFpfvLZc-exnXrw_ggAnxsG1kbnuSeHAZbDR0Cck0wqlu4Kg6IWnFk9GwV3ZaQAuDCc" width="371px;" /&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;El diseño de este tipo de tablas de actividades es siempre muy similar. Por un lado, la clave code de 10, para tener siempre un único registro en la tabla (Campo 1). Por otro lado, campos que cuenten registros de otras tablas, mediante campos calculados enteros (Campos 2-8). Por último, y estos si que son opcionales, campos del tipo flowfilter, para poder filtrar los valores de los calculados indicados anteriormente (Campos 20-21).&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;NOTA: Los campos calculados deben ser del tipo entero para poder mostrarse como pila de documentos.&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Ahora vamos a ver el diseño de la página, y ya podemos ver la relacion entre el diseño de la pagina del cliente de roles y lo que vemos finalmente:&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="529px;" src="https://lh4.googleusercontent.com/ZNsPoHzxXbL4mI25W4ERD0PIzSzL1HM47-udN5aQLDKorrgBbNRUqyXOiKLUnl1RTKRkw0FE37kQeAA9nru7s3dumGksZSBPoIGcx-Gy2mFJPh7oVMM" width="586px;" /&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;La clave del diseño de esta página es el subtipo de grupo que tenemos que aplicar, que es CueGroup (“Grupo de pila”). En el momento que aplicamos este subtipo especial de grupo, interpreta los campos indicados dentro de el como estas bonitas y vistosas pilas de documentos.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Ahora faltan dos aspectos del funcionamiento de la página que también son interesantes. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Primero definir las acciones que aparecen disponibles al lado de cada grupo de pila de documentos. Para poder definir estas acciones, tenemos que marcar cada grupo del tipo CueGroup en diseño e ir a &amp;nbsp;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Ver-&amp;gt;Control Actions. &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Esas acciones son las que se muestran a la derecha en cada grupo.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 15px; white-space: pre-wrap;"&gt;A continuación tenemos que indicar que al hacer click en cada pila, abra los documentos correspondientes. Aunque tengamos definido el campo calculado correctamente y las propiedades de la tabla correctas, dentro de cada campo de los grupos de pila, tenemos que ir a Ver-&amp;gt;Properties. Rellenamos la propiedad DrillDownID con el id del formulario que queramos ver al hacer click sobre la pila de documentos.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Por último podemos ver como gestiona el tema de hacer un registro, de forma similar a como se hace en los formularios de configuración. En el evento de OnOpenPage(), se indica el siguiente código:&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="202" src="https://lh4.googleusercontent.com/GNBkgqkFEu3UQbhfHG3qB7EAkw0HDojxMEHVPUoUN7a97pDkrKCTVUWU7ybQ2PGA1hS3R8p4XJi-lmK1lWxNal6edDPstEk9UQI9EacnsoPHa4-DdLA" width="320" /&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Este codigo sirve por un lado para que siempre exista un registro en la tabla para las actividades, y por otro lado en este caso, para establecer los valores de los flowfilter definidos en la tabla, mostrando los campos de actividades que hayamos definido en un periodo entre unas fechas concretas en este caso (es lo mas habitual).&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Ahora ya podemos ver el funcionamiento y diseño de estas paginas de una forma mas precisa, pudiendo modificar o crear nuestas propias paginas de actividades para nuestros centros de roles a partir de ver como funcionan las existentes.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Nos leemos,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Un saludo.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-1104995403870127261?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/1104995403870127261/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/12/diseccionando-el-cliente-de-roles.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/1104995403870127261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/1104995403870127261'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/12/diseccionando-el-cliente-de-roles.html' title='Diseccionando el cliente de Roles : Centro de Roles - Actividades'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-2229619291616979399</id><published>2011-12-05T02:26:00.001-08:00</published><updated>2011-12-05T05:35:22.890-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Utilidad'/><category scheme='http://www.blogger.com/atom/ns#' term='NAV'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Informes'/><title type='text'>Utilidad para el desarrollo de informes.</title><content type='html'>&lt;br /&gt;&lt;div style="background-color: transparent;"&gt;&lt;span id="internal-source-marker_0.6286568087525666" style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Hola,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Hoy voy a hacer un posteo bastante “diferente” de lo que viene siendo habitual, voy a compartir una pequeña herramienta desarrollada por mí mismo en C# que utilizo con Dynamics NAV para ayudarme en los desarrollos.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;En este post voy a contaros en que consiste esta herramienta y como funciona, además de adjuntaros un link para aquellos que la querais descargar.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 15px; white-space: pre-wrap;"&gt;Dentro de las nuevas funcionalidades disponibles desde NAV 2009, una de ellas son los nuevos report en cliente &amp;nbsp;de roles, como hemos visto en post anteriores. Para desarrollar con estos informes, una vez situados sobre el diseñador de informes integrado en NAV, hacemos click en ver layout, y esto abre el entorno de desarrollo Visual Studio que tengamos instalado en nuestra maquina con la definicion RDLC para el cliente de roles.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Ahora vemos las layout de RDLC así:&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="332px;" src="https://lh4.googleusercontent.com/Ho3SrUm_EVGoaZuRcqgdqZkc8amiSwnWOVOFMSj_3YUkzEOerKuXFHuCVCfg8MftlNEPri6sI8TQPMuXDfupkUp1di8R-fXqmmT6PUF-IkApkCBmsqg" width="383px;" /&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Yo llevo un tiempo desarrollando en NAV, y estoy bastante acostumbrado a la agilidad que supone el que mientras estás desarrollando un informe en modo clásico, en cualquier momento puedas hacer un acceso de teclado (Ctrl+R) y ver cómo evoluciona el informe sin necesidad de añadirlo al menú principal todavía,de una forma bastante ágil. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Pues bien, esta forma de usar el cliente clásico se ha perdido por el camino con el cliente de roles, y ahora, si queremos observar los cambios que hemos realizado en el cliente de roles, tenemos, o bien que añadir el informe al menú o crear un hyperlink (Conté anteriormente &lt;/span&gt;&lt;a href="http://dynamicsnaves.blogspot.com/2011/06/reportando-con-dynamics-nav-2-los.html"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;aquí&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; como generar un hyperlink para un report) &amp;nbsp;para poder ver el informe conforme vamos haciendo cambios.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Ejemplo de ventana de ejecutar hyperlink:&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;img height="193px;" src="https://lh6.googleusercontent.com/gGqNd0T2H_GVWz22k5aO1J9taXXthTPE6BPbKBnAvlgACsh2iES22xQXNRNeh870uAno7HwEkw57ioaVLZJF4TYMjLCWB_8Gorm4hkem_Rgh4mcWZ28" width="355px;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Esta aplicación que os propongo, sirve para recuperar en parte esa funcionalidad perdida, al menos en parte, y agilizar el trabajo. Esta aplicación queda residente en el reloj de Windows, y sirve principalmente para recuperar el Ctrl+R.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;La ventana principal nos muestra dos pestañas, “Captura actual” y “Configuración roles”.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Ventana principal de la aplicación:&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="318px;" src="https://lh4.googleusercontent.com/vYYeEGMJZs2tMBwJNDZAc-wSKlXVSX2ziYg5s5f_vAizD7O886OnlBXEq7mu3jvchBGRtarriRIlpuHTpsTrP0s4pantMbQi-HMf4szsUzlawkA2ovA" width="371px;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Dentro de la pequeña pestaña de configuración es donde metemos la información del servicio, servidor (&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Podemos indicar localhost para mas comodidad&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;) y empresa. Si pulsamos el botón Salvar, esta configuración queda guardada para las siguientes ejecuciones del programa.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;La pestaña Captura actual sirve para mostrar los datos del objeto capturado actual.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Esta captura consiste en que se recoge de la aplicacion de NAV de cliente clásico que esté ejecutándose (&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;“finsql.exe”&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;) en ese momento el identificador y tipo de objeto del caption de la ventana cuando pulsamos el botón objeto NAV, y si pulsamos el botón Run, ejecuta el objeto en cliente de roles (si puede ser ejecutado), mediante un hyperlink construido con los datos configurados en la pestaña Configuración. &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 15px; white-space: pre-wrap;"&gt;Si pulsamos el botón Objeto NAV, y después el Run, sucede esto:&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;1) Pulsamos el boton Objeto NAV, y recibimos la info de NAV.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;2) Pulsamos Run, y se abre el cliente de roles con el objeto del que obtenemos la información.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;i&gt;&lt;img height="321px;" src="https://lh6.googleusercontent.com/RVJHJMvO_4sptWHj__w0e1LcFCptZTiWo2nBC7vQ7TBmDLQhl3mAvi3Rs43n1Lsq-tJXqWZ5PmXBA9ginNkuryjIGaIr1QaoQSCCCSsrEb2jxw5_TZs" style="font-family: 'Times New Roman'; font-size: medium; font-style: normal; white-space: normal;" width="665px;" /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;La marca Capturar Ctrl+R de la pestaña Captura actual, es la más útil de todas. Si esta marca se encuentra activa, se avisa al usuario mediante mensaje por pantalla de que se encuentra activa la captura de teclado, y cada vez que se pulsen las teclas Ctrl+R, se captura el objeto actual, y se lanza en cliente de roles. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Esto provoca que cuando nos encontremos en el cliente clásico dentro del diseño de un informe, podamos hacer un Ctrl+R para ver como nos está quedando el informe en roles en cualquier momento, después de haber editado la capa layout con Visual Studio y guardado cambios, ojo.&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Además, nos evita el trabajo de tener que generar los hyperlink cada vez que hacemos un cambio, la aplicación nos los genera de forma transparente. &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Esta pensada para ayudar en los informes, pero funciona de forma similar con las páginas, aunque en R2 en paginas ya funciona el botón RUN.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Por último, cuando la aplicación se encuentra minimizada se ve el icono en la bandeja con el reloj de Windows, podemos ver el menú de acciones disponibles así como maximizarla haciendo click con el botón derecho del ratón encima del &amp;nbsp;icono de notificación. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;En el menu de notificación, click boton derecho sobre el icono:&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;div style="text-align: center;"&gt;&lt;img height="110px;" src="https://lh4.googleusercontent.com/_odDB4i65u67cxZDsWVTRvgFZju-uVA8x_WIhOMIbbsj0slkI3lqmW5ey8kYTIVdA_NGn7q2Ex--3SY56Sz_wIFBRBGK4h8-mS8m9GhSmoEEUlNnffU" width="251px;" /&gt;&lt;/div&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="background-color: transparent;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;He testeado la aplicación en &lt;b&gt;&lt;i&gt;Windows XP&lt;/i&gt;&lt;/b&gt; y &lt;b&gt;&lt;i&gt;Windows 7&lt;/i&gt;&lt;/b&gt;, y funciona correctamente, si veis alguna comportamiento extraño, comentadlo por aquí. Por ultimo, he creado un pequeño instalador para que sea lo más fácil instalar y desinstalar.El link a la aplicación, es éste:&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;a href="http://dl.dropbox.com/u/52153328/Instalador.exe"&gt;http://dl.dropbox.com/u/52153328/Instalador.exe&lt;/a&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Espero que os sea útil.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Nos “leemos”,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Un saludo.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-2229619291616979399?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/2229619291616979399/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/12/utilidad-para-el-desarrollo-de-informes.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/2229619291616979399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/2229619291616979399'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/12/utilidad-para-el-desarrollo-de-informes.html' title='Utilidad para el desarrollo de informes.'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-4572729435080198876</id><published>2011-11-28T05:55:00.001-08:00</published><updated>2011-11-28T05:59:35.466-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Automation'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><title type='text'>Automatismos Excel III, Ejemplo completo - Final.</title><content type='html'>&lt;br /&gt;&lt;div style="background-color: transparent;"&gt;&lt;span id="internal-source-marker_0.9761414378881454" style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Hola,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Después de los anteriores post acerca de los automatismos de Excel, en este último, voy a tratar de exponer un ejemplo sencillo de cómo se puede aplicar todo lo visto anteriormente en un informe. Es un post un poco grande y denso, pero he preferido indicarlo todo en uno para que se pueda ver el proceso de creación de una forma general, aplicando todo lo visto.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Se trata de un informe Excel de listado de facturas emitidas, y la apariencia queda mas o menos así:&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Calibri;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;img height="497px;" src="https://lh6.googleusercontent.com/YC3UHbeVGK9OPkjGHCh2ZnNjPi3vyG4B4lwTPuEZpZb_z19tBekcUSMdm__V2ZRbNl1Q3o2-zzBf3wvkxF5YHhDbx76Q2MCRYKkUIE5IVOZV2X6k9CU" width="567px;" /&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Lo primero de todo, es definir el modelo de datos y pensar como estructurar el código dentro de nuestro informe. En este caso, el modelo de datos es sencillo, se trata de utilizar la tabla facturas de venta registradas como un único &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Dataitem&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; del informe.&lt;/span&gt;&lt;span style="background-color: transparent; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;div style="background-color: transparent;"&gt;&lt;img height="169px;" id="internal-source-marker_0.9761414378881454" src="https://lh4.googleusercontent.com/qEjuurhHf22OthAJXSWGmZrYRvzXIaODE0_OIfr6rVRxlMmnpkGriF77lYgOK170XZxM-qcbCAv6uyRXL-IQ5BlaSIDuN4BRwnpuYQ2hDglcjnCHjZ0" width="261px;" /&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Después, declaramos las variables y métodos a utilizar:&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span class="Apple-style-span" style="font-family: Calibri;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;div dir="ltr"&gt;&lt;table style="border-bottom-style: none; border-collapse: collapse; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial;"&gt;&lt;colgroup&gt;&lt;col width="81"&gt;&lt;/col&gt;&lt;col width="120"&gt;&lt;/col&gt;&lt;col width="267"&gt;&lt;/col&gt;&lt;col width="57"&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="background-color: yellow; border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Name&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color: yellow; border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;DataType&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color: yellow; border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Subtype&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color: yellow; border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Length&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;ExcelApp&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Automation&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;'Microsoft Excel 12.0 Object Library'.Application&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Book&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Automation&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;'Microsoft Excel 12.0 Object Library'.Workbook&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Worksheets&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Automation&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;'Microsoft Excel 12.0 Object Library'.Worksheets&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Range&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Automation&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;'Microsoft Excel 12.0 Object Library'.Range&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Sheet&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Automation&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;'Microsoft Excel 12.0 Object Library'.Worksheet&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;FileName&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Text&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: right;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;250&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;i&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Integer&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;existeHoja&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Boolean&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Fila&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Integer&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;En este punto, poco que añadir, salvo que siempre hay que incluir una variable del tipo &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Integer&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;(En este caso la variable Fila)&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, para poder tener seguimiento en todo momento de en que numero de fila del fichero Excel que me encuentro para poder pintar, o hacer funciones, etc..&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Para mayor comodidad, luego existen 3 métodos que gestionan directamente la creación/cierre del fichero Excel.&lt;/span&gt;&lt;span style="background-color: transparent; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;div dir="ltr"&gt;&lt;table style="border-bottom-style: none; border-collapse: collapse; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial;"&gt;&lt;colgroup&gt;&lt;col width="125"&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="background-color: yellow; border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Name&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;CrearArchivoExcel&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;CerrarArchivoExcel&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;ExisteFichero&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;El dibujo de en qué disparadores tenemos que procesar los datos es más o menos el mismo siempre:&lt;/span&gt;&lt;span style="background-color: transparent; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;div dir="ltr"&gt;&lt;table style="border-bottom-style: none; border-collapse: collapse; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial;"&gt;&lt;colgroup&gt;&lt;col width="80"&gt;&lt;/col&gt;&lt;col width="243"&gt;&lt;/col&gt;&lt;col width="167"&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color: yellow; border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Evento&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color: yellow; border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Tarea&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="background-color: yellow; border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: right;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Report - OnInitReport()&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Iniciamos nombre fichero&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="background-color: yellow; border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: right;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Report - OnPreReport()&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Creamos fichero excel.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="background-color: yellow; border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: right;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;3&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;SalesInvHeader - OnPreDataItem()&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Creamos cabecera de hoja.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="background-color: yellow; border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: right;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;4&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;SalesInvHeader - OnAfterGetRecord()&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Rellenamos hoja.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="background-color: yellow; border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: right;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;5&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;SalesInvHeader - OnPostDataItem()&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Totalizamos hoja rellenada.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="background-color: yellow; border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: right;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;6&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Report - OnPostReport()&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px; vertical-align: bottom;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 13px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Cerrar fichero excel.&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;La forma de tratar mas comoda el inicio y fin del fichero, es utilizar dos métodos independientes que e encarguen de cada tarea. Iniciar el nombre del fichero con un valor facilita al usuario la introducción de datos,y que no tenga errores.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Por tanto, el modo de ubicar el código para empezar a generar el fichero es el que sigue:&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;div style="background-color: transparent;"&gt;&lt;img height="144px;" id="internal-source-marker_0.9761414378881454" src="https://lh5.googleusercontent.com/rlGH9nyZG2sZ4yng7DyAzID03e640RqVKUKArP7NVHoiJDutFVU0EkqWR7q3i46HiDATrTMexwFXR2QYS6cmmIJ8WfOHVGcBQeXH5rChHjJ0wM2DtoY" width="243px;" /&gt;&lt;/div&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;div style="background-color: transparent;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;El&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Método&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; CrearArchivoExcel():&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;div style="background-color: transparent;"&gt;&lt;img height="480px;" id="internal-source-marker_0.9761414378881454" src="https://lh3.googleusercontent.com/84D9RlemoYjTvrVsHHX9T6yN3PxYUAMn_-Z0vMFKoqLnJAW_aXoiiuohAbHeDqlTKYF5ty53z8wJoVo2mBimdgRVkASGhZk35cUPuOjhGj-g6qXZkhI" width="368px;" /&gt;&lt;/div&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;div style="background-color: transparent;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;El Método para cerrar y guardar el fichero excel, y para comprobar si el fichero existe:&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;div style="background-color: transparent;"&gt;&lt;img height="211px;" id="internal-source-marker_0.9761414378881454" src="https://lh5.googleusercontent.com/SO3An5J_ywGxMP8woHuOeKAXhF6rWtJIz4i3kPqI5mk5o9XYazWbEXmGDDy9X_XIsAH9cvqAwnAelEbyk_FghGE_2d5oqguIL6d0i4ZVbMXp6iWEGhk" width="301px;" /&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Una vez establecida la forma de abrir y cerrar el fichero de excel, tenemos que indicar el código para pintarlo. Una de las formas de aprovechar mejor los eventos de informe de NAV es utilizando los diferentes eventos del dataitem, el &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;OnPredataitem()&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;para pintar cabeceras de la hoja, en el &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;OnAfterGetRecord()&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; pintamos el detalle de la hoja, y en el evento &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;OnPostDataItem()&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; totalizamos la hoja.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Nota: En este caso, el informe sólo pinta una hoja, si necesitaramos pintar varias hojas más, estructurando el código de este modo, podemos pintar todas las hojas necesarias de nuestro informe.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Vayamos primero con el evento &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;OnPreDataItem()&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="background-color: transparent;"&gt;&lt;img height="439px;" id="internal-source-marker_0.9761414378881454" src="https://lh3.googleusercontent.com/YS8Vym69JIc9TuMp5yIOIz4yAj42V_3hx9Rk_7WqtDY-v3UcPPtJICWPiGC5U3bozej1wtLP81BMu82mdKmPGHs8Kq4a7dVZ8hOvA1k-YkrRTF49T7E" width="606px;" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Como podemos ver en el código expuesto más arriba, el procedimiento que sigo, es asginar primero los valores de los caption, para tener la cabecera del informe, y luego damos formato. El motivo de utilizar la función &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;FIELDCAPTION&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, es tener más facilidad de cara a posibles modificaciones de los nombres de los campos sin tener que modificar el core del informe. Veamos el codigo necesario para pintar las filas:&lt;/span&gt;&lt;span style="background-color: transparent; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="background-color: transparent;"&gt;&lt;img height="348px;" id="internal-source-marker_0.9761414378881454" src="https://lh5.googleusercontent.com/s9aNOLVoXvT-WFI7R2Bk5581sQ1jsy8v9GfKTLtnb-waRvaaXQw2m_tA7s6K_QmwsC1_n05IpeH4QcWRgJABvmLgOFQAksiCNFfTGCxmG3Sx289LWD8" width="449px;" /&gt;&lt;/div&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;En el evento &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;OnAfterGetRecord()&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, se asignan los valores a cada una de las filas que vamos pintando. Importante es tener en cuenta correctamente el contador e incrementarle para que vaya pintando cada fila de forma correcta. Por lo demás, hay que tener en cuenta ejecutar un CALCFIELDS para los campos calculados, y después dar formato tal y como queramos. Ya solo nos queda terminar de pintar las filas, el código es éste:&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;div style="background-color: transparent;"&gt;&lt;img height="90px;" id="internal-source-marker_0.9761414378881454" src="https://lh5.googleusercontent.com/d36PHdfaHXogcBkRcld0dmHT0jkglwF7kOmSWhkbd-d654KRr9r9Zai-vg6z2e5B39eapLe8v9zKKwpoJ3rpJwjHlb7pUEPEWfmN1ug_CsjLuiPSBCE" width="411px;" /&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Por último, el evento &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;OnPostDataItem()&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Este evento se suele utilizar para totalizar valores de celdas, y para ajustar el tamaño de las mimas con el metodo de las celdas &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Autofit.&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; No es obligatorio, pero la presentacion del informe queda mucho mejor con los tamaños de las celdas ajustados a los valores que contienen, en mi opinión. Respecto al tema de la totalización, es una de las razones por las que importa el llevar en todo momento un contador con las lineas &amp;nbsp;al recorrer y asignar valores a las celdas, podemos asignar un valor que sea una función con valores de otras celdas, como en este caso la &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;SUMA&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, totalizando el informe.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Después de todo esto, tenemos listo nuestro informe, y podemos empezar a pensar en como realizar otros tantos utilizando los automatismos de Excel.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Nos “leemos”,&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span style="background-color: transparent; font-family: Calibri; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;un saludo.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-4572729435080198876?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/4572729435080198876/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/11/automatismos-excel-iii-ejemplo-completo.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/4572729435080198876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/4572729435080198876'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/11/automatismos-excel-iii-ejemplo-completo.html' title='Automatismos Excel III, Ejemplo completo - Final.'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-2349847614603711438</id><published>2011-11-14T08:37:00.001-08:00</published><updated>2011-11-14T09:00:12.307-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Automation'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><title type='text'>Automatismos Excel II, las celdas.</title><content type='html'>&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Hola de nuevo,&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Continuo escribiendo acerca de los automation de NAVutilizados para conectarse con MS Excel, hoy voy a profundizar un poco másacerca de cómo utilizar los automation de una forma más avanzada a como lo hacede estándar Dynamics NAV, dando un formato mas profesional a nuestros informes Excel.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;El núcleo principal de todos los informes en Excel, enconclusión, es cada celda de Excel, o, como viene siendo para losprogramadores, el objeto Range.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Recordemos rápidamente, un fichero Excel se compone delibros, cada libro de hojas, y cada hoja contiene sus celdas. Por tanto paraacceder a las celdas de una hoja determinada de un fichero Excel, tendríamosque hacer algo similar a esto, partiendo de las variables declaradas en el postanterior:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-L6dL7HF_iSY/TsFEefx_dMI/AAAAAAAAAQE/SDuDiiOFpoY/s1600/1.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="18" src="http://4.bp.blogspot.com/-L6dL7HF_iSY/TsFEefx_dMI/AAAAAAAAAQE/SDuDiiOFpoY/s320/1.JPG" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/--3vilElghVo/TsFEejIoonI/AAAAAAAAAQI/DFRIf3mfKrk/s1600/2.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/--3vilElghVo/TsFEejIoonI/AAAAAAAAAQI/DFRIf3mfKrk/s1600/2.JPG" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Donde &lt;i&gt;&lt;b&gt;NumeroHoja&lt;/b&gt;&lt;/i&gt; es una variable de tipo entero querepresenta el numero de hoja a la que queremos acceder del libro actual, yCoordenada es una variable Text de 10. La variable coordenada la podemosutilizar para referenciar dentro de nuestra hoja de una forma dinámica una celdaconcreta, y la propiedad Value el valor de la celda.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Es decir, &lt;i&gt;Sheet.Range(‘A1’).Value&lt;/i&gt; sería el valor de estacelda:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-6hp_kGz01_Y/TsFEe3MlnzI/AAAAAAAAAQQ/uvBrFedeG60/s1600/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-6hp_kGz01_Y/TsFEe3MlnzI/AAAAAAAAAQQ/uvBrFedeG60/s1600/3.JPG" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;En este punto hay que tener en cuenta el tipo de valor queasignamos, si &lt;b&gt;&lt;i&gt;Valor&lt;/i&gt;&lt;/b&gt; es una variable de texto, la celda quedará como texto, si&lt;b&gt;&lt;i&gt;Valor&lt;/i&gt;&lt;/b&gt;es una variable decimal, quedará decimal.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;(Hay&amp;nbsp; que tenerlo en cuenta si luego queremos hacersumatorios o demás con las celdas,ojo)&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Una vez entendido el acceso a una celda concreta, podemoshacer varias cosas interesantes con las celdas, ayudándonos con las propiedadesdel objeto, voy a tratar de enumerar algunas:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;- Poner bordes a la celda:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/-Ub52iCYn6ko/TsFEfLJidvI/AAAAAAAAAQU/SilJQpfbVg4/s1600/4.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="50" src="http://2.bp.blogspot.com/-Ub52iCYn6ko/TsFEfLJidvI/AAAAAAAAAQU/SilJQpfbVg4/s400/4.JPG" width="400" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;- Indicar que la fuente que representa el valor de la celdasea negrita, o cursiva:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-K1anvQZMrvw/TsFEfluqktI/AAAAAAAAAQk/kXbvhrAHV3M/s1600/5.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-K1anvQZMrvw/TsFEfluqktI/AAAAAAAAAQk/kXbvhrAHV3M/s1600/5.JPG" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-onKH5fG_chk/TsFEgqpxP2I/AAAAAAAAAQo/bU6hmQpPUxw/s1600/6.JPG" imageanchor="1" style="clear: left; display: inline !important; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-onKH5fG_chk/TsFEgqpxP2I/AAAAAAAAAQo/bU6hmQpPUxw/s1600/6.JPG" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;- Cambiar la alineación del texto dentro de la celda:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/-UxkqB0nsVk8/TsFEhHe2OpI/AAAAAAAAAQ0/1H_bVkqajjE/s1600/7.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-UxkqB0nsVk8/TsFEhHe2OpI/AAAAAAAAAQ0/1H_bVkqajjE/s1600/7.JPG" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;- Cambiar el color del texto (con un valor entero de parámetro):&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-QFwdEiMUkVg/TsFFpoSvePI/AAAAAAAAARU/_P_WMrFjHSs/s1600/11.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="24" src="http://2.bp.blogspot.com/-QFwdEiMUkVg/TsFFpoSvePI/AAAAAAAAARU/_P_WMrFjHSs/s320/11.JPG" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;- Cambiar el color de la celda (ojo, no texto).&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-aXBp1bme1zM/TsFEiJ4RcRI/AAAAAAAAAQ4/YtsvXfrnP4I/s1600/8.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="18" src="http://1.bp.blogspot.com/-aXBp1bme1zM/TsFEiJ4RcRI/AAAAAAAAAQ4/YtsvXfrnP4I/s400/8.JPG" width="400" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Estos dos&amp;nbsp;métodos&amp;nbsp;anteriores trabajan con&amp;nbsp;parámetros&amp;nbsp;enteros que&amp;nbsp;representan&amp;nbsp;varios colores, a gusto del cliente:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184;"&gt; &lt;tbody&gt;&lt;tr&gt;  &lt;td style="border: solid black 1.0pt; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 57.9pt;" valign="top" width="77"&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Negro&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td style="border-left: none; border: solid black 1.0pt; mso-border-alt: solid black .5pt; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-themecolor: text1; mso-border-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 60.9pt;" valign="top" width="81"&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;0&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;  &lt;td style="border-top: none; border: solid black 1.0pt; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 57.9pt;" valign="top" width="77"&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Blanco&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td style="border-bottom: solid black 1.0pt; border-left: none; border-right: solid black 1.0pt; border-top: none; mso-border-alt: solid black .5pt; mso-border-bottom-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-right-themecolor: text1; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 60.9pt;" valign="top" width="81"&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;16777215&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;  &lt;td style="border-top: none; border: solid black 1.0pt; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 57.9pt;" valign="top" width="77"&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Amarillo&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td style="border-bottom: solid black 1.0pt; border-left: none; border-right: solid black 1.0pt; border-top: none; mso-border-alt: solid black .5pt; mso-border-bottom-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-right-themecolor: text1; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 60.9pt;" valign="top" width="81"&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;65535&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;  &lt;td style="border-top: none; border: solid black 1.0pt; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 57.9pt;" valign="top" width="77"&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Verde&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td style="border-bottom: solid black 1.0pt; border-left: none; border-right: solid black 1.0pt; border-top: none; mso-border-alt: solid black .5pt; mso-border-bottom-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-right-themecolor: text1; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 60.9pt;" valign="top" width="81"&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;65280&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;  &lt;td style="border-top: none; border: solid black 1.0pt; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 57.9pt;" valign="top" width="77"&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Rojo&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td style="border-bottom: solid black 1.0pt; border-left: none; border-right: solid black 1.0pt; border-top: none; mso-border-alt: solid black .5pt; mso-border-bottom-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-right-themecolor: text1; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 60.9pt;" valign="top" width="81"&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;255&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;  &lt;td style="border-top: none; border: solid black 1.0pt; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 57.9pt;" valign="top" width="77"&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Azul&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td style="border-bottom: solid black 1.0pt; border-left: none; border-right: solid black 1.0pt; border-top: none; mso-border-alt: solid black .5pt; mso-border-bottom-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-right-themecolor: text1; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 60.9pt;" valign="top" width="81"&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;16711680&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;  &lt;td style="border-top: none; border: solid black 1.0pt; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 57.9pt;" valign="top" width="77"&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Turquesa&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td style="border-bottom: solid black 1.0pt; border-left: none; border-right: solid black 1.0pt; border-top: none; mso-border-alt: solid black .5pt; mso-border-bottom-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-right-themecolor: text1; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 60.9pt;" valign="top" width="81"&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;16776960&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;  &lt;td style="border-top: none; border: solid black 1.0pt; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 57.9pt;" valign="top" width="77"&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Magenta&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td style="border-bottom: solid black 1.0pt; border-left: none; border-right: solid black 1.0pt; border-top: none; mso-border-alt: solid black .5pt; mso-border-bottom-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-right-themecolor: text1; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 60.9pt;" valign="top" width="81"&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;16711935&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;- Formatear el valor de la celda con un valor:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-xTEYYanSU6E/TsFEiTaYE2I/AAAAAAAAARE/xmO6zWzxzR0/s1600/9.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="21" src="http://1.bp.blogspot.com/-xTEYYanSU6E/TsFEiTaYE2I/AAAAAAAAARE/xmO6zWzxzR0/s400/9.JPG" width="400" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;- Cambiar tamaño de fuente. (Valor es una variable texto querepresenta el nuevo tamaño, por ejemplo,'10', en cadena de texto)&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/-0C62No2_m04/TsFEiyL3SaI/AAAAAAAAARM/YuhZo0lpsiQ/s1600/10.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="22" src="http://1.bp.blogspot.com/-0C62No2_m04/TsFEiyL3SaI/AAAAAAAAARM/YuhZo0lpsiQ/s320/10.JPG" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Estas son algunas de las propiedades más útiles (hay algunamás, pero estas son las más útiles). Juntando todo lo visto hasta ahora, tenemos un montón de formas de dejar nuestros datos en nuestros informes, pero, como lo podemos aplicara un informe propio desarrollado en NAV? En siguientes post plantearemos unejemplo concreto de generar un listado de facturas de venta emitidasdirectamente en Excel desde un informe NAV.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Nos “leemos”,&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Un saludo.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;PD: Edito: Según me indican las&amp;nbsp;estadísticas&amp;nbsp;de blogger, el blog ha superado la barrera &amp;nbsp;de las 10.000 visitas!!! Muchas gracias a todos.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-2349847614603711438?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/2349847614603711438/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/11/automatismos-excel-ii-las-celdas.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/2349847614603711438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/2349847614603711438'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/11/automatismos-excel-ii-las-celdas.html' title='Automatismos Excel II, las celdas.'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-L6dL7HF_iSY/TsFEefx_dMI/AAAAAAAAAQE/SDuDiiOFpoY/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-1831963852693354291</id><published>2011-11-02T09:09:00.000-07:00</published><updated>2011-11-02T09:09:10.952-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Automation'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><title type='text'>Automatismos en Excel, pt. 1</title><content type='html'>&lt;br /&gt;&lt;div class="MsoNormal"&gt;Hola,&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Hoy voy a escribir acerca de una serie de propiedades quetienen los automatismos Excel que pueden resultar de interés para generar uninforme. NAV ya contiene una tabla que maneja de forma transparente para eldesarrollador los automatismos de Excel (370 “Excel Buffer”), con resultadosbastante buenos, pero podemos ir un poco más allá, personalizando aún másnuestros informes generados en Excel desde Dynamics NAV.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-G14MUa_ywDU/TrFplCcOn-I/AAAAAAAAAPk/DfBjlQw30SM/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="120" src="http://2.bp.blogspot.com/-G14MUa_ywDU/TrFplCcOn-I/AAAAAAAAAPk/DfBjlQw30SM/s320/1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;Para aquellos que desconocen de que estoy hablando, unavariable del tipo automatismo (automation), en NAV sirve para manejar elcomportamiento de otra aplicación desde Dynamics NAV. Al tratarse el ERP de un productoen el que se imponen los desarrollos de informes para cuadros de mandos,resultados financieros, etc.…, y perteneciendo al fabricante Microsoft&amp;nbsp; el producto, la integración con MS Office Excel,es una piedra angular en muchas de las implantaciones que se llevan a cabo.&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;No obstante, la documentación de cómo manejar losautomatismos de Excel es bastante floja, más allá de la tabla que ya vieneimplementada, y que se utiliza en análisis de dimensiones y esquemas decuentas, por ejemplo. En esta serie de post voy a tratar de explicar que másposibilidades tenemos con los automatismos de Excel.&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;Ojo, en el caso que comento, todos los objetos cuelgan de lalibreria“Microsoft Excel 12.0 Object Library”. En la imagen siguiente, desglosolos objetos más habituales utilizados al pintar en Excel:&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-jlV_5Soh-4s/TrFpuTcj9xI/AAAAAAAAAPs/pnKFsRK5Cew/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="371" src="http://1.bp.blogspot.com/-jlV_5Soh-4s/TrFpuTcj9xI/AAAAAAAAAPs/pnKFsRK5Cew/s400/2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;Desglosando en partes, los automation más interesantes deExcel son:&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: left;"&gt;- &lt;b&gt;Application:&lt;/b&gt; Maneja unainstancia de la aplicación de Excel.&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: left;"&gt;- &lt;b&gt;Workbook:&lt;/b&gt; Maneja el librodentro de la aplicación.&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: left;"&gt;- &lt;b&gt;Worksheet:&lt;/b&gt; Maneja la hojadentro del libro.&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: left;"&gt;- &lt;b&gt;Range:&lt;/b&gt; Maneja la celdadentro de la hoja.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;Una vez visto de forma general, en este primer post, voya&amp;nbsp; explicar cómo crear un fichero Excel medianteautomation.&amp;nbsp;Lo primero de todo es conocer como abrir un fichero que yatengamos localizado o crear uno nuevo desde NAV. Para ello necesitamos lassiguientes &amp;nbsp;variables:&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"&gt;&lt;i&gt;&lt;span lang="EN-US"&gt;ExcelApp&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US"&gt; - 'MicrosoftExcel 12.0 Object Library'.Application&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"&gt;&lt;i&gt;&lt;span lang="EN-US"&gt;Book&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US"&gt; - 'MicrosoftExcel 12.0 Object Library'.Workbook&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"&gt;&lt;i&gt;&lt;span lang="EN-US"&gt;Sheet&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US"&gt; - 'MicrosoftExcel 12.0 Object Library'.Worksheet&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"&gt;&lt;span lang="EN-US"&gt;&lt;i&gt;FileName&lt;/i&gt; – Nombre de ficheroexistente&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"&gt;Veamos ahoraun ejemplo de metodo de apertura/generación de fichero Excel, con una nuevahoja denominada “Desglose”:&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-HC9Q4n-cPBk/TrFqJO9Oo9I/AAAAAAAAAP0/fTSU-dsoekw/s1600/3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/-HC9Q4n-cPBk/TrFqJO9Oo9I/AAAAAAAAAP0/fTSU-dsoekw/s400/3.PNG" width="286" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;Variasanotaciones acerca de este código, primero referentes a las propiedadesutilizadas: &lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpFirst" style="margin-bottom: 0.0001pt; text-align: left; text-indent: -18pt;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Esinteresante la propiedad Windows de la aplicación de Excel, nos indica elnumero de aplicaciones abiertas. Como se trabaja en memoria, para evitarerrores, es mejor obligar a que el Excel se encuentre cerrado, antes de tenerdesagradables consecuencias en memoria.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 115%;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 115%;"&gt;Lapropiedad visible, sirve para que no se vea la aplicación según la vamoscompletando con los automatismos.&amp;nbsp; La heindicado a TRUE por tratarse de un ejemplo, &lt;i&gt;peroes recomendable tenerla siempre false hasta que cerremos el fichero, siqueremos evitar errores&lt;/i&gt;. Si, por ejemplo, un usuario marca según damosvalores al Excel, el sistema mostrara un error de ejecución del automation.&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="line-height: 115%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&amp;nbsp; &amp;nbsp; Por&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&amp;nbsp;últimouna propiedad a destacar es el caption de la app de la ventana, meramenteinformativo.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;Respecto alas colecciones de objetos utilizadas, es interesante observar las del tipoActiveWorkBook (libro activo), y Worksheets (hojas del libro. Aquellos quehayan toqueteado con visual basic y vba, veréis que la notación es similar a lade estos lenguajes, pero adaptada al CAL.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;Por últimoen este post, el código necesario para cerrar la aplicación Excel y salvar elfichero.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-99DTy0bqcIM/TrFqaqQpVYI/AAAAAAAAAP8/yxMZwwS1IOk/s1600/4.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="221" src="http://2.bp.blogspot.com/-99DTy0bqcIM/TrFqaqQpVYI/AAAAAAAAAP8/yxMZwwS1IOk/s320/4.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;Para evitarel dialogo de sobreescribir, he optado por borrar el fichero si existe, con laconstante de FILE, ERASE. Lo único especial de estos métodos, es la propiedadde DisplayAlerts, perteneciente al ExcelApp, &amp;nbsp;sirve para que no se muestren los errores algenerarse el fichero propios de la aplicación Excel (no los del automation,sino los del Excel propios). Esta propiedad al igual que la de Visible, esrecomendable establecerla a false hasta que tengamos el fichero generado, paraque no salgan mensajes según estamos generando el fichero.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;Por último,no hay que olvidar el hacer un clear de la automation, para limpiar memoria conla variable. Con este código se puede generar un fichero de Excel normalmente,como por ejemplo desde un informe en sus eventos Pre-Report y Post-Report.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;A lo largode siguientes post, nos adentraremos en como rellenar este fichero con datos deNAV dinamicamente, utilizando los objetos y propiedades de Excel medianteautomatismos.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;Nos leemos,&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;Un saludo.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-1831963852693354291?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/1831963852693354291/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/11/automatismos-en-excel-pt-1.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/1831963852693354291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/1831963852693354291'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/11/automatismos-en-excel-pt-1.html' title='Automatismos en Excel, pt. 1'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-G14MUa_ywDU/TrFplCcOn-I/AAAAAAAAAPk/DfBjlQw30SM/s72-c/1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-3589151176442297583</id><published>2011-10-18T08:26:00.000-07:00</published><updated>2011-10-18T08:27:00.373-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interop'/><category scheme='http://www.blogger.com/atom/ns#' term='Dynamics'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>NAV Interop IV - Finale</title><content type='html'>&lt;br /&gt;&lt;div class="MsoNormal"&gt;Hola, &lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Hoy, voy a terminar con los post acerca del tema de lainterop con Dynamics NAV. Después de implementar el tema del modulo que,utilizando interop, puede comunicarse con gmail, vamos a realizar la parte quecorresponde con la presentación de los datos, esto es, las páginas del clientede roles&lt;i&gt; (también, esto se debe a la limitación importante de que sólo se puedeutilizar interop desde el cliente de roles).&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Pues bien, lo primero es añadir una pequeña línea de códigoque se me pasó en el anterior post, necesaria para poder abrir varias bandejaspara cada usuario, esto es:&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-W6ujtD3xVwk/Tp2ZPpaVxmI/AAAAAAAAAOc/_gRzjBhWerQ/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-W6ujtD3xVwk/Tp2ZPpaVxmI/AAAAAAAAAOc/_gRzjBhWerQ/s1600/1.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Justo antes de hacer cada &lt;b&gt;INSERT&lt;/b&gt; de registro de bandeja de Gmail.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Esta línea es necesaria para poder ver la bandeja en el casode varios usuarios a la vez, para poder distinguir a que usuario correspondecada correo.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Lo primero de todo, es hacer una página de configuraciónpara que los usuarios den de alta su correo y password.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-kL3l0TAM5s0/Tp2ZexDhoaI/AAAAAAAAAOk/pxUSqreWvos/s1600/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="202" src="http://2.bp.blogspot.com/-kL3l0TAM5s0/Tp2ZexDhoaI/AAAAAAAAAOk/pxUSqreWvos/s400/2.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Se trata de un formulario de página normal, la únicasalvedad es que en la caja de texto del password hay que indicar la propiedad ExtendedDatatypea “Masked”, para que se oculte el valor de los caracteres.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Ahora bien, la página más interesante es la de mostrar elcorreo como tal. Veamos. Como se trata de un ejemplo, no he querido complicarel asunto con hilos y cosas similares, simplemente he utilizado un automationde NAV timer. Las variables a utilizar, son 2 globales:&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-US"&gt;&lt;i&gt;NavTimer&lt;/i&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Automation&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;'NavisionTimer 1.0'.Timer&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-US"&gt;&lt;i&gt;Gmail&lt;/i&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Codeunit&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Gmail&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;Costumbresde programador de NAV, no he buscado en más profundidad, pero seguro que puedehacer sin automatismos. &lt;i&gt;&lt;b&gt;De todos modos,esto sirve para que observemos como interop + automation pueden coexistirperfectamente.&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;i&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;Para poderutilizar el evento del NavTimer, establecemos en el automation la propiedadwithevents a Yes.&lt;b style="font-style: italic;"&gt;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;b style="font-style: italic;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;Para podercentralizar el tema de los correos, he definido un método, que lo que hace esborrar los correos de el usuario en cuestión, y cargarlos de nuevo con nuestracodeunit.&amp;nbsp;Al abrir lapagina, establecemos el tiempo de de cada pasada por el método, y al cerrar,borramos los correos del usuario que tenga abierta la pagina, para poder abrirvarios usuarios su correo simultáneamente.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-hqFMTIK1nM4/Tp2Z0Qc4Z7I/AAAAAAAAAOs/GhCn_zW9qe8/s1600/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-hqFMTIK1nM4/Tp2Z0Qc4Z7I/AAAAAAAAAOs/GhCn_zW9qe8/s320/3.JPG" width="252" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;Por último,un pequeño detalle, aprovechando que guardamos el link del correo de gmail, enel evento OnAssistEdit(), llamamos al método &lt;b&gt;HYPERLINK&lt;/b&gt; con el valor de nuestrocampo Vinculo.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-mI6sDAb14AE/Tp2aCFEUsLI/AAAAAAAAAO0/ipgfTjF7QE8/s1600/4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="42" src="http://4.bp.blogspot.com/-mI6sDAb14AE/Tp2aCFEUsLI/AAAAAAAAAO0/ipgfTjF7QE8/s200/4.JPG" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Esta ultimaparte sirve para que cuando hagamos click en el titulo, abra nuestro navegadorweb con el correo que queremos ver. (Ojo, para que funcione correctamente,tenemos que estar logados en gmail con anterioridad). Con esto ya tenemosnuestra bandeja de entrada de Gmail en el cliente de roles de NAV, para que sepueda ver el correo de forma más cómoda.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-CKR9mVJqMms/Tp2aPr_JyfI/AAAAAAAAAO8/fPmQ645cL2k/s1600/5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="88" src="http://1.bp.blogspot.com/-CKR9mVJqMms/Tp2aPr_JyfI/AAAAAAAAAO8/fPmQ645cL2k/s320/5.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"&gt;Solo nosqueda añadir la pagina en nuestra pagina de roles del tipo “Role Center”, yestará a nuestra disposición.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"&gt;Espero queos haya gustado.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"&gt;Nos leemos,&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"&gt;Un saludo.&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="font-style: italic; font-weight: bold; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-style: italic; font-weight: bold; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-3589151176442297583?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/3589151176442297583/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/10/nav-interop-iv-finale.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/3589151176442297583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/3589151176442297583'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/10/nav-interop-iv-finale.html' title='NAV Interop IV - Finale'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-W6ujtD3xVwk/Tp2ZPpaVxmI/AAAAAAAAAOc/_gRzjBhWerQ/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-8834317130188561399</id><published>2011-10-05T12:08:00.000-07:00</published><updated>2011-10-05T12:09:02.753-07:00</updated><title type='text'>Evoluciona o muere.</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Hola,&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Siempre me he considerado una persona a la que le gusta el tema de innovacion y demás. Hace poco me llego el aviso de estas nuevas variaciones de los diseños en los foros, y he decidido dar el salto.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Veréis&amp;nbsp;que he optado por un cambio radical en el diseño del blog,&amp;nbsp;..tras varias pruebas y cambios en el diseño, este me ha parecido el mas ágil y visualmente sencillo a la par que concreto,se ve de una forma&amp;nbsp;rápida&amp;nbsp;y agil lo que se necesita ver, que en el fondo son los post y ejemplos que trato de contaros mes a mes.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Como todo, puede que me este equivocando...comentad lo que&amp;nbsp;queráis&amp;nbsp;en este post acerca de este nuevo cambio, a ver que os parece.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Nos leemos,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Un saludo.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;i&gt;PD: Tambien he comenzado a utilizar twitter, sigueme si quieres saber si hay entradas nuevas &lt;/i&gt;&lt;a href="http://twitter.com/#!/borlpez" style="color: #444444; font-weight: bold; line-height: 22px;"&gt;@borlpez&lt;/a&gt;&lt;/span&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-8834317130188561399?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/8834317130188561399/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/10/evoluciona-o-muere.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/8834317130188561399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/8834317130188561399'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/10/evoluciona-o-muere.html' title='Evoluciona o muere.'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-5203966525184033550</id><published>2011-10-03T04:27:00.000-07:00</published><updated>2011-10-03T04:27:00.825-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interop'/><category scheme='http://www.blogger.com/atom/ns#' term='Dynamics'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>NAV Interop III</title><content type='html'>&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Hola de nuevo,&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Sigo con el ejemplo que sirve para utilizar la interop, comunicando la bandeja de entrada de gmail. Antes de continuar, si eres nuevo, mejor que leas antes los post &lt;a href="http://dynamicsnaves.blogspot.com/2011/09/nav-interop-i-bandeja-gmail-en-nav.html"&gt;1&lt;/a&gt; y&lt;a href="http://dynamicsnaves.blogspot.com/2011/09/nav-interop-ii.html"&gt; 2&lt;/a&gt; acerca de este tema, para no despistarte. &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Anteriormente describí un método que finalmente sirve para obtener un documento de XML con todos los datos de los correos no leidos de la bandeja de entrada de una cuenta de gmail. Al realizarse con interop, este documento&lt;span&gt;&amp;nbsp; &lt;/span&gt;se recoge en una variable del tipo Dotnet, mas concretamente una variable &lt;span class="apple-style-span"&gt;&lt;i&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; line-height: 115%;"&gt;System.Xml,System.Xml.XmlDocument&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span class="apple-style-span"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; line-height: 115%;"&gt;, denominada &lt;b&gt;xmldomDoc&lt;/b&gt;.&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="apple-style-span"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; line-height: 115%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Vamos a ver en este post como recorrer un documento de XML utilizando interop directamente desde NAV. Lo primero de todo, es declarar el método con sus variables y parámetros. El método va a denominarse &lt;i&gt;ActualizarMail &lt;/i&gt;y tiene como parámetro una variable de registro de bandeja de entrada de gmail. Esto es porque al final, lo que queremos es almacenar el correo en algun sitio visible y manejable 100% por NAV.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-owfZQqICdBs/TomY6JHTjRI/AAAAAAAAAOM/P0BSibfVF2E/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="19" src="http://3.bp.blogspot.com/-owfZQqICdBs/TomY6JHTjRI/AAAAAAAAAOM/P0BSibfVF2E/s640/1.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; line-height: 115%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Ahora vamos con las variables. Es necesario declarar el conjunto de variables necesario para acceder a los diferentes nodos y atributos del fichero. Por otro lado, recogemos los valores a introducir en la tabla en unas variables simples de texto y fecha, además de utilizar la tabla definida en el post 1 con la configuración de cada usuario (Usuario NAV, usuario google y contraseña de acceso). Por último, un par de variables del tipo entero para poder recorrer mediante bucle los elementos. Con todo, queda un conjunto de variables similar a este:&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse; margin-left: 2.85pt; width: 525px;"&gt;&lt;tbody&gt;&lt;tr style="height: 14.9pt; mso-yfti-firstrow: yes; mso-yfti-irow: 0;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;b&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Name&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;b&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;DataType&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;b&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Subtype&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;b&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Length&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 1;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;xmlNodeList1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;DotNet&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;System.Xml.XmlNodeList&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 2;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;xmlNodeList2&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;DotNet&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;System.Xml.XmlNodeList&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 3;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;xmlNodeList3&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;DotNet&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;System.Xml.XmlNodeList&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 4;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;xmlNodeList4&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;DotNet&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;System.Xml.XmlNodeList&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 5;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;xmldomElem1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;DotNet&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;System.Xml.XmlNode&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 6;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;xmldomElem2&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;DotNet&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;System.Xml.XmlNode&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 7;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;xmldomElem3&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;DotNet&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;System.Xml.XmlNode&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 8;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;xmldomElem4&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;DotNet&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;System.Xml.XmlNode&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 9;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;xmldomElem5&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;DotNet&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;System.Xml.XmlNode&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 10;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;xmldomAttrib&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;DotNet&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;System.Xml.XmlAttribute&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 11;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;xmldomAttribCollec&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;DotNet&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;System.Xml.XmlAttributeCollection&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 12;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;NumeroCorreos&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Integer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 13;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;i&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Integer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 14;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;ii&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Integer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 15;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;idGmail&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Text&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; text-align: right;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;250&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 16;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;FechaEntrada&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Date&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 17;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;HoraEntrada&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Time&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 18;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;TituloGmail&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Text&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; text-align: right;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;100&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 19;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;DeGmail&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Text&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; text-align: right;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;100&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 20;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;VinculoGmail&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Text&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; text-align: right;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;250&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 21;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;FechaEntradaTexto&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Text&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; text-align: right;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;250&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 22;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;FechaEntradaTex&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Text&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; text-align: right;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;30&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 23;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;HoraEntradaTex&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Text&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; text-align: right;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;30&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 14.9pt; mso-yfti-irow: 24; mso-yfti-lastrow: yes;"&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 100.0pt;" valign="bottom" width="133"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;ConfigMail&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Record&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 174.0pt;" valign="bottom" width="232"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Config.   Correos Gmail&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="height: 14.9pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;Después&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 115%;"&gt;&amp;nbsp;de todo esto, establecemos el código de nuestra función, similar al que sigue:&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Arial, sans-serif; font-size: 9.5pt; line-height: 115%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="color: black; line-height: 115%;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-SqVT3IRrTmY/TombST72msI/AAAAAAAAAOY/GpwsePbesEs/s1600/CodigoActualizarMail.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-SqVT3IRrTmY/TombST72msI/AAAAAAAAAOY/GpwsePbesEs/s1600/CodigoActualizarMail.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="color: black; line-height: 115%;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="color: black; line-height: 115%;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="color: black; line-height: 115%;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="color: black; line-height: 115%;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: black; line-height: 115%;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-family: Arial, sans-serif; line-height: 115%;"&gt;El procedimiento en si, es bastante sencillo, recogemos la lista de correos, y la recorremos, leyendo cada nodo o atributo y asignando su valor a una variable. En última instancia, todos los valores recogidos se insertan en nuestro registro y listo.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-family: Arial, sans-serif; line-height: 115%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;  &lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-family: Arial, sans-serif; line-height: 115%;"&gt;De todo el código, hay que destacar alguna cosilla interesante. Lo primero de todo, es que las variables utilizadas son en su mayoría Dotnet, luego hay que tener en cuenta siempre las creaciones de variables con sus correspondientes constructores o asignaciones. Después cabe destacar, que cada correo tiene un atributo bastante útil, denominado &lt;i&gt;href&lt;/i&gt;, este atributo nos permite que, desde nuestro nav, podamos abrir un correo directamente en nuestro navegador web. (Ojo, el correo tiene que estar abierto previamente). Hay que formatear como sucede casi siempre, la fecha del correo para que coincida con un formato legible para NAV. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-family: Arial, sans-serif; line-height: 115%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-family: Arial, sans-serif; line-height: 115%;"&gt;Con esto, ya tenemos todo el código necesario para obtener y leer el fichero xml con la información. En el siguiente post nos detendremos en la parte de presentación en las páginas del cliente de roles.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-family: Arial, sans-serif; line-height: 115%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-family: Arial, sans-serif; line-height: 115%;"&gt;Nos leemos,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-family: Arial, sans-serif; line-height: 115%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: black; font-family: Arial, sans-serif; line-height: 115%;"&gt;Un saludo.&lt;span class="Apple-style-span" style="font-size: 9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-5203966525184033550?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/5203966525184033550/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/10/nav-interop-iii.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/5203966525184033550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/5203966525184033550'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/10/nav-interop-iii.html' title='NAV Interop III'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-owfZQqICdBs/TomY6JHTjRI/AAAAAAAAAOM/P0BSibfVF2E/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-3120788265571532537</id><published>2011-09-26T07:02:00.000-07:00</published><updated>2011-09-26T07:02:25.049-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interop'/><category scheme='http://www.blogger.com/atom/ns#' term='Dynamics'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>NAV Interop II</title><content type='html'>&lt;br /&gt;&lt;div class="MsoNormal"&gt;Hola,&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Prosigo con el ejemplo de interoperabilidad del &lt;a href="http://dynamicsnaves.blogspot.com/2011/09/nav-interop-i-bandeja-gmail-en-nav.html"&gt;anterior post&lt;/a&gt;. Una vez determinado el modelo de datos, tenemos que pensar como y dondeintroducir el código necesario. En el caso de la interoperabilidad hay quetener en cuenta una limitación, &lt;b&gt;&lt;i&gt;&lt;span style="font-size: 12.0pt; line-height: 115%; mso-bidi-font-size: 11.0pt;"&gt;la interop sólo sirve en el cliente de roles&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;,fuera de él no se ejecuta y muestra un mensaje bastante claro acerca de estalimitación:&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-vFKbRLSN0ag/ToCDDpM-_EI/AAAAAAAAAOA/M8N_sLlhTTA/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="88" src="http://4.bp.blogspot.com/-vFKbRLSN0ag/ToCDDpM-_EI/AAAAAAAAAOA/M8N_sLlhTTA/s400/1.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Esto implica que no podemos utilizar código de interopdentro de formularios de cliente clásico o report en capa clásica, el código tiene que ejecutarse desde cliente de roles, en definitiva. Con los módulos,si se llaman desde el cliente clásico, habría que controlar el código mediantela variable &lt;b&gt;ISSERVICETIER&lt;/b&gt;,&lt;b&gt; &lt;/b&gt;para&lt;b&gt; &lt;/b&gt;provocar que el código con interop no sea utilizado fuera delcliente de roles. Al utilizar la interop, podemos seguir dos formas (en lamedida de lo posible, claro está) a la hora de realizar los desarrollos:&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpFirst" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 1)&amp;nbsp;&lt;/b&gt;Desarrollandoíntegramente nuestra clase en .NET y utilizándola como un fichero de recurso ytipo de variable personalizada para nosotros. Para ello, hay que ubicar en eldirectorio add-ins de instalación que corresponda el fichero dll generado:&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle"&gt;&lt;span lang="EN-US"&gt;- Cliente clásico&lt;span&gt;&amp;nbsp; &lt;/span&gt;MicrosoftDynamics NAV\60\Classic\Add-ins&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle"&gt;&lt;span lang="EN-US"&gt;- NAV Server Microsoft Dynamics NAV\60\Service\Add-ins&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle"&gt;&lt;span lang="EN-US"&gt;- Microsoft Dynamics NAV\60\Roletailored Client\Add-ins&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle"&gt;&lt;b&gt;2) &lt;/b&gt;Utilizandodirectamente las clases que vienen “heredadas” del framework que tengamosinstalado en el sistema.&lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;En este primer caso que planteo, he optado por utilizar loque ya existe del framework, ya que es mas que suficiente para trabajar, ytenemos el beneficio de que el framework ya se encuentra instalado en losequipos previamente.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Una vez vistas las limitaciones de la interop, y definidocomo vamos a trabajar con ella en este caso, veamos cómo construir el códigoque será el core de la integración con gmail. La estructura a seguir será lasiguiente, utilizando de base el modelo de datos del post anterior, vamos adesarrollar una codeunit que será la que gestione todo el tema de lacomunicación con el server de de correo&lt;span&gt;&amp;nbsp;&lt;/span&gt;de gmail. Para ello, he declarado una codeunit Gmail, condos métodos:&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;i&gt;GetMailAtom&lt;/i&gt;&lt;/b&gt;, estemétodo se encargará de hacer la petición al servidor de gmail del fichero XMLque contenga los correos no leídos.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;i&gt;ActualizarMail&lt;/i&gt;&lt;/b&gt;,que se encargará de leer el fichero de XML obtenido y transformarlo enregistros de la tabla bandeja de entrada, creada en el post anterior.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;En este post voy a hablar acerca del primer método,&lt;b&gt;&lt;i&gt;GetMailAtom&lt;/i&gt;&lt;/b&gt;. Una vez definida la codeunit, lo primero de todo es establecer lavariable de documento de XML que vamos a cargar en el primer método, ytransformar en el segundo. En este punto es importante tener claro que, aunquelos tipos de datos con los que se desarrolle en NET sean similares a los quepodamos utilizar con otro tipo de variables (por ejemplo, en este caso del documentode XML, podríamos trabajar con un automatismo de documento de XML), no sepueden asignar variables de diferente tipo entre ellas, a no ser que hagamospuentes, como por ejemplo en este caso seria guardar el fichero XML en unfichero físico y leer con un automatismo desde él. Este punto puede sonar unpoco a perogrullada, pero es interesante tenerlo en cuenta. Con esto, vamos acrear nuestra primera variable NET. Para ello, abrimos las variables globalesde la codeunit , indicamos el nombre &lt;b&gt;&lt;i&gt;xmldomDoc&lt;/i&gt;&lt;/b&gt;, y después indicamos comotipo de variable DotNet, que son los tipos variables nuevas para estosmenesteres. En Subtype, desplegamos con los 3 puntos, y tenemos que seleccionarel ensamblado al que pertenece la variable, de forma similar a como lo haríamoscomo con un automatismo. En este momento aparece la primera diferencia aresaltar, disponemos de dos pestañas diferentes, &lt;b&gt;NAV&lt;/b&gt; y &lt;b&gt;.NET&lt;/b&gt;. Estadiferenciación radica lo indicado anteriormente, la pestaña Dynamics NAVcorresponde con las clases propias desarrolladas e indicadas en la carpeta, yla pestaña .NET en las de la librería de framework instalada en la maquina.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-xptSEYFlAzY/ToCDd7K2UoI/AAAAAAAAAOE/OtUsUNEXcj8/s1600/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="35" src="http://1.bp.blogspot.com/-xptSEYFlAzY/ToCDd7K2UoI/AAAAAAAAAOE/OtUsUNEXcj8/s400/2.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;Seleccionamos&lt;span&gt;&amp;nbsp; &lt;/span&gt;elensamblado para que quede de forma similar a como esta: &lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse; margin-left: 2.65pt; width: 415px;"&gt; &lt;tbody&gt;&lt;tr style="height: 15.0pt; mso-yfti-firstrow: yes; mso-yfti-irow: 0;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 71.0pt;" valign="bottom" width="95"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;b&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Name&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 49.0pt;" valign="bottom" width="65"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;b&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;DataType&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 191.0pt;" valign="bottom" width="255"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;b&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Subtype&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt; mso-yfti-irow: 1; mso-yfti-lastrow: yes;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 71.0pt;" valign="bottom" width="95"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;xmldomDoc&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 49.0pt;" valign="bottom" width="65"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;DotNet&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 191.0pt;" valign="bottom" width="255"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-US" style="color: black; mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;System.Xml,System.Xml.XmlDocument&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;i&gt;Ojo, cuando indico la información del subtipo en el blog, obvio laversión y la clave publica, para reducir la información y dejar lo masimportante, de que librería y que tipo de clase estamos utilizando.&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;Ahora declaramos las variables locales al primer método GetMailAtom, quedarían tal y comosigue:&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;- Parámetros:&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse; font-style: italic; font-weight: bold; margin-left: 2.65pt; width: 239px;"&gt; &lt;tbody&gt;&lt;tr style="height: 15.0pt; mso-yfti-firstrow: yes; mso-yfti-irow: 0;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 70.6pt;" valign="bottom" width="94"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;b&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;Name&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 49.0pt;" valign="bottom" width="65"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;b&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;DataType&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;b&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;Length&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt; mso-yfti-irow: 1;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 70.6pt;" valign="bottom" width="94"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;&lt;span class="Apple-style-span" style="font-style: normal; font-weight: normal;"&gt;CuentaGmail&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 49.0pt;" valign="bottom" width="65"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;&lt;span class="Apple-style-span" style="font-style: normal; font-weight: normal;"&gt;Text&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;  &lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; text-align: right;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;&lt;span class="Apple-style-span" style="font-style: normal; font-weight: normal;"&gt;50&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt; mso-yfti-irow: 2; mso-yfti-lastrow: yes;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 70.6pt;" valign="bottom" width="94"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;&lt;span class="Apple-style-span" style="font-style: normal; font-weight: normal;"&gt;PasswordGmail&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 49.0pt;" valign="bottom" width="65"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;&lt;span class="Apple-style-span" style="font-style: normal; font-weight: normal;"&gt;Text&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 60.0pt;" valign="bottom" width="80"&gt;  &lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; text-align: right;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;&lt;span class="Apple-style-span" style="font-style: normal; font-weight: normal;"&gt;30&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="MsoNormal" style="font-style: italic; font-weight: bold;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;- Variables locales:&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse; font-style: italic; font-weight: bold; margin-left: 2.65pt; width: 415px;"&gt; &lt;tbody&gt;&lt;tr style="height: 15.0pt; mso-yfti-firstrow: yes; mso-yfti-irow: 0;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 71.0pt;" valign="bottom" width="95"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;b&gt;&lt;span style="color: black; font-style: normal;"&gt;Name&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 49.0pt;" valign="bottom" width="65"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;b&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;DataType&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 191.0pt;" valign="bottom" width="255"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;b&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;Subtype&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt; mso-yfti-irow: 1;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 71.0pt;" valign="bottom" width="95"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-style: normal; font-weight: normal;"&gt;webRequest&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 49.0pt;" valign="bottom" width="65"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-style: normal; font-weight: normal;"&gt;DotNet&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 191.0pt;" valign="bottom" width="255"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-style: normal; font-weight: normal;"&gt;System,System.Net.WebRequest&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt; mso-yfti-irow: 2;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 71.0pt;" valign="bottom" width="95"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-style: normal; font-weight: normal;"&gt;credentials&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 49.0pt;" valign="bottom" width="65"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-style: normal; font-weight: normal;"&gt;DotNet&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 191.0pt;" valign="bottom" width="255"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-style: normal; font-weight: normal;"&gt;System,System.Net.NetworkCredential&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt; mso-yfti-irow: 3;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 71.0pt;" valign="bottom" width="95"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-style: normal; font-weight: normal;"&gt;webResponse&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 49.0pt;" valign="bottom" width="65"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-style: normal; font-weight: normal;"&gt;DotNet&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 191.0pt;" valign="bottom" width="255"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-style: normal; font-weight: normal;"&gt;System, System.Net.WebResponse&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt; mso-yfti-irow: 4;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 71.0pt;" valign="bottom" width="95"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-style: normal; font-weight: normal;"&gt;reader&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 49.0pt;" valign="bottom" width="65"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-style: normal; font-weight: normal;"&gt;DotNet&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 191.0pt;" valign="bottom" width="255"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-style: normal; font-weight: normal;"&gt;mscorlib, System.IO.StreamReader&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt; mso-yfti-irow: 5; mso-yfti-lastrow: yes;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 71.0pt;" valign="bottom" width="95"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-style: normal; font-weight: normal;"&gt;stream&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 49.0pt;" valign="bottom" width="65"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; font-style: normal; font-weight: normal;"&gt;DotNet&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 191.0pt;" valign="bottom" width="255"&gt;  &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;&lt;span class="Apple-style-span" style="font-style: normal; font-weight: normal;"&gt;mscorlib,System.IO.Stream&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="MsoNormal" style="font-style: italic; font-weight: bold;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-style: italic; font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-style: normal; font-weight: normal;"&gt;Ya tenemos toda la estructura de variables y métodos de la Codeunit,podemos programar este primer método sin problema:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-en9fZGTtjsI/ToCEdhi6DGI/AAAAAAAAAOI/oSqRCgrzxDU/s1600/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="212" src="http://2.bp.blogspot.com/-en9fZGTtjsI/ToCEdhi6DGI/AAAAAAAAAOI/oSqRCgrzxDU/s640/3.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Que es lo que hacemos en el método? Primero una petición delfichero XML, le indicamos la autenticación necesaria, en función de losparámetros que vengan del método y recogemos la respuesta, primero como unflujo de datos, y a través de un Reader, lo convertimos en fichero XML,asignándole a la variable global que teníamos declarada de antes.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Con esto tenemos nuestro primer método que utiliza Interop.Como se puede observar, la potencia que nos otorga a la hora de desarrollo esinmensa, pero hay tanto recurso, que es necesario saber a dónde queremos llegarantes de desarrollar, para no perder el norte. Aquellos que seandesarrolladores de NAV íntegramente, y no conozcan nada de programación en NET,tendrán un reto más amplio por delante, para poder conocer bien como funcionaeste tipo de programación con Interop, opino que hay que saber también un pocode NET para poder utilizarlo aprovechando al máximo lo que nos ofrece (tipos dedatos, clases, etc..)&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Como leer este XML nativo de NET y convertirlo a nuestros registros? ,en los siguientes post, cerraremos este punto.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Nos leemos,&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Un saludo.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;!--EndFragment--&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-3120788265571532537?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/3120788265571532537/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/09/nav-interop-ii.html#comment-form' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/3120788265571532537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/3120788265571532537'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/09/nav-interop-ii.html' title='NAV Interop II'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-vFKbRLSN0ag/ToCDDpM-_EI/AAAAAAAAAOA/M8N_sLlhTTA/s72-c/1.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-8624446989922469499</id><published>2011-09-19T07:50:00.000-07:00</published><updated>2011-09-19T07:50:21.910-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interop'/><category scheme='http://www.blogger.com/atom/ns#' term='Dynamics'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>NAV Interop I, bandeja gmail en NAV.</title><content type='html'>Hola a todos,&lt;br /&gt;&lt;br /&gt;Hoy voy a comenzar una nueva serie de post acerca de una de las nuevas funcionalidades de Dynamics NAV 2009 R2, conocida como interoperabilidad. Esta nueva funcionalidad permite que Dynamics NAV pueda, de forma nativa utilizar librerias desarrolladas en C# directamente, ya sean librerias del framework o clases desarrolladas por nosotros mismos. Esto potencia muchisimo el desarrollo, ya que podemos utilizar los montones de recursos que existen de C# dentro de NAV.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/--58VejU7kQA/TndWGsbqiRI/AAAAAAAAAN8/gp2Tl5wl3cM/s1600/GMAIL0.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/--58VejU7kQA/TndWGsbqiRI/AAAAAAAAAN8/gp2Tl5wl3cM/s320/GMAIL0.JPG" width="220" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Para este ejemplo de como utilizar la interoperabilidad de Dynamics NAV, voy a crear un modulo que sea capaz de obtener los correos que existen en la bandeja de entrada de una cuenta de gmail, e importarlos en NAV. Para ello, hay que recoger de un feed un xml (&lt;a href="https://mail.google.com/mail/feed/atom"&gt;https://mail.google.com/mail/feed/atom&lt;/a&gt;) , previa autenticacion del usuario, y leerlo de una forma concreta recogiendo los datos y mostrandolo dentro de nuestro Dynamics NAV. Como siempre, antes de comenzar con el desarrollo puro y duro, voy a explicar como he establecido el modelo de datos necesario para recoger los datos.&lt;br /&gt;&lt;br /&gt;En la primera tabla, denominada "Config. Correos Gmail", indico la relacion de cada usuario con su correspondiente cuenta gmail y su password, necesarios para poder autenticarse en el servicio web a posteriori. Esta tabla contiene los siguientes campos:&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;User ID,&lt;/b&gt; &lt;i&gt;code de 20 de longitud y clave de la tabla. Este campo lo he relacionado con la tabla User, y he utilizado la codeunit "Login Management" (418), en los eventos lookup y validate del campo para poder obtener un listado y validacion de usuarios. Está indicado como clave para que cada vez que un usuario se encuentra logueado, vea únicamente sus correos.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;Cuenta gmail,&lt;/b&gt; &lt;i&gt;un Text de 50. Este campo contendrá la cuenta de Gmail completa (ejemplo@gmail.com).&lt;/i&gt;&lt;br /&gt;&lt;i&gt;- &lt;/i&gt;&lt;b&gt;Password. &lt;/b&gt;&lt;i&gt;Este campo contendrá la contraseña de la cuenta, lo he indicado como un text de 30.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;La segunda tabla, denominada "Bandeja entrada gmail", contiene los correos propiamente dichos, su definicion consta de los siguientes campos:&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;&lt;b&gt;Id. Gmail,&lt;/b&gt;&lt;i&gt;&amp;nbsp;Text de 200, que contiene el identificador del mail, lo he dejado como clave.&lt;/i&gt;&lt;br /&gt;-&amp;nbsp;&lt;b&gt;Fecha entrada&lt;/b&gt;, &lt;i&gt;date&lt;/i&gt;.&lt;br /&gt;-&amp;nbsp;&lt;b&gt;Hora entrada&lt;/b&gt;, &lt;i&gt;time&lt;/i&gt;.&lt;br /&gt;- &lt;b&gt;Titulo&lt;/b&gt;,&amp;nbsp;&lt;i&gt;Text de 100&lt;/i&gt;.&lt;br /&gt;-&amp;nbsp;&lt;b&gt;De&lt;/b&gt;, &lt;i&gt;Text de 100&lt;/i&gt;.&lt;br /&gt;-&amp;nbsp;&lt;b&gt;Vinculo&lt;/b&gt;, &lt;i&gt;text de 250, vinculo al correo&lt;/i&gt;.&lt;br /&gt;-&amp;nbsp;&lt;b&gt;Id. Usuario&lt;/b&gt;, &lt;i&gt;code de 20&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Con esto, ya tenemos el modelo de datos, y la idea de lo que vamos a crear, en post posteriores iré describiendo como desarrollar el modulo en profundidad, en principo el objetivo es que quede algo así:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-8N7hLi7caLQ/TndSiy34RJI/AAAAAAAAAN0/rgxNmRt4dls/s1600/GMAIL1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="95" src="http://3.bp.blogspot.com/-8N7hLi7caLQ/TndSiy34RJI/AAAAAAAAAN0/rgxNmRt4dls/s400/GMAIL1.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Nos "leemos".&lt;br /&gt;&lt;br /&gt;Un saludo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-8624446989922469499?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/8624446989922469499/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/09/nav-interop-i-bandeja-gmail-en-nav.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/8624446989922469499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/8624446989922469499'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/09/nav-interop-i-bandeja-gmail-en-nav.html' title='NAV Interop I, bandeja gmail en NAV.'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/--58VejU7kQA/TndWGsbqiRI/AAAAAAAAAN8/gp2Tl5wl3cM/s72-c/GMAIL0.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-6309909926543583860</id><published>2011-08-12T04:54:00.000-07:00</published><updated>2011-08-12T04:54:01.976-07:00</updated><title type='text'>Reportando con Dynamics NAV pequeño video-tutorial 2.</title><content type='html'>Hola,&lt;br /&gt;&lt;br /&gt;Prosigo con la subida del video tutorial con la parte más interesante, el desarrollo en RDLC. Como en el anteior post, el link al archivo a descargar esta en el título.&lt;br /&gt;&lt;br /&gt;Nos leemos,&lt;br /&gt;Un saludo.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;&lt;b&gt;&lt;u&gt;&lt;a href="http://www.screencast.com/t/pzm2viGWw"&gt;VIDEO 2: Desarrollo del informe en Dynamics NAV.&amp;nbsp;&lt;/a&gt;&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object data="http://content.screencast.com/users/BorLpez/folders/Default/media/2ed3e8c6-8f70-416a-874b-ea89c0e4145b/bootstrap.swf" height="454" id="scPlayer" type="application/x-shockwave-flash" width="590"&gt;  &lt;param name="movie" value="http://content.screencast.com/users/BorLpez/folders/Default/media/2ed3e8c6-8f70-416a-874b-ea89c0e4145b/bootstrap.swf" /&gt;&lt;param name="quality" value="high" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;param name="flashVars" value="thumb=http://content.screencast.com/users/BorLpez/folders/Default/media/2ed3e8c6-8f70-416a-874b-ea89c0e4145b/FirstFrame.jpg&amp;containerwidth=72&amp;containerheight=44&amp;content=http://content.screencast.com/users/BorLpez/folders/Default/media/2ed3e8c6-8f70-416a-874b-ea89c0e4145b/02.swf&amp;blurover=false" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="scale" value="showall" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;param name="base" value="http://content.screencast.com/users/BorLpez/folders/Default/media/2ed3e8c6-8f70-416a-874b-ea89c0e4145b/" /&gt;Unable to display content. Adobe Flash is required. &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-6309909926543583860?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/6309909926543583860/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/08/reportando-con-dynamics-nav-pequeno_12.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/6309909926543583860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/6309909926543583860'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/08/reportando-con-dynamics-nav-pequeno_12.html' title='Reportando con Dynamics NAV pequeño video-tutorial 2.'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-7700304893834094206</id><published>2011-08-12T04:49:00.000-07:00</published><updated>2011-08-12T04:56:21.703-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dynamics'/><category scheme='http://www.blogger.com/atom/ns#' term='RDLC'/><title type='text'>Reportando con Dynamics NAV pequeño video-tutorial.</title><content type='html'>Hola a todos,&lt;br /&gt;&lt;br /&gt;Tras unos cuantos dias sin novedades, y bastante tiempo sin postear...con las vacaciones y el verano haciendo estragos, voy a retomar el tema de los informes en RDLC.&lt;br /&gt;&lt;br /&gt;Siguiendo con la tematica RDLC me encontraba ante una nueva problemática, demasiadas cosas que contar demasiado "visuales" (arrastra, haz click...) luego tras meditarlo he terminado por utilizar videos.&lt;br /&gt;&lt;br /&gt;Voy a indicar con un pequeño video tutorial como hacer un pequeño informe en Dynamics NAV con RDLC, aplicando un poco de todo (navegar,gráficos, formato....). Lo he dividido en 2 partes, una indicando todo el modelo de datos y desarrollo en la capa más clásica y otra con el desarrollo puro y duro en Visual Studio&lt;br /&gt;&lt;br /&gt;Teneis las vistas preliminares a continuación&amp;nbsp;en este mismo post, con sus enlaces de descarga del fichero swf. en cada titulo del video. Son ficheros un poco pesados y las imagenes de alta resolución, lo he preferido a perder información...en siguientes videos mejoraré esta forma,&amp;nbsp;espero que sirva de ayuda.&lt;br /&gt;&lt;br /&gt;A continuacion posteo el otro video en otro post distinto.&lt;br /&gt;Nos leemos,&lt;br /&gt;Saludos.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;u&gt;&lt;a href="http://www.screencast.com/t/ZDUj8U5sOs"&gt;VIDEO 1: Desarrollo del informe en Dynamics NAV.&amp;nbsp;&lt;/a&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;object data="http://content.screencast.com/users/BorLpez/folders/Default/media/1dc416fe-4cbf-4ac8-81c6-75070f258434/bootstrap.swf" height="454" id="scPlayer" style="clear: right; float: right;" type="application/x-shockwave-flash" width="590"&gt;  &lt;param name="movie" value="http://content.screencast.com/users/BorLpez/folders/Default/media/1dc416fe-4cbf-4ac8-81c6-75070f258434/bootstrap.swf" /&gt;&lt;param name="quality" value="high" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;param name="flashVars" value="thumb=http://content.screencast.com/users/BorLpez/folders/Default/media/1dc416fe-4cbf-4ac8-81c6-75070f258434/FirstFrame.jpg&amp;containerwidth=72&amp;containerheight=44&amp;content=http://content.screencast.com/users/BorLpez/folders/Default/media/1dc416fe-4cbf-4ac8-81c6-75070f258434/01.swf&amp;blurover=false" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="scale" value="showall" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;param name="base" value="http://content.screencast.com/users/BorLpez/folders/Default/media/1dc416fe-4cbf-4ac8-81c6-75070f258434/" /&gt;Unable to display content. Adobe Flash is required. &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-7700304893834094206?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/7700304893834094206/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/08/reportando-con-dynamics-nav-pequeno.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/7700304893834094206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/7700304893834094206'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/08/reportando-con-dynamics-nav-pequeno.html' title='Reportando con Dynamics NAV pequeño video-tutorial.'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-7249485080336814003</id><published>2011-06-22T01:00:00.000-07:00</published><updated>2011-06-22T01:00:24.265-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RDLC'/><category scheme='http://www.blogger.com/atom/ns#' term='Informes'/><title type='text'>"Reportando" con Dynamics NAV 2: Los inicios.</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Hola a todos,&lt;/span&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Voy a continuar con el tema del diseño de informes en la capa RDLC. Mi objetivo para hoy es el siguiente, quiero obtener una lista de clientes lo más simple posible en esta nueva capa.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Para ello, tenemos que empezar desde el nivel más bajo, el cliente clásico. Con el&amp;nbsp;asistente en unos pocos click sacamos un listado de cliente similar a esto:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-hYhnj2yJDvo/TgGc9u6jEKI/AAAAAAAAALY/0T093zw83hk/s1600/01.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="236" src="http://4.bp.blogspot.com/-hYhnj2yJDvo/TgGc9u6jEKI/AAAAAAAAALY/0T093zw83hk/s400/01.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Ahora, vamos a ver que pasa si ejecutamos el informe con la capa de presentación del&amp;nbsp;cliente de roles. Lamentablemente, de momento no es posible ejecutarla directamente&amp;nbsp;desde el cliente clásico (y puede que nunca lo sea, por lo que se dice, NAV 7 no&amp;nbsp;dispondrá del cliente clásico con informes), por tanto, tenemos que crear un hyperlink para poder&amp;nbsp;ejecutar el informe de clientes desde la presentación de roles. Inicio-&amp;gt;Ejecutar,&amp;nbsp;y escribimos los siguiente:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif; font-size: 10pt; line-height: 115%;"&gt;DynamicsNAV://ipservidornav/nombreservicio3ªcapa/nombreempresa/runreport?report=idreport&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Para mi, que se trata del report 50001, dentro de nuestra amiga CRONUS, queda tal que&amp;nbsp;así:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US" style="font-family: Arial, Helvetica, sans-serif; font-size: 10pt; line-height: 115%;"&gt;DynamicsNAV://localhost/dynamicsnav/CRONUS/runreport?report=50001&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Ejecutamos y....espera, que es esto? Si no proponemos una capa de presentación RDLC,&lt;/span&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;el informe se muestra tal y como se encuentre en modo clásico. Ya lo tenemos!! ..............&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Que&amp;nbsp;vá, vamos a mejorarlo un poco más.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Aquí quiero hacer un inciso, desde el menú Herramientas, tenemos dos opciones:&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Crear Layout Suggestion -&amp;gt;&lt;/b&gt; Intenta crear un informe a partir de los datos del clásico.&amp;nbsp;Para mi gusto (apenas lo he utilizado demasiado, y poco en R2, no es demasiado util)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Delete Layout Suggestion -&amp;gt;&lt;/b&gt; Se elimina toda la capa RDLC de un solo click.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Vamos a crear el layout nuevo desde 0. Desde el mismo informe hacemos click en ver-Layout,&amp;nbsp;y nos abre el VS studio,en blanco.Si nos fijamos en la zona izquierda del VS, tenemos un Origen de datos, Con el dataset&amp;nbsp;y el result que son los datos que podemos pintar en el informe.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-vChjsHCM9ak/TgGdoQgIWYI/AAAAAAAAALc/p19-UhwHBmQ/s1600/02.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="196" src="http://4.bp.blogspot.com/-vChjsHCM9ak/TgGdoQgIWYI/AAAAAAAAALc/p19-UhwHBmQ/s200/02.JPG" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;El origen de datos de la capa de RDLC, son los datos que vienen de las secciones de&amp;nbsp;nuestro informe clásico. Nuestro cliente CSIDE propone los nombres de los datos a&amp;nbsp;partir de la propiedad &lt;b&gt;DataSetFieldName&lt;/b&gt; de cada control pintado en las secciones. Sï,&amp;nbsp;precisamente por eso ahora surgen problemas cuando modificamos un informe existente,&amp;nbsp;tenemos que tener cuidado con esta propiedad al copiar-pegar controles. Tambien nos&amp;nbsp;indica en el origen de datos los &lt;b&gt;caption &lt;/b&gt;para que podamos introducirlos en las cabeceras.&amp;nbsp;Nuestro informe tiene que tener la siguiente estructura:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-qMpZ9Utxna4/TgGd0YkqBMI/AAAAAAAAALg/IlVsK2qVJyc/s1600/03.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="176" src="http://2.bp.blogspot.com/-qMpZ9Utxna4/TgGd0YkqBMI/AAAAAAAAALg/IlVsK2qVJyc/s320/03.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Si, es bastante sencillo, pero es una primera toma de contacto. Bien, lo primero que&amp;nbsp;hay que tener en cuenta a la hora de desarrollar el informe, es que tenemos un diseñador&amp;nbsp;mas complejo y moderno que el clásico en NAV.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Aunque podemos introducir tambien una cabecera y pie a nuestro informe, de momento no es&amp;nbsp;necesario. Dentro del cuadro de herramientas a la izquierda, seleccionamos el objeto del&amp;nbsp;tipo Tabla, y lo arrastramos a la sección Body del informe. Hacemos click con el botón derecho del raton encima de la tabla y seleccionamos “&lt;i&gt;agregar columna&lt;/i&gt;”. Por defecto se indican 3 columnas, y necesitamos 4. Arrastramos los datos del origen de datos seleccionando con el raton y arrastrando a cada celda del objeto tabla:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpFirst" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Seleccionamos cada Origen de datos los que tienen el nombre terminado en caption, y lo indicamos en las celdas superiores de la tabla, que se indican con el símbolo&lt;a href="http://2.bp.blogspot.com/-RDlbLl66KMA/TgGeZO-2pVI/AAAAAAAAALk/zSHoN119fb0/s1600/simb1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-RDlbLl66KMA/TgGeZO-2pVI/AAAAAAAAALk/zSHoN119fb0/s1600/simb1.JPG" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&lt;/span&gt;Seleccionamos los orígenes de datos cuyos nombes no son acabados en caption, y los indicamos en las filas, para que se repitan, el símbolo es&lt;a href="http://3.bp.blogspot.com/-597Ko9117q8/TgGegHcn6SI/AAAAAAAAALo/ZjNXzIb8hlY/s1600/simb2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-597Ko9117q8/TgGegHcn6SI/AAAAAAAAALo/ZjNXzIb8hlY/s1600/simb2.JPG" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&amp;nbsp;Por ultimo totalizamos el informe, añadiendo el campo Balance (LCY) en el pie de la tabla Automaticamente se introducirá como &lt;b style="mso-bidi-font-weight: normal;"&gt;=Sum(Fields!Customer__Balance__LCY__.Value)&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Ajustamos el valor de la sección body justo al tamaño de la tabla. Si hemos hecho todo correctamente, quedará el diseño de este modo:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-5SQnC5q1yDE/TgGfX_OlWEI/AAAAAAAAALw/uJMDiUy81Ds/s1600/04.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="112" src="http://3.bp.blogspot.com/-5SQnC5q1yDE/TgGfX_OlWEI/AAAAAAAAALw/uJMDiUy81Ds/s640/04.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: black; font-family: Arial, sans-serif;"&gt;Una vez finalizado el diseño, cerramos el editor de VS:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif;"&gt;Pide guardar cambios, decimos que sí.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif;"&gt;Al recoger el foco del informe, NAV nos avisa de que hemos cambiado el layout, le decimos que sí para que guarde los cambios.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif;"&gt;Le decimos a NAV que guarde y compile el informe.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: black; font-family: Arial, sans-serif;"&gt;&lt;i&gt;Personalmente, creo que este proceso es mejorable, además de tener que aceptar un monton de mensajes, no sabemos si algo está mal en el informe, hasta que guardamos al final desde NAV… en fin, esto es otra historia. &lt;/i&gt;Si hemos dejado nuestro diseño ok, nos quedará algo así:&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-i4Fy2l_NcUk/TgGfli4-_xI/AAAAAAAAAL0/CFVkYzqwN6M/s1600/05.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="322" src="http://2.bp.blogspot.com/-i4Fy2l_NcUk/TgGfli4-_xI/AAAAAAAAAL0/CFVkYzqwN6M/s400/05.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: black; font-family: Arial, sans-serif;"&gt;Con esto tenemos el núcleo del informe, falta poner algunas cosas más, pero lo iremos viendo en siguientes post.&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, sans-serif;"&gt;Nos "leemos".&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="color: black; font-family: Arial, sans-serif;"&gt;Un saludo.&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-7249485080336814003?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/7249485080336814003/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/06/reportando-con-dynamics-nav-2-los.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/7249485080336814003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/7249485080336814003'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/06/reportando-con-dynamics-nav-2-los.html' title='&quot;Reportando&quot; con Dynamics NAV 2: Los inicios.'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-hYhnj2yJDvo/TgGc9u6jEKI/AAAAAAAAALY/0T093zw83hk/s72-c/01.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-6900309225919043762</id><published>2011-06-06T04:42:00.000-07:00</published><updated>2011-06-06T04:42:11.974-07:00</updated><title type='text'>"Reportando" con Dynamics NAV</title><content type='html'>Hola,&lt;br /&gt;&lt;br /&gt;Tras un tiempo sin escribir, (hay mucho trabajo por hacer!) voy a comenzar con un nuevo &amp;nbsp;hito en la programación de NAV, bastante interesante, y, a medio-corto plazo, muy necesario.&lt;br /&gt;&lt;br /&gt;Este nuevo hito se trata de la programación de informes en RDLC para el cliente de roles.&amp;nbsp;Antes de empezar a meternos en harina, voy a explicar un poco las herramientas que hay&amp;nbsp;actualmente para el diseño de informes, y en qué consisten los informes en Dynamics NAV.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-axJaelVaJ6o/Tey8TZtZxvI/AAAAAAAAALU/Y0ShQlv0uOU/s1600/Reportsblog.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="286" src="http://4.bp.blogspot.com/-axJaelVaJ6o/Tey8TZtZxvI/AAAAAAAAALU/Y0ShQlv0uOU/s320/Reportsblog.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Un informe es un tipo de objeto en NAV que puede suplir dos funciones muy importantes.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;1) &lt;/i&gt;&lt;/b&gt;Por un lado, el informe en NAV, tal y como se entiende generalmente un informe para &amp;nbsp;cualquier tipo de aplicación, presenta unos datos a un usuario de una determinada forma&amp;nbsp;para que sean lanzados contra un soporte físico, bien sea impresora, bien sea mediante&amp;nbsp;la vista preliminar en pantalla, o como un fichero en disco.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;2) &lt;/i&gt;&lt;/b&gt;Por otro lado, en NAV también se utilizan para poder procesar conjuntos de datos mediante&amp;nbsp;un proceso, actualizando registros de varias tablas simultáneamente etc. La facilidad que&amp;nbsp;otorga NAV utilizando su implementación estándar para recorrer registros y actualizarlos de&amp;nbsp;una o varias tablas&amp;nbsp;simultáneamente, otorga a los informes una utilidad extra muy importante.&lt;br /&gt;&lt;br /&gt;Llegados a este punto, hay dos tipos de herramientas para diseñar informes actualmente&lt;br /&gt;(&lt;i&gt;En versión NAV R2&lt;/i&gt;):&lt;br /&gt;&lt;br /&gt;Tenemos los infomes clásicos, integrados en el cliente idem, que se efectuan con el Diseñador &amp;nbsp;de informes de NAV. Estos informes son de apariencia más sencilla, y la interfaz para &amp;nbsp;realizarlos esta integrada dentro del cliente clásico. Esta interfaz tiene bastantes &amp;nbsp;limitaciones y los informes que se pueden obtener son más limitados.&lt;br /&gt;&lt;br /&gt;Por otro lado, desde la version 2009, tenemos a nuestra disposición otra capa para los &amp;nbsp;informes.Esta capa del informe esta definida en un XML estructurado, denominada RDLC (Report &amp;nbsp;Definition Language Client-side).&lt;br /&gt;Esta capa se guarda de forma conjunta al objeto normal&amp;nbsp;(el informe de cliente clásico) en Dynamics NAV. Esta capa utiliza la funcionalidad de los&amp;nbsp;SQL Server Reporting Services, creando un hibrido con la capa anterior, y otorgando nueva&amp;nbsp;funcionalidad, diseño, y capacidades como la navegación desde los mismos informes.&lt;br /&gt;&lt;br /&gt;Por tanto para poder comenzar, hay que tener instalado el diseñador de VS correspondiente.&amp;nbsp;No todas las versiones son compatibles, os añado un link a este respecto de la msdn:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd568716.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd568716.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hasta aqui, esta "pequeña introducción" que espero que no se os haya echo demasiado larga.&amp;nbsp;En el siguiente post, comenzaremos a desarrollar un informe de esta nueva capa.&lt;br /&gt;&lt;br /&gt;Un saludo.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Ojo: Respecto al tema de los datos nuevos que van añadidos al informe con esta capa, hay&amp;nbsp;&lt;/i&gt;&lt;i&gt;algo realmente interesante. Si creamos un informe en version 2009 o superior, con datos&amp;nbsp;&lt;/i&gt;&lt;i&gt;de la nueva capa, el informe se puede importar tranquilamente en una version inferior..&amp;nbsp;&lt;/i&gt;&lt;i&gt;pero..si intentas acceder al diseño siempre dara un error grave, cerrando la aplicación.&amp;nbsp;&lt;/i&gt;&lt;b&gt;&lt;i&gt;Hay que exportar en texto y borrrar la seccion RDLDATA, que es la que contiene la parte &amp;nbsp;&lt;/i&gt;&lt;i&gt;de la nueva capa antes de importar en la version antigua de NAV.&lt;/i&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-6900309225919043762?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/6900309225919043762/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/06/reportando-con-dynamics-nav.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/6900309225919043762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/6900309225919043762'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/06/reportando-con-dynamics-nav.html' title='&quot;Reportando&quot; con Dynamics NAV'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-axJaelVaJ6o/Tey8TZtZxvI/AAAAAAAAALU/Y0ShQlv0uOU/s72-c/Reportsblog.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-4347040108397995519</id><published>2011-04-19T07:14:00.000-07:00</published><updated>2011-04-19T07:14:37.572-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CAL'/><category scheme='http://www.blogger.com/atom/ns#' term='Errores'/><title type='text'>Controlando errores en Dynamics NAV ASSERTERROR : La sentencia desconocida.</title><content type='html'>Hola,&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;Hoy voy a hablar de una &amp;nbsp; función de sistema, denominada &lt;span style="color: #0070c0;"&gt;ASSERTERROR&lt;/span&gt;, de la cual no se podia encontrar documentación en la aplicación con la ayuda de ningún modo, y no aparece con F5 (al menos, no la he visto). &amp;nbsp;Esta función sirve, principalmente, para controlar errores en tiempo de ejecución (Sí, esos errores tan inportunos que en un momento dado, paran la ejecución de un proceso, y hacen un Rollback al estado de la base de datos. Combinada con la sentencia GETLASTERRORTEXT, podemos tener un poco de control al estilo Try-Catch, directamente desde NAV.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Fijaos a continuación en el código que sigue:&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-lV80y0Or9HY/Ta2WYsWuKjI/AAAAAAAAAK8/dIiX7LVtZjI/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="31" src="http://1.bp.blogspot.com/-lV80y0Or9HY/Ta2WYsWuKjI/AAAAAAAAAK8/dIiX7LVtZjI/s320/1.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;Tal y como viene pasando hasta ahora, si a esta función le pasamos un fantástico 0, muestra un error como el que sigue, solo con lanzarlo:&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: center;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;img border="0" height="112" src="http://4.bp.blogspot.com/-zBGiPOBqwY8/Ta2WpL8eLkI/AAAAAAAAALE/Bs6n4zXQPgM/s200/3.JPG" width="200" /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;img border="0" src="http://4.bp.blogspot.com/-XmahewB7JM8/Ta2WmlxtubI/AAAAAAAAALA/rXPua8WyXaU/s1600/2.JPG" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Calibri, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Calibri, sans-serif;"&gt;Bueno, pues si usamos esta función, &lt;span style="color: #0070c0;"&gt;ASSERTERROR&lt;/span&gt;, que queda algo tal y como esto:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Calibri, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-FaAlyLPp9Zk/Ta2W7M5pZ9I/AAAAAAAAALI/-1JwdkMbK1w/s1600/4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-FaAlyLPp9Zk/Ta2W7M5pZ9I/AAAAAAAAALI/-1JwdkMbK1w/s1600/4.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Calibri, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Calibri, sans-serif;"&gt;El sistema no da ningún error, y todo le parece correcto.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Calibri, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Calibri, sans-serif;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Entonces vayamos más allá, y usemos la otra función bastante útil, denominada &lt;span style="color: #0070c0;"&gt;GETLASTERRORTEXT,&lt;/span&gt;&amp;nbsp;que recoge el texto del último error, y ricemos el rizo:&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-VvMwkwgdKR0/Ta2XYyCmoBI/AAAAAAAAALM/T4p7AiYDNrM/s1600/5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="92" src="http://2.bp.blogspot.com/-VvMwkwgdKR0/Ta2XYyCmoBI/AAAAAAAAALM/T4p7AiYDNrM/s400/5.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Con esto, conseguimos que el mensaje de error de tiempo de ejecución, sea un mensaje mucho menos agresivo, y que no detenga la ejecución del proceso en el que nos encontramos, el resultado quedaría así:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-mxvVb2EuFfc/Ta2YJXwgy8I/AAAAAAAAALQ/xgVc8iwhoPk/s1600/6.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-mxvVb2EuFfc/Ta2YJXwgy8I/AAAAAAAAALQ/xgVc8iwhoPk/s1600/6.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Con esto, podemos controlar mejor los errores de NAV, directamente desde el propio código CAL.&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-size: 11pt;"&gt;&lt;o:p&gt;&amp;nbsp;Nos leemos,&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-size: 11pt;"&gt;&lt;o:p&gt;Un saludo.&lt;/o:p&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-4347040108397995519?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/4347040108397995519/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/04/controlando-errores-en-dynamics-nav.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/4347040108397995519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/4347040108397995519'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/04/controlando-errores-en-dynamics-nav.html' title='Controlando errores en Dynamics NAV ASSERTERROR : La sentencia desconocida.'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-lV80y0Or9HY/Ta2WYsWuKjI/AAAAAAAAAK8/dIiX7LVtZjI/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-8163933303129551780</id><published>2011-03-28T08:57:00.000-07:00</published><updated>2011-03-28T08:57:15.872-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Servicios web'/><category scheme='http://www.blogger.com/atom/ns#' term='VB Script'/><category scheme='http://www.blogger.com/atom/ns#' term='Qlikview'/><title type='text'>Conectar WS de dynamics NAV desde vb script.</title><content type='html'>Hola,&lt;br /&gt;&lt;br /&gt;Han sido unos dias de mucho jaleo, sin tiempo para indicar nada nuevo ni reseñable en el blog..pero siguiendo con el tema de posibles integraciones de servicios web, se me ha planteado otra nueva posibilidad de integracion mediante servicios web con NAV, y quisiera contarosla.&lt;br /&gt;&lt;br /&gt;Actualmente estoy trabajando con una herramienta de BI denominada QlikView. Esta herramienta sirve para conseguir analizar información en grandes dosis, proveniente de varios origenes de datos dispares, tanto por odbc como por ficheros excel, planos...y si, ficheros XML.&lt;br /&gt;&lt;br /&gt;Además, puede utilizarse VB script desde dentro de esta herramienta para poder realizar módulos que utilizar en la aplicación.&lt;br /&gt;&lt;br /&gt;Planteemos el siguiente caso. El cliente necesita leer de Dynamics NAV,pero este no se encuentra accesible mediante ODBC y queremos acceder a los datos de la aplicación mediante servicios Web.&lt;br /&gt;&lt;br /&gt;Mediante el VB Script, de forma similar a como lo haciamos con Javascript, generando una peticion SOAP con un objeto XMLHttp, y recogiendo el resultado generado dentro de un XML, este fichero ya es legible por Qlikview. La única pega, es que el logueo del servicio web, tiene que hacerse con el usuario implicito que esta logueado en el documento de Qlikview, ya que no se pueden generar credenciales. Como este usuario es de Windows, puede tener acceso a NAV también, y listo.&lt;br /&gt;&lt;br /&gt;El codigo necesario para poder leer de un servicio que lista el Nº, Nombre, Direccion y Saldo (dl) de los proveedores de la base de datos:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-3HDySkTML94/TZCupG_-x1I/AAAAAAAAAK4/6JkFQRrvqWc/s1600/Codigo.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://2.bp.blogspot.com/-3HDySkTML94/TZCupG_-x1I/AAAAAAAAAK4/6JkFQRrvqWc/s640/Codigo.JPG" width="531" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Para todos los que lo lean, la primera parte hasta la gestión del fichero XML es Vb script estándar, la continuación es la que tiene que ver con Qlikview.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;NOTA: Hay que tener en cuenta, tal y como indico en el codigo, que desde la version 2009 Sp1, la creación de la petición Soap se ha vuelto mas delicada, y hay que indicar los espacios de forma similar a que funcione correctamente. En los ejemplos indicados anteriormente en el blog sucede lo mismo, siempre y cuando se utilice NAV 2009 SP1. Cosas del cambio de versión.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Al final, la conclusion es que teniendo los conceptos claros, NAV se puede integrar gracias a los servicios web con una gran variedad de softwares diferentes.&lt;br /&gt;&lt;br /&gt;Saludos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-8163933303129551780?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/8163933303129551780/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/03/conectar-ws-de-dynamics-nav-desde-vb.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/8163933303129551780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/8163933303129551780'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/03/conectar-ws-de-dynamics-nav-desde-vb.html' title='Conectar WS de dynamics NAV desde vb script.'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-3HDySkTML94/TZCupG_-x1I/AAAAAAAAAK4/6JkFQRrvqWc/s72-c/Codigo.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-114837640542846768</id><published>2011-02-16T08:52:00.000-08:00</published><updated>2011-02-16T08:52:49.415-08:00</updated><title type='text'>Llamando a servicios web de NAV desde NAV. Usando SAVEASPDF</title><content type='html'>&lt;div class="MsoNormal"&gt;Hola,&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Debido a diversos post que he ido revisando en &lt;a href="http://www.tipsdbits.com/"&gt;tipsdbits&lt;/a&gt;, he comprobado que hay un desarrollo predominante en estas ultimas fechas, que es generar un PDF desde una factura de NAV o cualquier tipo de documento.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;La forma mas habitual de realizar el desarrollo, es mediante el uso de automatismos de cualquiera de los software de las impresoras PDF que existen, bien sea bullzip, PDFCreator, etc...&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Desde NAV 2009, los mismos informes de Nav, vienen "de serie" con una opcion para salvarlos como PDF (SAVEASPDF), la lástima es que esta funcion solo sirve cuando se llama desde el cliente de roles o desde un servicio web, no desde el cliente clásico.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Todo este planteamiento sirve de excusa, para poder rizar el rizo e ir mas allá. Podemos llamar a un servicio web de NAV desde él mismo, y que así se pueda ejecutar esta función y que no sea necesario el uso de automatismos.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;La arquitectura del tema es bastante sencilla, publicamos un modulo como servicio web con un método para guardar en PDF lo que necesitemos, y en el mismo OnRun de la codeunit, llamamos al servicio publicado, para que se ejecute nuestro código a través de la capa de servicio, y consigamos lanzar el SAVEASPDF correctamente.&amp;nbsp;Vamos a ponernos manos a la obra.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Lo primero es&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;generar un módulo con el método que necesitamos para guardar como PDF, y publicarlo en web:&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-CX2f3rh7iHg/TVv_CBeYcTI/AAAAAAAAAJM/Y4mLsp2ar28/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="209" src="http://2.bp.blogspot.com/-CX2f3rh7iHg/TVv_CBeYcTI/AAAAAAAAAJM/Y4mLsp2ar28/s640/1.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Este método es bastante sencillo, así que le complicado un poco. Para que quede todo correctamente organizado, genero una ruta de carpetas, utilizando el automatismo 'Microsoft Scripting Runtime'.FileSystemObject, para crear las carpetas.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Creo una estructura en árbol &lt;i&gt;E:\Facturas_Clientes\NoCliente\FacturaNo.pdf&lt;/i&gt;&amp;nbsp;Además, uso la funcionalidad ADDLINK, para indicar un vinculo con la ruta del documento generado, y poder abrirlo desde NAV y que quede relacionado con la factura.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Hasta aquí, se trata de un método normal de NAV. Ahora, vayamos con el tema de llamar al servicio web.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-o9woHz-0HX8/TVv_ZZGkrbI/AAAAAAAAAJQ/q9WO4YkTvSo/s1600/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="211" src="http://4.bp.blogspot.com/-o9woHz-0HX8/TVv_ZZGkrbI/AAAAAAAAAJQ/q9WO4YkTvSo/s400/2.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Lo segundo, en nuestro modulo, en el Run, indicamos el código necesario para poder guardar llamar al servicio web de NAV con automatismos de XML, y controlamos si surge algun error durante la ejecución,generando un xml. &lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;Las variables que he utilizado son:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse; margin-left: 2.75pt; width: 480px;"&gt;&lt;tbody&gt;&lt;tr style="height: 15.0pt; mso-yfti-firstrow: yes; mso-yfti-irow: 0;"&gt;   &lt;td nowrap="" style="background: yellow; border-right: none; border: solid windowtext 1.0pt; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 85.0pt;" valign="bottom" width="113"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Name&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="background: yellow; border-bottom: solid windowtext 1.0pt; border-left: none; border-right: none; border-top: solid windowtext 1.0pt; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 61.0pt;" valign="bottom" width="81"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;DataType&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="background: yellow; border-bottom: solid windowtext 1.0pt; border-left: none; border-right: none; border-top: solid windowtext 1.0pt; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 177.0pt;" valign="bottom" width="236"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Subtype&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="background: yellow; border-left: none; border: solid windowtext 1.0pt; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 37.0pt;" valign="bottom" width="49"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Length&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 15.0pt; mso-yfti-irow: 1;"&gt;   &lt;td nowrap="" style="border-top: none; border: solid windowtext 1.0pt; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 85.0pt;" valign="bottom" width="113"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;xmlHttp&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 61.0pt;" valign="bottom" width="81"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Automation&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 177.0pt;" valign="bottom" width="236"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span lang="EN-US" style="color: black; mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;'Microsoft XML, v6.0'.XMLHTTP&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 37.0pt;" valign="bottom" width="49"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 15.0pt; mso-yfti-irow: 2;"&gt;   &lt;td nowrap="" style="border-top: none; border: solid windowtext 1.0pt; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 85.0pt;" valign="bottom" width="113"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;NAVServerName&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 61.0pt;" valign="bottom" width="81"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Text&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 177.0pt;" valign="bottom" width="236"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 37.0pt;" valign="bottom" width="49"&gt;   &lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; text-align: right;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;250&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 15.0pt; mso-yfti-irow: 3;"&gt;   &lt;td nowrap="" style="border-top: none; border: solid windowtext 1.0pt; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 85.0pt;" valign="bottom" width="113"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Company&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 61.0pt;" valign="bottom" width="81"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Record&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 177.0pt;" valign="bottom" width="236"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Company Information&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 37.0pt;" valign="bottom" width="49"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 15.0pt; mso-yfti-irow: 4;"&gt;   &lt;td nowrap="" style="border-top: none; border: solid windowtext 1.0pt; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 85.0pt;" valign="bottom" width="113"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;XmlDoc&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 61.0pt;" valign="bottom" width="81"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Automation&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 177.0pt;" valign="bottom" width="236"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;'Microsoft XML, v6.0'.DOMDocument&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 37.0pt;" valign="bottom" width="49"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr style="height: 15.0pt; mso-yfti-irow: 5; mso-yfti-lastrow: yes;"&gt;   &lt;td nowrap="" style="border-top: none; border: solid windowtext 1.0pt; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 85.0pt;" valign="bottom" width="113"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;XmlNode&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 61.0pt;" valign="bottom" width="81"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;Automation&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 177.0pt;" valign="bottom" width="236"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;span style="color: black; mso-ascii-font-family: Calibri; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: ES; mso-hansi-font-family: Calibri;"&gt;'Microsoft XML, v6.0'.IXMLDOMNode&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 15.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 3.5pt 0cm 3.5pt; width: 37.0pt;" valign="bottom" width="49"&gt;   &lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Y el código, aquí está:&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-b303wN6cIvM/TVv_p47KYEI/AAAAAAAAAJU/miV9rCfmTKs/s1600/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/-b303wN6cIvM/TVv_p47KYEI/AAAAAAAAAJU/miV9rCfmTKs/s640/3.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Tal y como he comentado en anteriores post de javascript, la clave es mandar una petición SOAP al servicio web de NAV, después, recojo la respuesta, y la evaluo, para ver si hay problemas o ha devuelto lo que necesito, que es el XML. Con la ruta donde se ha guardado.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Para que quede todo en una única codeunit, veréis que he indicado como Rec, la tabla de hístorico de cabecera de factura de venta. Así, se indica un botón en el histórico directamente, y listo.&lt;/div&gt;&lt;div class="MsoNormal"&gt;El resultado queda como sigue:&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-ujoMLqD8O0Y/TVwAZ5aSfiI/AAAAAAAAAJc/eyhy6WG5Pok/s1600/5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/-ujoMLqD8O0Y/TVwAZ5aSfiI/AAAAAAAAAJc/eyhy6WG5Pok/s400/5.JPG" width="310" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Y con esto, aprovechamos la funcionalidad SAVEASPDF del cliente clásico, y además comprobamos que se pueden utilizar los servicios web desde NAV contra él mísmo.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Nos leemos.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Saludos.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-114837640542846768?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/114837640542846768/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/02/llamando-servicios-web-de-nav-desde-nav.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/114837640542846768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/114837640542846768'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/02/llamando-servicios-web-de-nav-desde-nav.html' title='Llamando a servicios web de NAV desde NAV. Usando SAVEASPDF'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-CX2f3rh7iHg/TVv_CBeYcTI/AAAAAAAAAJM/Y4mLsp2ar28/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-1114722487956028079</id><published>2011-02-08T14:33:00.000-08:00</published><updated>2011-02-08T14:33:32.103-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='registros'/><category scheme='http://www.blogger.com/atom/ns#' term='Tablas'/><title type='text'>Manejo de registros desde CAL.</title><content type='html'>Hola,&lt;br /&gt;&lt;br /&gt;Estan siendo unas semanas agotadoras, y apenas hay tiempo para escribir, y menos para plantear alguna cosa completa para poder postearla. Por tanto, este articulo voy a dedicarlo a cosas mas mundanas, como es el manejo de registros desde CAL. Voy a indicar un pequeño listado de las funciones mas comunes, y tratar de reflejar que hace cada una de ellas, y en mi modesta opinion, su utilidad diaria, y posibles pegas de rendimiento que pueden dar. Veamos:&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;u&gt;Función GET &amp;nbsp;para localizar un registro concreto&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;Que hace?&lt;/i&gt;&lt;/b&gt; Recupera el registro de una tabla por la clave primaria, devolviendo verdadero o falso si encuentra el registro.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;Ejemplo:&lt;/i&gt;&lt;/b&gt; Cust.GET(NoCliente), devuelve verdadero o falso.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;Opinión:&lt;/i&gt;&lt;/b&gt; &amp;nbsp;Rápida y fácil de leer, no necesita más código. Útil si buscamos por campo clave.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;br /&gt;&lt;u&gt;Funciones para filtrar un conjunto de registros RESET,SETCURRENTKEY,SETFILTER,SETRANGE&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;Que hacen?&lt;/i&gt;&lt;/b&gt;&lt;u&gt; &lt;/u&gt;Sirven para recuperar un registro o conjunto de registros que cumplen una serie de valores comunes en sus campos.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;RESET -&amp;gt;&lt;/i&gt; Elimina los filtros establecidos en el registro previamente. Esto garantiza que cuando se efectúan unos filtros en un registro mediante código, no filtramos sobre registros que ya tengan un filtro anteriormente.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Ejemplo:&lt;/b&gt; Cust.RESET;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Opinión:&lt;/b&gt; Es un “clásico” del manejo de filtros con registros mediante código. Muy importante usarlo, y evita dolores de cabeza…&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;SETCURRENTKEY&lt;/i&gt; -&amp;gt; Establece la clave primaria que está utilizando un registro mediante código.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Ejemplo:&lt;/b&gt; Cust.SETCURRENTKEY(“No.”)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Opinión:&lt;/b&gt; Aunque pueda parecer poco útil, en procesos en los que efectuéis filtros por varios campos simultaneos antes de recorrer los registros, si son habituales y podeis, haced una clave secundaria y utilizar esta sentencia antes de aplicar los filtros, el rendimiento puede mejorar considerablemente.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;SETFILTER&lt;/i&gt; -&amp;gt; Se utiliza para poder establecer un filtro complejo en un campo.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Ejemplo:&lt;/b&gt; Cust.SETFILTER(“No.”,’P*’);&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Opinión:&lt;/b&gt; La más utilizada de todas las sentencias de filtros. Siempre debe ir acompañada de sentencias de recorrer registros (A continuación en este mismo post).&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;SETRANGE&lt;/i&gt;-&amp;gt; Se utiliza para poder establecer filtros simples, valores desde hasta.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Ejemplo:&lt;/b&gt; Cust.SETRANGE(“No.”,’P00001’,’ P00050’);&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Opinión:&lt;/b&gt; La “otra” que se puede utilizar. Siempre se puede sustituir por un setfilter , pero para trabajar con fechas, valores numéricos, o booleanos, es mas comoda e intuitiva. Al igual que su “hermana” SETFILTER, debe utilizarse de forma conjunta con sentencias para recorrer registros.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Truquillo común ;) &amp;nbsp;Cuando tengas dudas de lo que has filtrado, un ERROR(GETFILTERS) te evitará problemas.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;u&gt;&lt;span lang="EN-US"&gt;Funciones para recorrer registros FIND,FINDFIRST,FINDLAST,FINDSET,NEXT&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;FIND Función unificada para recorrer registros, el todo en uno. Tiene un parámetro Wich, con el que se le indica a la función como debe actuar:&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 18.0pt;"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;FIND(‘-’) Posiciona el conjunto de registros en el primero.&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 18.0pt;"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;FIND(‘+’) Posiciona el conjunto de registros en el último.&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 18.0pt;"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;FIND(‘=’) / &amp;nbsp;FIND(‘&amp;lt;’)/ FIND(‘&amp;gt;’)…..sin palabras, para que voy a mentir.&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Ejemplo&lt;/b&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;: Cust.FIND(‘-’);&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Opinion:&lt;/b&gt; Cuando empezé a programar en NAV, era muy amigo de utilizar esta sentencia para no tener que aprender las demás. El paso del tiempo me ha indicado que NUNCA debe utilizarse, (a pesar de que el código NAV la tenga) ya que causa una bajada de rendimiento en SQL bastante apreciable. Recomiendo dejar de usarlo cuanto antes…la indico para que se conozca, nada más.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;FINDFIRST Se utiliza para posicionarse en el primer registro de un conjunto de registros. Devuelve Falso si no hay donde posicionarse.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Ejemplo:&lt;/b&gt; Cust.FINDFIRST;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Opinion:&lt;/b&gt; La función mas correcta. No usarla al moverse en registros, solo para posicionarse de forma inicial.&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;FINDLAST Se utiliza para posicionarse en el ultimo registro de un conjunto de registros. Devuelve Falso si no hay donde posicionarse.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Ejemplo:&lt;/b&gt; Cust.FINDLAST;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Opinion:&lt;/b&gt; La función mas correcta. No usarla al moverse en registros, solo para posicionarse de forma inicial.&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;FINDSET Se utiliza para obtener un conjunto de registros de forma ordenada.&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Ejemplo:&lt;/b&gt;&lt;i style="mso-bidi-font-style: normal;"&gt; Cust.FINDSET;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Opinion:&lt;/b&gt;&lt;i style="mso-bidi-font-style: normal;"&gt; &lt;/i&gt;No la uso demasiado personalmente, pero puede ser útil en determinados casos. Relacionada directamente con el caché que tenemos establecido en NAV para la obtención de registros en memoria desde el SQL.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;NEXT: &lt;/i&gt;Se utiliza para recorrer registros. Devuelve 0 si no hay mas registros, se puede indicar un numero negativo o positivo.&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US"&gt;Ejemplo:&lt;/span&gt;&lt;/b&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span lang="EN-US"&gt; &lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US"&gt;REPEAT UNTIL Cust.NEXT(1)=0&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Opinion:&lt;/b&gt;&lt;i style="mso-bidi-font-style: normal;"&gt; &lt;/i&gt;“Clásico” en el recorrido de registros. Fundamental.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;u&gt;Funciones para contar registros ISEMPTY, COUNT, COUNTAPROXX&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;ISEMPTY Devuelve verdadero o falto si &amp;nbsp;no hay registros disponibles.&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Ejemplo: &lt;/b&gt;Cust.ISEMPTY;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Opinion: &lt;/b&gt;Muy útil, evita bloqueos porque trabajamos directamente con el valor verdadero o falso, es mejor y mas que utilizar un FINDFIRST o FINDLAST.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;COUNT Devuelve el numero de registros que tiene una variable record. Si hay filtros devuelve los registros filtrados.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Ejemplo:&lt;/b&gt; Cust.COUNT;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Opinion:&lt;/b&gt; Muy útil y preciso, pero el de peor rendimiento , evitar en la medida de lo posible..&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;COUNTAPPROX Devuelve el numero de registros aproximado.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;b&gt;Ejemplo:&lt;/b&gt; Cust.COUNTAPPROX.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;Opinion:&lt;/b&gt; Si es posible, utilizalo.&lt;br /&gt;&lt;br /&gt;Todas estas funciones son de uso cotidiano, espero que este articulo sirva para ver alguna nueva información sobre estas funciones. A continuación hablaré un poco mas detalladamente acerca de las transaccionalidades en Nav, pero eso será en otro post..&lt;br /&gt;&lt;br /&gt;Nos leemos.&lt;br /&gt;Un saludo.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-1114722487956028079?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/1114722487956028079/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/02/manejo-de-registros-desde-cal.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/1114722487956028079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/1114722487956028079'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/02/manejo-de-registros-desde-cal.html' title='Manejo de registros desde CAL.'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-7408340471118434418</id><published>2011-01-24T09:06:00.000-08:00</published><updated>2011-01-24T09:06:00.751-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VS2008'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Uso de codeunit/páginas con un cliente de C# en VS2008 (V)</title><content type='html'>Hola,&lt;br /&gt;&lt;br /&gt;Hoy voy a mejorar el ejemplo de anteriores post con el uso de un servicio web del tipo módulo. Son mas "programables" que los anteriores, pero en estos tenemos toda la responsabilidad del buen funcionamiento de los mismos (Control de errores, rendimiento,etc...). &lt;br /&gt;Para poder utilizar un servicio de tipo módulo o codeunit, el principio es el mismo, se añade la referencia web a nuestro proyecto C#, y se crea una instancia del servicio, utilizando unas credenciales válidas y con acceso al ERP.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_8UCYZuCwb28/TT2vfRalrjI/AAAAAAAAAIs/t2nMxSBtLQ0/s1600/0.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="171" s5="true" src="http://2.bp.blogspot.com/_8UCYZuCwb28/TT2vfRalrjI/AAAAAAAAAIs/t2nMxSBtLQ0/s200/0.JPG" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;En el caso de nuestro ejemplo, vamos a utilizar la codeunit con dos funciones bien diferenciadas:&lt;br /&gt;Una, de forma similar a una página, para leer datos referentes al cliente. En este caso, programamos a continuacion del evento de click en celda, y, con el No de cliente llamamos a nuestro servicio.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_8UCYZuCwb28/TT2vrGefHfI/AAAAAAAAAIw/oUyPXuPz1w8/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="203" src="http://3.bp.blogspot.com/_8UCYZuCwb28/TT2vrGefHfI/AAAAAAAAAIw/oUyPXuPz1w8/s640/1.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Dos, haciendo click en el boton bloquear, cambiaremos el estado del cliente a bloqueado, para no &lt;br /&gt;poder efectuar mas operaciones con el cliente seleccionado. El codigo se encuentra en el click&lt;br /&gt;del botón.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_8UCYZuCwb28/TT2v-JS7D3I/AAAAAAAAAI4/-3iVY2FBm6M/s1600/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="323" src="http://3.bp.blogspot.com/_8UCYZuCwb28/TT2v-JS7D3I/AAAAAAAAAI4/-3iVY2FBm6M/s640/2.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Para saber que cliente bloquear, me aprovecho del tag de la ventana para guardar el número de cliente seleccionado en todo momento, y con ese mismo llamo al metodo de mi servicio para bloquear.&lt;br /&gt;&lt;br /&gt;Con todo esto tenemos ya un cliente perfectamente funcional (un poquito simple, pero&amp;nbsp;ando justo de tiempo&amp;nbsp;;) ) con el que podemos ver el listado de nuestros clientes en BD, y bloquear&lt;br /&gt;aquellos que deseemos.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_8UCYZuCwb28/TT2w12076MI/AAAAAAAAAJA/WYOfsDDPa4E/s1600/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="269" src="http://2.bp.blogspot.com/_8UCYZuCwb28/TT2w12076MI/AAAAAAAAAJA/WYOfsDDPa4E/s320/3.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Nos "vemos",&lt;br /&gt;Saludos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-7408340471118434418?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/7408340471118434418/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/01/uso-de-codeunitpaginas-con-un-cliente.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/7408340471118434418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/7408340471118434418'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/01/uso-de-codeunitpaginas-con-un-cliente.html' title='Uso de codeunit/páginas con un cliente de C# en VS2008 (V)'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_8UCYZuCwb28/TT2vfRalrjI/AAAAAAAAAIs/t2nMxSBtLQ0/s72-c/0.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-6519122677951564517</id><published>2011-01-09T05:50:00.000-08:00</published><updated>2011-01-09T06:01:40.785-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Servicios web'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2008'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Uso de codeunit / paginas con un cliente de C# en VS2008 (IV)</title><content type='html'>Hola,&lt;br /&gt;&lt;br /&gt;Voy a proseguir con el desarrollo de la mini-aplicación&amp;nbsp;en C# con VS2008. En el post anterior indiqué una manera muy rápida de conseguir un listado con un servicio web del tipo página y un datagrid. Ahora, vamos a adentrarnos en utilizar la pagina para obtener un estado concreto de un cliente (bloqueado), en el momento en el que lo seleccionamos en el listado. Esto lo voy a hacer así, para que podais ver un ejemplo de como se utiliza una clase proxy de la pagina, y para poder tener el estado 100% online con respecto a NAV. Quiero tener este resultado:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_8UCYZuCwb28/TSm2LdXMRZI/AAAAAAAAAG8/wGtMV5dE03Q/s1600/9.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="268" n4="true" src="http://1.bp.blogspot.com/_8UCYZuCwb28/TSm2LdXMRZI/AAAAAAAAAG8/wGtMV5dE03Q/s320/9.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Lo primero de todo, para utilizar&amp;nbsp;el servicio web de&amp;nbsp;página y el de módulo, utilizamos como identificador el No. de cliente, este lo voy a obtener directamente del datagrid cuando se selecciona una celda, y lo almaceno en una cadena de texto, por ejemplo. Quedaría mas o menos así:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;&lt;span style="color: blue;"&gt;private void&lt;/span&gt; dataGridView1_CellClick(&lt;span style="color: blue;"&gt;object &lt;/span&gt;sender, &lt;span style="background-color: white; color: #3d85c6;"&gt;DataGridViewCellEventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;{&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/em&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;&lt;span style="color: blue;"&gt;&lt;span style="background-color: white;"&gt;String&lt;/span&gt; &lt;/span&gt;NoCliente = dataGridView1[0, e.RowIndex].Value.ToString();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;En el post anterior, no comenté nada acerca del control de excepciones del serv&lt;/em&gt;&lt;em&gt;icio de NAV. Pues bien,voy a contar algo ahora, antes de que se me vuelva a traspapelar. E&lt;/em&gt;&lt;em&gt;n mi opinion, lo mejor es introducir todas las llamadas a servicios de NAV, dentro de un try catch para &lt;/em&gt;&lt;em&gt;recoger el error, suelen ser bastante descriptivos, y puede haber de muchos tipos, como por ejemplo:&lt;/em&gt;&lt;em&gt;Error servicio no encontrado (el servicio ha caido), usuario no autorizado 404 (el usuario de windows que &lt;/em&gt;&lt;em&gt;estamos utilizando no tiene permisos en NAV suficientes, o no existe)...y los tipicos errores que nos &lt;/em&gt;&lt;em&gt;puede dar NAV, que se lanzan como excepcion automaticamente 'el cliente ##### no existe'. ..entre otros.La&lt;/em&gt;&lt;br /&gt;&lt;em&gt;correcta gestion de errores nos puede facilitar mucho la vida como programadores, y como usuarios de nuestras aplicaciones.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Una vez recogido el NoCliente, hago varias operaciones:&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;Por un lado, indico el nombre del cliente seleccionado en cada momento con el caption superior de la ventana (Como en el tipico listado NAV).&lt;br /&gt;&lt;br /&gt;- Guardo en la propiedad tag del formulario el NoCliente, para tener acceso en todas las partes del formulario. Como es un único dato el que quiero almacenar comun a todo el formulario, puedo aprovechar el tag, es una solución rápida.&lt;br /&gt;&lt;br /&gt;- Formateo el estado del cliente. Hasta la fecha actual, he encontrado algunos "peros" al uso de páginas, y uno de ellos es que en ocasiones hace un formateo de los datos un poco inesperado. Este caso que nos ocupa es uno de ellos, el estado de cliente bloqueado vacio, lo devuelve como un texto _blank_. Entonces tenemos que tener en cuenta esto por codigo. Para el cliente C#, solamente existen dos estados, bloqueado y no bloqueado.&lt;br /&gt;&lt;br /&gt;En conclusión, el código queda más o menos así (dentro del mismo evento anterior datagrid1View1_CellClick, claro, y con su try-catch correspondiente):&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_8UCYZuCwb28/TSm3qG5EnHI/AAAAAAAAAHA/D08Zi8vTs8k/s1600/10.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="235" n4="true" src="http://4.bp.blogspot.com/_8UCYZuCwb28/TSm3qG5EnHI/AAAAAAAAAHA/D08Zi8vTs8k/s400/10.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Analizemos un poco más en detalle como esta efectuado el código. Lo primero que hay que hacer es crear un objeto del tipo servicio web de pagina, e inyectarle las credenciales, tal y como hemos hecho en el post anterior, es el que nos permite efectuar metodos que lean/actualizen los datos de origen del servicio. &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;A continuación, se define un objeto de la clase proxy de la pagina (ComunicaClientes). Este objeto lo cargamos con el cliente que necesitamos, mediante el método read del objeto de servicio web de pagina.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;En conclusión, obtenemos un objeto del tipo cliente, con los datos de un cliente en particular. Si no encuentra cliente,devolverá una excepción.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;El método read sirve para leer un registro unicamente, y se le pasan de parametros los valores de los identificadores del&amp;nbsp;registro a buscar. En NAV su metodo más similar es GET. &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Con esto tenemos por completo el uso del servicio web de la página, ahora hay que comenzar a utilizar el servicio web del&amp;nbsp;tipo Módulo, pero esto entrará dentro de otro post, más adelante.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Nos "leemos".&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Un saludo&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-6519122677951564517?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/6519122677951564517/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/01/uso-de-codeunit-paginas-con-un-cliente_09.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/6519122677951564517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/6519122677951564517'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/01/uso-de-codeunit-paginas-con-un-cliente_09.html' title='Uso de codeunit / paginas con un cliente de C# en VS2008 (IV)'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_8UCYZuCwb28/TSm2LdXMRZI/AAAAAAAAAG8/wGtMV5dE03Q/s72-c/9.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-1462032305761902348</id><published>2011-01-04T10:03:00.000-08:00</published><updated>2011-01-04T10:03:24.252-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Servicios web'/><category scheme='http://www.blogger.com/atom/ns#' term='NAV'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Uso de codeunit / paginas con un cliente de C# en VS2008 (III)</title><content type='html'>Hola,&lt;br /&gt;&lt;br /&gt;Primer post de 2011!! Lo prometido es deuda, y voy a postear una pequeña explicacion de como utilizar un servicio web dentro de una aplicacion en C# del tipo pagina.Dicha aplicacion es una aplicacion de escritorio en C# sobre VS2008.&lt;br /&gt;&lt;br /&gt;Para poder agregar la referencia inicial al servicio web (En VS2008, ojo), hay que ir a las referencias del proyecto, indicar agregar referencia de servicio, y en esta ventana el boton avanzadas, y dentro de la ventana siguiente al boton agregar referencia web. (creo que es un bug del entorno, deberia ser más fácil, desde luego).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_8UCYZuCwb28/TSNerJTsWhI/AAAAAAAAAGY/Ch0ieWk5rfI/s1600/2y3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="331" src="http://2.bp.blogspot.com/_8UCYZuCwb28/TSNerJTsWhI/AAAAAAAAAGY/Ch0ieWk5rfI/s400/2y3.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Si introducimos la URL http://srvnavision:7047/DynamicsNAV/WS/CRONUS%20España%20S.A./Page/ComunicaClientes (Siendo: srvnavision el nombre de nuestro servidor, 7047 el puerto, DynamicsNAV el nombre del servicio y nuestra querida CRONUS la empresa de marras) en el navegador de la ventana que aparece, veremos algo como lo que sigue.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_8UCYZuCwb28/TSNe3lQkAoI/AAAAAAAAAGg/Fbi3ZVp3f1A/s1600/4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="323" src="http://4.bp.blogspot.com/_8UCYZuCwb28/TSNe3lQkAoI/AAAAAAAAAGg/Fbi3ZVp3f1A/s640/4.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;En esta ventana indicamos el nombre de la referencia al servicio web de pagina inicialmente. Yo lo he llamado refwsPaginaClientes, que me resulta descriptivo, pero allá cada cual.Hacemos click en agregar referencia, y listo. Nos tiene que quedar algo como esto en nuestro arbol de proyectos.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_8UCYZuCwb28/TSNfJ1yFHwI/AAAAAAAAAGo/KX333NMHyDU/s1600/5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" n4="true" src="http://4.bp.blogspot.com/_8UCYZuCwb28/TSNfJ1yFHwI/AAAAAAAAAGo/KX333NMHyDU/s640/5.JPG" width="316" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;La primera parte de la ventana, es muy clara, voy a hacer un datagridview, y usando el asistente,&lt;br /&gt;voy a crear un BindingSource para que enlace con el origen de datos de la pagina web del servicio.&lt;br /&gt;Editando un poco la apariencia del datagrid, consigo un listado dinamico bastante aparente con muy &lt;br /&gt;poco codigo.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_8UCYZuCwb28/TSNfna0MjlI/AAAAAAAAAGs/3P1UsEqqiXY/s1600/6.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="269" src="http://3.bp.blogspot.com/_8UCYZuCwb28/TSNfna0MjlI/AAAAAAAAAGs/3P1UsEqqiXY/s320/6.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para rellenar el binding con datos, en el mismo load de la ventana principal, indico que cargue&lt;br /&gt;el binding mediante el metodo readmultiple de la referencia a mi pagina de clientes, asi.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_8UCYZuCwb28/TSNfrbpIXxI/AAAAAAAAAG0/yfBEE1j6TlA/s1600/7.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="119" src="http://3.bp.blogspot.com/_8UCYZuCwb28/TSNfrbpIXxI/AAAAAAAAAG0/yfBEE1j6TlA/s640/7.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Ojo, que para gustos los colores, se puede acceder de mas formas al contenido del servicio (usar un datatable, por ejemplo) pero es la que se me ha ocurrido en esta ocasion. Una vez leidos los datos,se puede trabajar con ellos como se considere necesario.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Los parametros utilizados para el readmultiple son 3, posibles filtros, que indico a &lt;strong&gt;null, &lt;/strong&gt;boomarkey (este siempre lo pongo con comillas vacias, y tamaño de los registros a devolver, que indico a 0.&lt;br /&gt;&lt;br /&gt;Lo mas interesante de este punto, es crear las credenciales para poder acceder al servicio web de NAV, bien podemos usar la propiedad use default credentials, y usara las credenciales del usuario de Windows que tengamos en ese momento ejecutando la aplicacion, o bien, podemos crear unas &lt;br /&gt;credenciales con un objeto del tipo System.Net.NetworkCredential, y asignandoselo a la propiedad credentials del servicio de NAV antes de ejecutarlo. Esto es valido tanto con servicios de paginas como servicios de codeunits.&lt;br /&gt;&lt;br /&gt;Con esto, tenemos la parte del uso del servicio web de la pagina, posteare la parte del servicio web del modulo en unos dias.&lt;br /&gt;&lt;br /&gt;Nos leemos.&lt;br /&gt;Saludos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-1462032305761902348?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/1462032305761902348/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/01/uso-de-codeunit-paginas-con-un-cliente.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/1462032305761902348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/1462032305761902348'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2011/01/uso-de-codeunit-paginas-con-un-cliente.html' title='Uso de codeunit / paginas con un cliente de C# en VS2008 (III)'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_8UCYZuCwb28/TSNerJTsWhI/AAAAAAAAAGY/Ch0ieWk5rfI/s72-c/2y3.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-4672569809833864409</id><published>2010-12-24T03:48:00.000-08:00</published><updated>2010-12-24T03:48:13.742-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NAVidad'/><title type='text'>Feliz Navidad.</title><content type='html'>Hola,&lt;br /&gt;&lt;br /&gt;Al final&amp;nbsp;están&amp;nbsp;siendo unos&amp;nbsp;días&amp;nbsp;pre-navideños convulsos entre trabajo y enfermedad (llevo unos&amp;nbsp;días&amp;nbsp;de gripazo horripilante), y no he podido volver a postear nada&amp;nbsp;todavía. No obstante, no&amp;nbsp;quería&amp;nbsp;pasar sin felicitar la entrada de la Navidad a todos, y que&amp;nbsp;paséis&amp;nbsp;una buena noche y entrada navideña. Ya volveré a escribir en unos&amp;nbsp;días, en cuanto se estabilice todo.&lt;br /&gt;&lt;br /&gt;Un saludo.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_8UCYZuCwb28/TRSHhEgEEmI/AAAAAAAAAGU/ji0r5DsfenU/s1600/Navidad.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://3.bp.blogspot.com/_8UCYZuCwb28/TRSHhEgEEmI/AAAAAAAAAGU/ji0r5DsfenU/s400/Navidad.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-4672569809833864409?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/4672569809833864409/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2010/12/feliz-navidad.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/4672569809833864409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/4672569809833864409'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2010/12/feliz-navidad.html' title='Feliz Navidad.'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_8UCYZuCwb28/TRSHhEgEEmI/AAAAAAAAAGU/ji0r5DsfenU/s72-c/Navidad.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-6677476216348401077</id><published>2010-12-09T07:08:00.000-08:00</published><updated>2010-12-09T07:08:49.383-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Servicios web'/><category scheme='http://www.blogger.com/atom/ns#' term='CAL'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Uso de codeunit / paginas con un cliente de C# en VS2008 (II)</title><content type='html'>Hola,&lt;br /&gt;&lt;br /&gt;Vamos a proseguir con la programación de este caso, en este post voy a hablar de como programar en Nav los servicios web. Cuando se habla de crear un servicio web dentro de Nav, hay que tener muy claro que no se trata de programación especial para que sea publicada, sino programación completamente normal dentro del ERP, tan sólo en la última fase del desarrollo hay que publicar los objetos que queremos que funcionen como servicio web. Para establecer los objetos a publicar, dentro del menú de &lt;b&gt;Administración&amp;nbsp;&lt;/b&gt;-&amp;nbsp;&lt;b&gt;Administración de IT - Configuración General - Servicios web&lt;/b&gt;. Aquí, indicamos el id de los objetos a publicar, y el nombre del servicio web, marcando publicado en el momento que deseemos publicar. Ojo con espacios y demas. El nombre del servicio, no tiene porqué estar relacionado con el nombre del objeto en Nav. Quedaría algo como esto en el ejemplo actual:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_8UCYZuCwb28/TQDssMRPYxI/AAAAAAAAAGE/lshUa9Livh8/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="268" src="http://3.bp.blogspot.com/_8UCYZuCwb28/TQDssMRPYxI/AAAAAAAAAGE/lshUa9Livh8/s400/1.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Hay tener en cuenta algunas limitaciones de los objetos publicados, que son las siguientes:&lt;br /&gt;&lt;br /&gt;- Sólo pueden publicarse páginas, y codeunits, ningún otro tipo de objeto puede publicarse directamente.&lt;br /&gt;&lt;br /&gt;- Que se publiquen páginas no significa que todas las páginas que se incluyen en el cliente estándar sirvan para publicarse como servicio. De hecho, en mi opinion, es mejor utilizar páginas propias, para disminuir el tamaño del XML del servicio a lo mínimo posible. En el caso que nos ocupa, que necesitamos tener una página para mostar la información de la tabla clientes, podriamos usar perfectamente la página 21, Customer Card, no obstante, para predicar mi mismo&amp;nbsp;ejemplo, voy a crear una nueva página para este caso que nos ocupa.&lt;br /&gt;&lt;br /&gt;El diseño de esta página es muy sencillo, sólo muestra 3 campos, y aprovechamos el uso de la página para que automaticamente nos genere toda la interfaz necesaria de manejo de clientes en .net, con clase proxy y demás. En Nav, el diseño de la página sería como el que sigue:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_8UCYZuCwb28/TQDtapoEqSI/AAAAAAAAAGI/mJAkTAEOxhc/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="148" src="http://4.bp.blogspot.com/_8UCYZuCwb28/TQDtapoEqSI/AAAAAAAAAGI/mJAkTAEOxhc/s400/2.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;- Respecto a las codeunit (módulos, por alguna extraña razón, al publicar sí que se encuentra traducido xD),&lt;br /&gt;hay que tener en cuenta al programarlas varias cosas. No se pueden utilizar sentencias que paren la ejecución (Error, Strmenu...), y los errores de ejecución se lanzan como una excepción con el mensaje de error de Nav hacia arriba (.NET, en este caso), por tanto, a la hora de desarrollar, debemos decidir si queremos controlar parte de los errores, o dejar que surjan todos los que Nav puede generar, y que sea .NET el que controle el mensaje y lo muestre al usuario con sentencias&lt;i&gt;&lt;b&gt; try...catch&lt;/b&gt;&lt;/i&gt;. Personalmente, a mi me gusta mucho mas la última opción, dependiendo del proceso, los errores en Nav se pueden disparar y nunca se puede tener en cuenta todos en los procesos complejos, asi que mejor tener transparencia con los errores al máximo. En la codeunit de este caso, he implementado 3 métodos, en los que no hago nada por controlar los errores, que sea .Net el que los muestre como mensajes. El diseño del Módulo publicado quedaría así:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_8UCYZuCwb28/TQDvRGvN7jI/AAAAAAAAAGM/p8YeDp8putk/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="295" src="http://2.bp.blogspot.com/_8UCYZuCwb28/TQDvRGvN7jI/AAAAAAAAAGM/p8YeDp8putk/s400/3.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;Una última anotación al respecto de los servicios en Nav. Por el momento, no existen logs automaticos de variables ni de errores, si queremos gestionar con logs las llamadas, deberemos desarrollar una solución propia escribiendo con ficheros de texto o similares.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Con esto tenemos todo el desarrollo de Nav implementado. A continuación, hay que configurar el servicio web en el equipo, y con esto tendremos toda la parte de Nav publicada, pero esto se verá en otro post, mas adelante.&lt;br /&gt;&lt;br /&gt;Nos "vemos".&lt;br /&gt;&lt;br /&gt;Saludos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-6677476216348401077?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/6677476216348401077/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2010/12/uso-de-codeunit-paginas-con-un-cliente.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/6677476216348401077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/6677476216348401077'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2010/12/uso-de-codeunit-paginas-con-un-cliente.html' title='Uso de codeunit / paginas con un cliente de C# en VS2008 (II)'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_8UCYZuCwb28/TQDssMRPYxI/AAAAAAAAAGE/lshUa9Livh8/s72-c/1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-2609377910172689771</id><published>2010-11-27T02:39:00.000-08:00</published><updated>2010-11-27T02:39:37.149-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Servicios web'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2008'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Uso de codeunit / paginas con un cliente de C# en VS2008 (I)</title><content type='html'>Hola,&lt;br /&gt;&lt;br /&gt;Voy a comenzar a publicar una pequeña serie de post acerca de un pequeño ejemplo en el que voy a tratar de publicar un servicio de cada tipo en NAV 2009 sp1, esto es, páginas y codeunits, y utilizarlos desde un cliente desarrollado en C# con VS2008.&lt;br /&gt;&lt;br /&gt;Lo primero de todo es analizar realmente, la cantidad de servicios que necesitamos, y de qué tipo son. &lt;br /&gt;Planteo el ejemplo:&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp; Es necesario tener listados en nuestro cliente de C# de todos los clientes de NAV,&amp;nbsp; con su nombre, su número, y el estado de su campo bloqueado. &lt;br /&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp; Mediante un botón en el cliente C# , se comprobará el no. de pedidos que tenemos con este cliente, el no. de facturas registradas.&lt;br /&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Si lo estimamos conveniente, se puede bloquear directamente desde C# esa ficha del cliente, dejando un comentario en la ficha del cliente por escrito.&lt;br /&gt;&lt;br /&gt;Siempre hay muchas formas de orientar la utilización de unos u otros tipos de servicios en NAV, pero en principio, y esta es mi sugerencia, se debe de seguir el siguiente criterio:&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp; Siempre que se necesiten leer datos de las tablas, es muy útil utilizar los servicios de tipo página, porque permiten ver varios valores de resultado de una única vez, y tiene implementados los métodos de acceso a datos y la clase de proxy necesaria para manejarlos de forma automática.&lt;br /&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp; Siempre que se necesiten modificar los datos, es mucho más práctico utilizar una Codeunit, para poder lanzar modificaciones sobre los datos de la base de datos.&lt;br /&gt;&lt;br /&gt;Luego entra el gusto de cada uno. En este caso por ejemplo, yo voy a utilizar un servicio de página para ver los datos de los clientes, y uno de codeunit con tres métodos, dos para consultar el número de documentos, y otro para bloquear el cliente mediante el servicio.&lt;br /&gt;&lt;br /&gt;Una vez planteado el problema, hay que ponerse a programar el lado de NAV, pero esto será en el siguiente blog.&lt;br /&gt;&lt;br /&gt;Nos leemos.&lt;br /&gt;Saludos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-2609377910172689771?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/2609377910172689771/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2010/11/uso-de-codeunit-paginas-con-un-cliente.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/2609377910172689771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/2609377910172689771'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2010/11/uso-de-codeunit-paginas-con-un-cliente.html' title='Uso de codeunit / paginas con un cliente de C# en VS2008 (I)'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-9111652273269947882</id><published>2010-11-27T01:16:00.000-08:00</published><updated>2010-11-27T01:16:50.850-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Fieldref'/><category scheme='http://www.blogger.com/atom/ns#' term='Recordref'/><title type='text'>Uso de recordref y fieldref en NAV</title><content type='html'>Hola,&lt;br /&gt;&lt;br /&gt;Tras bastante tiempo sin poder escribir nada nuevo (pasan los meses con mucho jaleo y es difícil sacar tiempo) voy a escribir un poco acerca del manejo dinámico de registros mediante las variables del tipo recordref y fieldref. Dynamics Nav utiliza diferentes tipos de variables record para manejar cada tabla (Por ejemplo, la variable clásica es un record de la tabla 18, clientes).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_8UCYZuCwb28/TO_g19dByMI/AAAAAAAAAFs/IMRQY6BOX3k/s1600/VarCustomer.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="193" src="http://2.bp.blogspot.com/_8UCYZuCwb28/TO_g19dByMI/AAAAAAAAAFs/IMRQY6BOX3k/s320/VarCustomer.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Estas variables tienen la ventaja de con cada una de ellas se puede acceder a la definición de la tabla y el código que tengan dentro de ella con llamadas muy simples de código, pero la desventaja de que si se intenta acceder a muchos tipos de tablas en un mismo proceso, es necesario declarar una variable de cada tipo que necesitemos de tabla en nuestro proceso para poder manejar cada tabla individualmente, lo cual provoca muchisimas variables.&amp;nbsp; Si quereis ver un ejemplo de como se complica cuando se trabaja así NAV, el ejemplo perfecto del estándar es la ventana de Navegar, disponible en cualquier documento o movimiento de histórico.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_8UCYZuCwb28/TO_jSC4sNRI/AAAAAAAAAFw/PziOiov7djk/s1600/Navigate.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/_8UCYZuCwb28/TO_jSC4sNRI/AAAAAAAAAFw/PziOiov7djk/s320/Navigate.PNG" width="237" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span style="font-size: x-small;"&gt;No acaba aquí, mejor que lo veais en vuestros NAV.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;Para poder agilizar este tipo de tareas, Dynamics Nav utiliza un tipo diferente de variables, denominadas &lt;b&gt;recordref y fieldref&lt;/b&gt;. Este tipo de variables consiguen apuntar a un registro de una tabla / valor de un campo de este registro, mediante el uso de identificadores numéricos, y por tanto variables en tiempo de ejecución.&lt;br /&gt;&lt;br /&gt;Si queremos abrir la tabla 18, Clientes mediante una variable recordref deberiamos hacer lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_8UCYZuCwb28/TPDE1T_KUMI/AAAAAAAAAF0/hhfMbsGnOyc/s1600/recordref1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="139" src="http://1.bp.blogspot.com/_8UCYZuCwb28/TPDE1T_KUMI/AAAAAAAAAF0/hhfMbsGnOyc/s640/recordref1.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Simplemente comentar, que para recorrer una variable del tipo recordref, es bastante similar a una variable record normal. Ahora veamos como funcionaría en el caso de querer filtrar dentro de esta variable record ref un valor de un campo determinado. Queremos obtener el nombre del primer&amp;nbsp; cliente que se encuentre bloqueado,en este caso, tenemos que empezar a trabajar con una variable fieldref, referencia de campo. Primero la utilizamos para filtrar aquellos clientes que se encuentren bloqueados:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_8UCYZuCwb28/TPDHpL_xZ3I/AAAAAAAAAF4/sdkR3xBuZeE/s1600/recordref2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="77" src="http://2.bp.blogspot.com/_8UCYZuCwb28/TPDHpL_xZ3I/AAAAAAAAAF4/sdkR3xBuZeE/s400/recordref2.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Después, esta misma variable de tipo field ref, nos sirve para referenciar el valor de un campo de un registro que tenemos localizado con una variable recordref:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_8UCYZuCwb28/TPDH9ApAQtI/AAAAAAAAAF8/be7pAhyRjZo/s1600/recordref3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="66" src="http://3.bp.blogspot.com/_8UCYZuCwb28/TPDH9ApAQtI/AAAAAAAAAF8/be7pAhyRjZo/s320/recordref3.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Con, esto ya podemos recorrer un registro, filtrando y utilizando los campos de ese registro de forma dinamica. Ahora, vamos a darle una pequeña vuelta al asunto. La mayor complicacion que tienen este tipo de variables, es para compararlas con las variables originales, es decir, como puedo buscar el dentro de una variable record normal, un registro que he encontrado en una variable recordref, y viceversa.&lt;br /&gt;&lt;br /&gt;Para esto, disponemos de diferentes propiedades comunes en ambos tipos de variables, que nos pueden servir para poder comparar entre ellas. Por ejemplo, con las propiedades getview/setview y getposition/setposition, podemos localizar el registro encontrado de forma dinamica y mostrarlo con su listado correspondiente en forma de registro normal. Hay que tener en cuenta que no se puede utilizar formularios con variables del tipo recordref, asi que hay que traducirlo a un tipo de variable que sí le valga al formulario:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_8UCYZuCwb28/TPDLoahKuHI/AAAAAAAAAGA/LgkCWlAtIWA/s1600/recordref4.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="165" src="http://2.bp.blogspot.com/_8UCYZuCwb28/TPDLoahKuHI/AAAAAAAAAGA/LgkCWlAtIWA/s400/recordref4.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;Con esto, ya tendriamos controlado el uso de este tipo de variables de forma correcta. Hasta aqui ha sido todo en este post. Nos leemos.&lt;br /&gt;&lt;br /&gt;Saludos.&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3649773826080443777-9111652273269947882?l=dynamicsnaves.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dynamicsnaves.blogspot.com/feeds/9111652273269947882/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://dynamicsnaves.blogspot.com/2010/11/uso-de-recordref-y-fieldref-en-nav.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/9111652273269947882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3649773826080443777/posts/default/9111652273269947882'/><link rel='alternate' type='text/html' href='http://dynamicsnaves.blogspot.com/2010/11/uso-de-recordref-y-fieldref-en-nav.html' title='Uso de recordref y fieldref en NAV'/><author><name>blopez</name><uri>http://www.blogger.com/profile/14092693689615142279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_8UCYZuCwb28/TSnR3NGlTRI/AAAAAAAAAIM/J_VGYuCEjX4/S220/logoNAV.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_8UCYZuCwb28/TO_g19dByMI/AAAAAAAAAFs/IMRQY6BOX3k/s72-c/VarCustomer.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3649773826080443777.post-5627990919957615785</id><published>2010-10-05T09:22:00.000-07:00</published><updated>2010-11-26T08:07:47.217-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='googlegagdet'/><category scheme='http://www.blogger.com/atom/ns#' term='NAV'/><title type='text'>USO DE SERVICIOS WEB NAV 2009 Y GOOGLE GAGDET PARTE V. PROGRAMANDO JAVASCRIPT.</title><content type='html'>&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: Calibri;"&gt;Lo primero de todo, vamos a ver de una forma rápida, los controles necesarios para nuestro gagdet. No voy a entrar en la programación detallada de cada uno de los eventos, voy a dar un vistazo rápido al funcionamiento y controles, y me voy a centrar en el intercambio de mensajes con Dynamics NAV mediante una funcion, que es lo realmente importante.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: Calibri;"&gt;Cuando el gagdet se abre, tenemos los controles:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_8UCYZuCwb28/TKtOSfYmVtI/AAAAAAAAAFU/k2vh_KJ0UtE/s1600/7.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="161" px="true" src="http://1.bp.blogspot.com/_8UCYZuCwb28/TKtOSfYmVtI/AAAAAAAAAFU/k2vh_KJ0UtE/s320/7.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: Calibri;"&gt;Al introducir el nombre de la empresa con la que nos queremos conectar, y el cód. Vendedor, pulsamos el botón Conectar. Este botón, oculta por un lado todos estos controles y muestra los nuevos:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_8UCYZuCwb28/TKtOW8B2shI/AAAAAAAAAFY/8pyh1HhcDBE/s1600/8.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="161" px="true" src="http://2.bp.blogspot.com/_8UCYZuCwb28/TKtOW8B2shI/AAAAAAAAAFY/8pyh1HhcDBE/s320/8.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-family: Calibri;"&gt;La caja de texto calendario, muestra el día en el que nos encontramos y el label DiaSemana el nombre del dia. La caja, el no. de tareas, y el bot1, muestra el detalle de descripciones de tareas encontradas. SI pulsamos botConectado volvería a la ventana inicial, y si pulsamos bot1, se muestra:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_8UCYZuCwb28/TKtOdWXIfDI/AAAAAAAAAFc/1nmYGiDBRgw/s1600/9.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="161" px="true" src="http://4.bp.blogspot.com/_8UCYZuCwb28/TKtOdWXIfDI/AAAAAAAAAFc/1nmYGiDBRgw/s320/9.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Si pulsamos el bot2, volverá a la ventana principal de calendario, y podemos desplegar la descripción de las tareas pendientes que tenemos con el combo list. Podemos desconectar con botConectado en cualquier momento. &lt;br /&gt;&lt;br /&gt;Todo el código hasta este momento, debe ser de mostrar /ocultar controles y lo voy a obviar. Ahora llega la parte de mensajes. Por un lado, editamos el elemento strings.xml y definimos varios elementos nuevos:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 10pt; line-height: 115%;"&gt;&lt;a href="http://1.bp.blogspot.com/_8UCYZuCwb28/TKtPr_mA8AI/AAAAAAAAAFg/NM99y_xGzpU/s1600/10.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="105" px="true" src="http://1.bp.blogspot.com/_8UCYZuCwb28/TKtPr_mA8AI/AAAAAAAAAFg/NM99y_xGzpU/s640/10.JPG" width="640" /&gt;&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;span style="font-size: 12pt; line-height: 115%;"&gt;Ahora tenemos que implementar la función mas importante de todas, la que va a encargarse de comunicar con el servicio de NAV:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_8UCYZuCwb28/TKtPu-hwv3I/AAAAAAAAAFk/QfDEq6cuXjc/s1600/11.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="491" px="true" src="http://3.bp.blogspot.com/_8UCYZuCwb28/TKtPu-hwv3I/AAAAAAAAAFk/QfDEq6cuXjc/s640/11.JPG" width="640" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/_8UCYZuCwb28/TKtPr_mA8AI/AAAAAAAAAFg/NM99y_xGzpU/s1600/10.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size: 12pt; line-height: 115%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 10pt;"&gt;&lt;span style="font-size: 12p
