Programando Smart Tags en Word con Visual Studio Tools for Office System

El escenario es el siguiente, necesitamos que Word pueda reconocer a través de los Smart Tags todas las claves de nuestros clientes para poder solicitar información adicional del mismo mientras escribimos sobre el documento. Para lograrlo utilizamos Visual Studio Tools for Office System para asociar a nuestro documento la capacidad de leer un servicio web que obtenga la información de los clientes y que además permita programar los Smart Tags.



Realmente es muy sencillo hacer realidad este escenario:



Como ves a traves de los terminos “Terms“ asociados a nuestro documento podemos identificar el valor de la clave de nuestro cliento y asociarle un Smart Tag el cual cuenta con una serie de acciones “Actions“ asociadas que realizar ciertas actividades. Como MessageBox.Show mostrado a continuacion:



El código para hacer realidad esto lo muestro a continuación:


1: using System;
2: using System.Collections.Generic;
3: using System.Text;
4:
5: using Microsoft.Office.Tools.Word;
6:
7: namespace WordDocument1
8: {
9:     class Customer : SmartTag
10:     {
11:        
12:         localhost.Service ws = new WordDocument1.localhost.Service();
13:
14:         public Customer() : base(“http://schemas.microsoft.com/dpe/2005/vsto#PlexITService”, “PlexITService”)
15:         {
16:             System.Data.DataSet ds;
17:             ds = ws.GetCustomers();
18:            
19:            
// asociamos cada CustomerID a la coleccion de terminos que Word
20:
           
// entendera como Smart Tags
21:
            foreach (System.Data.DataRow dr in ds.Tables[0].Rows)
22:             {
23:
24:                 Terms.Add(dr[“CustomerID”].ToString());
25:             }
26:
27:             ds.Dispose();
28:
29:            
// Creamos las acciones que pueden suceder para cada termino reconocido
30:
           
// como Smart Tag
31:
            Action CompanyNameAction = new Action(“Show Customer – CompanyName”);
32:             Action ContactNameAction = new Action(“Show Customer – ContactName”);
33:             Action AddressAction = new Action(“Show Customer – Address”);
34:
35:            
// Creamos los manejadores de evento para cada accion
36:
            CompanyNameAction.Click += new ActionClickEventHandler(CompanyNameAction_Click);
37:             ContactNameAction.Click += new ActionClickEventHandler(ContactNameAction_Click);
38:             AddressAction.Click += new ActionClickEventHandler(AddressAction_Click);
39:
40:            
// Asociamos un arreglo de acciones a la coleccion Actions
41:
            Actions = new Action[] { CompanyNameAction, ContactNameAction, AddressAction };
42:         }
43:
44:        
// Manejador de la accion Address
45:
        void AddressAction_Click(object sender, ActionEventArgs e)
46:         {
47:             System.Data.DataSet ds = ws.GetCustomersByID(e.Text);
48:
49:             foreach (System.Data.DataRow dr in ds.Tables[0].Rows)
50:             {
51:
52:                 ShowValues(“Address”, dr);
53:             }
54:             ds.Dispose();
55:         }
56:
57:        
// Manejador de la accion ConctactName
58:
        void ContactNameAction_Click(object sender, ActionEventArgs e)
59:         {
60:             System.Data.DataSet ds = ws.GetCustomersByID(e.Text);
61:
62:             foreach (System.Data.DataRow dr in ds.Tables[0].Rows)
63:             {
64:
65:                 ShowValues(“ContactName”, dr);
66:             }
67:             ds.Dispose();
68:         }
69:
70:        
// Manejador de la accion CompanyName
71:
        void CompanyNameAction_Click(object sender, ActionEventArgs e)
72:         {
73:             System.Data.DataSet ds = ws.GetCustomersByID(e.Text);
74:
75:             foreach (System.Data.DataRow dr in ds.Tables[0].Rows)
76:             {
77:
78:                 ShowValues(“CompanyName”, dr);
79:             }
80:             ds.Dispose();
81:         }
82:
83:        
// Muestra el valor seleccionado
84:
        private void ShowValues(string column, System.Data.DataRow dr)
85:         {
86:                               
87:                 System.Windows.Forms.MessageBox.Show(dr[column].ToString());
88:            
89:         }
90:       
91:     }
92: }


OJO: Este codigo no es para produccion, es solo codigo de demostracion con propositos de mostrar como funciona el programar Smart Tags en Word utilizando Visual Studio Tools for Office System.

Leave a Reply

Your email address will not be published. Required fields are marked *