C# - Template dokumentumok címzése WebService által szolgáltatott adatokkal

WebService elérése Office alkalmazásokból 1. rész

forráskód letöltése
Két részes cikksorozatunkban megismerkedhetünk annak lehetőségével, hogy miként teremthetünk kapcsolatot Microsoft Word, vagy Excel alkalmazásainkból egy Web szervizzel a SoapClient objektum segítségével. Bemutatjuk, hogy az objektumot hogyan használhatjuk fel egy makróban abból a célból, hogy meghívjuk a szerviz adatszolgáltató metódusait egy faxborító fejlécezéséhez.
Mellékelt példa megnyitása előtt szükséges egy OfficeService01 nevű virtuális könyvtár létrehozása, mely a példa könyvtárára mutat. Ehhez nyissa meg a mellékelt mappa Tulajdonság ablakát és itt a Webmegosztás lapon engedélyezze a mappa megosztását olvasási és parancsfájlok futtatási jogával.
A mellékelt példa használatához el kell végeznünk bizonyos beállításokat. Ehhez olvassa el a Kezdeti beállítások című fejezetet.
Kezdeti beállítások
A példaalkalmazás mappájában elhelyezett ShowForm mappa tartalmazza annak a makrónak a kódállományait, melyből a Web szerviz alkalmazásunkat elérhetjük, és metódusainak meghívásával végül kitölthetjük egy faxborító fejlécmezőjét. A végső cél elérése érdekében a következő előzetes beállításokra van szükségünk:
A faxborító egy úgynevezett Spreadsheet Template állomány, mely alapértelmezésben a következő mappában található: C:\Program Files\Microsoft Office\Templates\1038, és az Elegant Fax.dot nevet viseli.
Meg kell bizonyosodnunk arról, hogy ez az állomány föl van-e telepítve az MS Office alkalmazásunkhoz. Amennyiben nem, akkor az Office programcsomag telepítőkészletét felhasználva fel kell azt telepíteni.
Második lépésként létre kell hoznunk a makrót, melyből a műveleteket vezéreljük. Ehhez indítsuk el MS Word alkalmazásunkat, majd az Eszközök menüből válasszuk a Makró pontot, majd az almenüből a Makrók almenüpontot.
A felbukkanó ablakban a Létrehozás gombbal létre kell hoznunk a makrónkat ShowForm néven. Ezt követően nyomjuk meg a Szerkesztés gombot, minek eredményeként elérhetővé válik a beépített Visual Basic Szerkesztő, mellyel megírhatjuk a makrónk rövidke kódját.
A makró forráskódját mellékeltük a ShowForm almappában, így a begépelés helyett elegendő importálnunk az állományokat a makró projektbe.
A szerkesztőben, annak bal szegmensében találhatunk egy csomópontot NORMAL néven, mely tartalmazza makrónk projektjét. A Forms alcsomópontban már találunk egy UserForm1 objektumot, melyet ki kell törölnünk. Ehhez a File menüben válasszuk a Remove UserForm1 menüpontot. Tegyük ugyanezt a Modules alcsomópont Module1 objektumával is.
A mellékelt állományok (Module1.bas és UserForm1.frm) importálásához válasszuk a File menüben az Import File menüpontot, majd keressük meg állományainkat a mappában.
A makrót elmentve az rögtön használható. Ehhez a Run menüben ki kell választanunk a Run Makro pontot, vagy meg kell nyomnunk az F5 nyomógombot. Elindítva a makrót annak Form-ján megadhatjuk a faxborítónkat tartalmazó állomány elérési útvonalát, majd a listából kiválaszthatunk egy elemet. A LEKÉRDEZÉS gombbal indítható a művelet.
Web szerviz felépítése
A makrónk a Web-szerverünkön futó szerviz alkalmazáshoz fordul adatokért. A szerviz két metódussal rendelkezik. Az első metódus (GetCustomerIDs) visszatérési értékként egy karakterlánc tömböt ad vissza, mely tartalmazza a Northwind adatbázis Customers táblájában található rekordok CustomerID oszlopértékeit, mely listát megjelenítjük a makrónk Form-ján.
[WebMethod]
public string[] GetCustomerIDs()
{
  ...  
}
A szerviz másik metódusával (GetParticulars) a Customers tábla egy rekordjának elemeit kaphatjuk vissza, paraméterként adva meg, hogy melyik azonosítóval rendelkező elem legyen az.
[WebMethod]
public string[] GetParticulars(string id)
{
  ...
}
Makró UserForm1 objektuma
A UserForm1 objektum kódjában kell megvalósítanunk azt, hogy a szerviz első metódusa a Form inicializációjakor végrehajtódjon, és az azonosítók bekerüljenek a Form-ra helyezett ListBox kontrolba.
Private Sub UserForm_Initialize()
  Dim oSOAPClient As Object
Létrehozzuk a SoapClient objektumot:
  Set oSOAPClient = CreateObject("MSSOAP.SoapClient")
Megadjuk a szerviz alkalmazásunk URL-jét:
  oSOAPClient.mssoapinit "http://localhost/OfficeService01/Service1.asmx?wsdl", "Service1", "Service1Soap"
Lekérdezzük egy karakterlánc-tömbbe az azonosítókat:
  Dim arrTemp() As String
  arrTemp = oSOAPClient.GetCustomerIDs()
Majd a tömb elemeit egy ciklussal bedolgozzuk a ListBox kontrolba:
  For i = 0 To UBound(arrTemp)
    ListBox1.AddItem arrTemp(i)
  Next
End Sub
Makró Module1 objektuma
A makrónk Module1 objektumában létrehozunk egy metódust, mely paraméterként megkapja a listából kiválasztott azonosítót, és ezt az azonosítót átadja a szerviz metódusának, mely az adott rekord oszlopaiban megtalálható értékekkel tér vissza.
Sub GenerateForm(sID As String)
  ...
A SoapClient objektumra itt is szükség van:
  Set oSOAPClient = CreateObject("MSSOAP.SoapClient")
  oSOAPClient.mssoapinit "http://localhost/OfficeService01/Service1.asmx?wsdl", "Service1", "Service1Soap"
A metódus eredménye itt is egy tömbbe kerül:
  arrTemp = oSOAPClient.GetParticulars(sID)
Az Elegant Fax borító generálásához létre kell hoznunk egy Word objektumot:
  Dim oDoc As Word.Document
A Form TextBox kontroljában meg kell adni ennek a Template objektumnak a fizikai elérési útvonalát. Ezt a karakterláncot adjuk át a Word objektumnak:
  Set oDoc = Application.Documents.Add(UserForm1.TextBox1.Text)
A dokumentum fejlécében megjelenítjük a tömb elemeit:
  oDoc.Bookmarks("Company").Range.Text = arrTemp(1) + vbCrLf + arrTemp(2) + ", " + arrTemp(3) + vbCrLf + arrTemp(4) + vbCrLf + arrTemp(5) + ", " + arrTemp(6) + vbCrLf + arrTemp(7)
Exit Sub
A metódust a Form felületén elhelyezett gomb lenyomásakor hívjuk meg a ListBox kontrolban kiválasztott elemmel a paraméterében:
GenerateForm ListBox1.List(ListBox1.ListIndex)
A feladat jól példázza azt a Microsoft cég által preferált törekvést, melynek eredményeképpen az alkalmazások együttműködhetnek egymással, mely hozzásegíti a fejlesztőket ahhoz, hogy igazán kényelmes, és intelligens alkalmazásokat építsenek.

WebService elérése Office alkalmazásokból cikksorozat

Template dokumentumok címzése WebService által szolgáltatott adatokkal - WebService elérése Office alkalmazásokból 1. rész

Excel sablonok kitöltése WebService által szolgáltatott adatokkal - WebService elérése Office alkalmazásokból 2. rész