Bár a Word 2007 preferált fájlformátuma a DOCX teljes mértékben nyitott és XML alapú, elmondhatjuk, hogy a tartalom programozott közvetlen előállítása mégsem igazán egyszerű, mert az adat és a megjelenítés erősen keveredik a WordML nyelvben. Már a Word 2003-ban megjelent az a lehetőség, hogy a dokumentumhoz XSD sémát rendelhetünk, amely alapján a szöveg egyes részeit nyers XML-ben exportálhatjuk, de sajnos ez nem teszi lehetővé a tartalom generálását, ahogyan azt korábban láttuk.
Szerencsére ezen kívül van egy harmadik XML alapú lehetőség is, amely a Word 2007-tel vált elérhetővé.
2. Structured document tags
A Word 2007 vezette be az ún. content control vezérlőket vagy más néven a structured document tag-eket, azaz SDT-ket (ez borzasztóan magyartalanul hangzik, de sajnos nem tudom, hogy mi lett a magyar terminológia 😦 ). A módszer lényege, hogy a dokumentum egyes részeibe nem csak passzív helyőrzőket, hanem aktív vezérlőket teszünk, melyek tartalma a dokumentumban tárolt (ugyebár ZIP fájlról van szó) XML fájlhoz kapcsolódik.
Ha bekapcsoljuk a Developer fület, a Controls csoportban találjuk ezeket a vezérlőket:
Összesen 7 féle létezik:
- Rich Text
- Text
- Picture
- Combo Box
- Drop-Down List
- Date Picker
- Building Block Gallery
A nevek magukért beszélnek. Ha ugyanebben a csoportban átkapcsolunk Design Mode-ba, beszúrhatjuk ezeket a vezérlőket a dokumentumunk szövegébe. Például ha szükséges, hogy a felhasználók megadjanak egy dátumot, amely mondjuk egy szerződés keltét jelzi, beszúrhatunk egy Date Picker vezérlőt, amely így fog megjelenni:
Fontos tehát, hogy aktív vezérlőről van szó, amely nem csak a fejlesztők, hanem a felhasználók számára is megkönnyíti a munkát. A szalagon a Properties gombra kattintva még egy beállító ablakot is kapunk:
Két fontos opció elérhető minden vezérlőnél:
- A Title mezőben megadott érték megjelenik a felhasználóknak, közvetlenül a vezérlő felett, ezt tehát érdemes barátságosan kitölteni:
- A Tag mezőben megadott érték a felhasználói felületen nem jelenik meg, ez nekünk fejlesztőknek lehet hasznos.
Az így beállított vezérlő egy w:sdt elem formájában mentődik el a document.xml fájlba:
<w:sdt> <w:sdtPr> <w:rPr> <w:lang w:val="en-US"/> </w:rPr> <w:alias w:val="Szerződés dátuma"/> <w:tag w:val="SzerzodesDatum"/> <w:id w:val="107276272"/> <w:placeholder> <w:docPart w:val="DefaultPlaceholder_22675705"/> </w:placeholder> <w:showingPlcHdr/> <w:date> <w:dateFormat w:val="yyyy.MM.dd."/> <w:lid w:val="hu-HU"/> <w:storeMappedDataAs w:val="dateTime"/> <w:calendar w:val="gregorian"/> </w:date> </w:sdtPr> <w:sdtContent> <w:r w:rsidRPr="005B7BC2"> <w:rPr> <w:rStyle w:val="PlaceholderText"/> <w:lang w:val="en-US"/> </w:rPr> <w:t>Click</w:t> </w:r> <w:proofErr w:type="gramEnd"/> <w:r w:rsidRPr="005B7BC2"> <w:rPr> <w:rStyle w:val="PlaceholderText"/> <w:lang w:val="en-US"/> </w:rPr> <w:t xml:space="preserve"> here to enter a date.</w:t> </w:r> </w:sdtContent> </w:sdt>
A w:sdtPr a properties, azaz a tulajdonságokra vonatkozó rész, a w:sdtContent pedig a felhasználó által megadott tartalom. A tulajdonságok között megtaláljuk a korábban megadott alias és tag értékeket. Itt található még a w:showingPlcHdr elem is, amely megmutatja, hogy a w:sdtContent részben nem a felhasználó által megadott érték, hanem még az alap helyőrző, placeholder szerepel. A w:date elembe a Date Picker vezérlőre vonatkozó egyedi beállításokat menti a Word.
Az w:sdtContent elem most elég bonyolultnak tűnik, de már értjük, hogy miért: run elemeket tartalmaz, mert arra lehet formázási beállításokat megadni. Ha a felhasználó kiválaszt egy dátumot, mindez sokkal átláthatóbb lesz, marad a nyers text:
<w:sdtContent> <w:r w:rsidR="001B1478"> <w:t>2008.04.15.</w:t> </w:r> </w:sdtContent>
Mi az, amit tehát ezzel elértünk? Definiáltuk, hogy a dokumentum fontos részein milyen formátumú tartalomnak kell megjelennie és a felhasználó által megadott adatot úgy perzisztáltuk WordML-ben, hogy az a megjelenítéstől teljesen független, ráadásul a korábbiaknál egyszerűbben található meg programozottan a dokumentumban.
A jó hír az, hogy még arra sincs szükség, hogy a Word által generált XML-ben w:sdt elemeket keresgéljünk, ugyanis ezeknek a vezérlőknek a tartalmát adatkötésen keresztül is elérhetjük.
(folytatjuk)