Word dokumentum generálása adatkötéssel - 3. rész: Kontroll

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:

Vezérlők a Developer fülön

Ö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:

Date Picker

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:

Date Picker Properties

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:

Title értéke

  • 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)



Balássy György (MS RD, ASP.NET MVP, MCTS)

Balássy György (MS RD, ASP.NET MVP, MCTS) Villamosmérnök, a BME Automatizálási és Alkalmazott Informatikai Tanszékén webportálok fejlesztését oktatja. 2000 óta foglalkozik a Microsoft .NET platformjával, melynek meghonosításában jelentős szerepet vállalt előadóként, konzulensként és A .NET Framework és programozása című könyv társszerzőjeként. Az MSDN Kompetencia Központon belül a Portál Technológiák Csoport vezetője, szakterülete web alapú rendszerek fejlesztése és üzemeltetése. 2004-ben Magyarországon elsőként kapta meg a Most Valuable Professional címet, majd 2005 óta a Microsoft magyarországi regionális igazgatója. Publikációi a Technet Magazinban, az MSDN Kompetencia Központ honlapján és szakmai blogjában olvashatóak.

2008.04.15. 18:56:41 | Permalink | Hozzászólások: 0 | Tárgyszavak: , ,


  • CSS és Javascript minimalizálás MSBuildből

    Balássy György (MS RD, ASP.NET MVP, MCTS) Az ASP.NET Web Site típusú projekt egyik tulajdonsága, hogy nem tartozik hozzá project fájl. Ez ugyan többnyire előny, mert kényelmes, nekem most éppen hátrány, mert MSBuilddel akarom automatizálni nem csak a fordítási folyamatot, hanem a web.config production beállításokkal történő frissítését, a felesleges könyvtárak törlését, továbbá a CSS és Javascript fájlok minimalizálását is. Tovább »
  • Dual boot VHD-ból kék halállal

    Balássy György (MS RD, ASP.NET MVP, MCTS) Mint korábban már írtam róla, sikerült megoldanom, hogy a Windows 7-em mellett VHD-ból tudjak Windows Server 2008 R2-t bootolni. Ez működött is szépen, ám a minap a szerver indítása közben kék halál fogadott. Tovább »


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások