
A mellékelt példa fordítása után futtassa le a mellékelt AddRegistry.reg állományt a Rendszerleíró adatbázis bejegyzéseinek elkészítéséhez.
A példa helyes működése érdekében az Outlook alkalmazásunk Névjegyalbumában rendelkeznünk kell bejegyzésekkel, valamint biztosítanunk kell, hogy egy SMTP kiszolgálót elérhetünk levélküldés céljából.
Ahogy a sorozat korábbi részeiben megismerhettük, az Intelligens címkében két osztályt kell megvalósítani. A RecognizerClass osztály Recognize metódusa végzi a felismerést, és megjelölést, míg az ActionClass InvokeVerb metódusában valósítjuk meg a megjelenő menüpont mögötti funkciót.
Az osztályok mindegyikéhez létrehoztunk egy-egy GUID számot, melyeket felhasználunk a regisztrációban. Az AddRegistry.reg állomány lefuttatásával helyezzük el a regisztrációs bejegyzéseket a Rendszerleíró adatbázisban, a RemRegistry.reg állomány futtatásával pedig eltávolíthatjuk a létrehozott kulcsokat.
Az Intelligens címkénk mindegyikét COM komponensként kell regisztrálnunk, így a projekt tulajdonságlapján a megfelelő paramétert igazra kell állítani.
Szó felismerése
A Word dokumentum minden egyes karakter után elvégzi a szöveg pásztázását, vizsgálva a szöveget, hogy található-e benne olyan név, mely az Outlook alkalmazásunk Névjegyalbumában is szerepel.
A művelet első lépése, hogy példányosítjuk az Outlook alkalmazást.
Outlook.Application oa = new Outlook.Application();
Létrehozunk egy példányt a MAPI névtérből.
Outlook.NameSpace on = oa.GetNamespace("MAPI");
Az Outlook alkalmazás speciális gyűjteményeit, mint amilyen a Névjegyalbum objektumgyűjteménye is, a MAPIFolder objektumon keresztül érhetjük el. Jelen esetben az olFolderContacts gyűjteményre van szükség.
Outlook.MAPIFolder mf = on.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts);
Az objektumgyűjtemény minden elemén végigmenve lekérdezzük a kapcsolat-objektumok FullName bejegyzését, majd eltároljuk ezeket egy karakterlánc-tömbben.
Outlook.ContactItem ci = null;
string[] names = new string[mf.Items.Count];
for (int i=1; i<=mf.Items.Count;i++)
{
ci = (Outlook.ContactItem)mf.Items.Item(i);
names[i-1] = ci.FullName;
}
Minden kapcsolat egy-egy ContactItem objektum, melyek számtalan property-vel rendelkeznek, a névtől az e-mail címekig.
A neveken végighaladva megvizsgáljuk, hogy melyik név fordul elő a Word dokumentum szövegében, majd a pozíciókat egy tömbben tároljuk.
int[] positions = new int[names.Length];
for(int j = 0;j<names.Length;j++)
{
positions[j] = Text.IndexOf(names[j].ToString());
}
A végső műveletben kijelöljük a szövegben szereplő név karakterláncokat.
for(int h=0;h<positions.Length;h++)
{
if (positions[h] != -1)
{
RecognizerSite.CommitSmartTag(smartTagName, positions[h]+1, names[h].ToString().Length, RecognizerSite.GetNewPropertyBag());
}
}
E-mail küldése
Az ActionClass InvokeVerb metódusában újra le kell kérdeznünk a kapcsolatobjektumokat, hogy meghatározzuk a kiválasztott névhez tartozó e-mail címet. A kijelölt szöveg egy Range objektum.
Range wr = (Range)Target;
...
A neveket megvizsgálva kiválasztjuk a névhez tartozó e-mail címet, amelyet megadhatunk a levél-objektum címzett mezőjében.
Outlook.MAPIFolder mf = on.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts);
string email = "";
Outlook.ContactItem ci = null;
for (int i=1; i<=mf.Items.Count;i++)
{
ci = (Outlook.ContactItem)mf.Items.Item(i);
if (ci.FullName == wr.Text)
{
email = ci.Email1Address;
break;
}
}
A művelet végén létrehozzuk a levél objektumát, majd megjelenítjük azt.
MailItem mi = (MailItem)oa.CreateItem(OlItemType.olMailItem);
mi.To = email;
mi.Subject = "E-mail címzettje: " + ci.FullName;
mi.Display(m);
A Smart Tag kipróbálásához írjon be egy nevet egy tetszőleges Word dokumentumba az Outlook Névjegyalbumának nevei közül. A név fölött kijelölt állapotában megjelenik egy menü, melyből ki kell választani az E-mail küldés funkciót.