Hatókör
Microsoft 365 SharePoint Microsoft 365 SharePoint kisvállalati verzió

által Justin Joyce, LANtek

Megjegyzés: Ez a cikk a SharePoint végfelhasználóinak szóló Get the Point blog négyéves bejegyzésgyűjteményének része.

Áttekintés: Egyéni öregedési jelentések kód nélkül

A SharePoint-webhelyek gyakran kért funkcionális elemei közé tartozik a tevékenységek vagy listaelemek korosítására vonatkozó jelentés. Vagyis hány nap/hónap telt el a listaelem legutóbbi módosítása óta?

A felszínen ez egy nagyon egyszerű kérésnek tűnik. Végül is vannak dátumok az elemek létrehozásához és módosításához, képesek vagyunk egyéni dátumokat tárolni, amikor az elemek bizonyos módosításai az eseményérzékelőken keresztül történnek. Olyan számított oszlopokkal rendelkezünk, amelyekben Excel-szerű képleteket is használhatunk az adatainkkal való munkához. Ez elég egyértelmű javaslatnak tűnik. Kiválasztunk egy dátummezőt, létrehozunk egy számított oszlopot, majd elvégezünk egy képletet a [DateField] – [Ma] sor mentén. De nem olyan gyors! Ahogy bárki, aki megkísérelte ezt az "egyszerű" feladatot, tudja, hogy ha egy számított oszlopban a [Ma] típusúhoz hasonlót próbál használni, problémákat okoz. Ha megpróbál beszúrni [Ma] szöveget a számított oszlop képletmezőjébe, a következőhöz hasonló hibaüzenet jelenik meg:

Hibaüzenet

Miért van ez? Ennek köze van a számított oszlopok kiszámításához.

Vegyünk példaként egy egyszerű képletet:

= HA( [Oszlop1]<=[Oszlop2], "OK", "Nem OK")

Mindez azt jelenti, hogy ha az Oszlop1 kisebb vagy egyenlő a Column2 oszlopnál, akkor az OK, ellenkező esetben a Nem OK érték jelenik meg. Ez egy meglehetősen tipikus alapképlet egy számított oszlophoz, és alapszintű feltételezést tesz a következő oszlopokat tartalmazó listaelemről: Az Oszlop1 és oszlop2 értékei soha nem módosíthatók frissítési esemény nélkül a listaelemen.

Így van, a számított oszlopok csak a lista frissítésekor (vagy létrehozásakor) lesznek újraszámolva, mivel feltételezik, hogy a kiszámított adatok magukban az elemben találhatók. Ez problémát okoz, ha olyan elemet próbál használni, amely az elem mezőinek (például a mai dátumnak) megfelelően változik.

Most nem voltam ott az értekezleten, ahol úgy döntöttek, hogy így fognak működni a számított oszlopok, de ha kiképzett becslést kellene találnom, feltételezem, hogy így működnek a teljesítmény szempontjából. Tegyük fel, hogy több ezer elemből álló lista volt, amelyek mindegyike tartalmazott egy számított oszlopot, amely "élő" frissítést igényelt. Ez azt jelentené, hogy egy mechanizmusnak, például egy időzítőfeladatnak végig kell haladnia minden olyan tételen, amely oly gyakran tartalmazza ezt a számított oszlopot, és frissíti annak értékét. Ez a teljesítmény szempontjából rendkívül adózó lehet, mert a nagyobb üzemelő példányok esetén ez a feladat folyamatosan fut, és megváltoztatja a dolgokat. Ez csak az én tippem, de van egy kis értelme, ha belegondolsz.

Vannak olyan hasonló megoldásokra vonatkozó javaslatok, amelyekben a SharePoint becsapja a Today értéket, először létrehoz egy Ma nevű oszlopot, majd hozzáadja a képlethez, majd törli azt. Ezek mind jók és jók, de ne feledje, mit mondtam a számított oszlopok frissítésekor. Ez az érték csak az elem frissítésekor változik, ami azt jelenti, hogy az értékek hamarosan helytelenek lesznek, különösen egy nap számítása esetén.

Láttam, hogy mások okos JavaScript használatával írják az értékeket az oldalra. Ez is működne, de nagyjából kategorikusan az ügyfélszkript ellen vagyok, amikor elkerülhető.

Végrehajtás:

Mi a teendő? A számított oszlopok nem számítanak az úgynevezett "változó" függvényeknek, például a Today függvénynek. Előfordulhat, hogy olyan egyéni kódot fejlesztünk, amely gondoskodik erről számunkra, például egy számított oszlopról, egy időzítőfeladatról vagy egy ütemezett folyamatról, amely minden olyan elemet frissít, amely ezt a számítást igényli. Ez visszavezet minket az előző bekezdésben említett teljesítmény problémájához, és emellett egy törékeny megoldás, amely nagyon specifikus lenne a kérdéses webhelyre/listára/oszlopra. A két probléma mellett egy olyan nerdy srácot is meg kell keresnie, mint én, aki tudja, hogyan kell kódokat kódzni, és rá kell vennie, hogy fejlessze ezt a megoldást. De van egy könnyebb módja!

Ha rendelkezik mezők létrehozására és lapok szerkesztésére a webhelyen, és van egy kis ismerete az XSLT-ről és a nézetek létrehozásáról, összeállíthat egy XSL-sablont, amely szerepelhet a listanézetben, és a lap minden egyes kérésekor hűen kiszámítja az értékét. Ez a forgatókönyv megszünteti a teljesítménnyel kapcsolatos aggodalmankat, és nem igényli az egyéni kód megoldáson keresztüli kifejlesztését és üzembe helyezését.

Tökéletes. És hogyan csináljuk?

  1. Hozza létre vagy válassza ki a forrásként működő mezőt. Dátumtípusnak kell lennie.

  2. Hozzon létre egy mezőt, amely helyőrzőként fog működni a kiszámított értékhez.

  3. Adja hozzá mindkét mezőt egy tartalomtípushoz, és adja hozzá a tartalomtípust egy listához.

  4. Hozzon létre egy nézetet a listáról, amely a forrás- és helyőrző oszlopokat is tartalmazza.

  5. Töltse fel az XSL-sablont a Stílustárba.

  6. Állítsa be a Listanézet kijelző "XSL-hivatkozás" tulajdonságát a felhasználói felületen keresztül.

  7. Siker!

Tekintsünk át egy példa használati esetet, és tekintsük át az implementációt. Ügyfelünk egy olyan nézetet szeretett volna látni a fő listáról, amelyből megtudhatja, hogy egy adott listaelem mennyi ideig volt állapotban. Ez a lista tartalmazott egy egyéni webhely-tartalomtípust, amely az Elem típusból származik, és hozzá van adva a listához. Már volt egy eseményérzékelő, amely rögzíti a listaelem állapotmezőjének minden módosítását, és a dátumot egy "Date Status Changed" nevű oszlopba menti. Mindez a kábelezés nem szükséges, és bármilyen dátummezővel elvégezhető (ez csak így történik, ez a mi implementációnk, de nyugodtan kísérletezzen). A minimálisan szükséges, hogy a forrás dátummezője és helyőrző mezője tárolja a számítást (erről bővebben a következő bekezdésben), de azt javaslom, hogy webhelyoszlopokat és webhely-tartalomtípusokat használjon arra az esetre, ha ezt a megoldást a webhely más helyein is újra fel szeretné használni.

Tehát megvan a forrásdátum, amelyet a mai dátumhoz viszonyított számításban használhatunk. Most létrehozhatunk egy egyéni webhelyoszlopot, amelyet tárolóként használhatunk a számított értékhez. Ebben az esetben számított oszlopot választottam, mivel az nem módosítható az új vagy az eleműrlapokon, de megjeleníthető a nézetekben, mivel nem szeretnénk, hogy a felhasználók tetszőleges értékeket adjanak meg ebbe az oszlopba. Zavaró lehet, hogy miért nem jelenik meg a nézetekben stb.

Most, hogy megvan a webhelyoszlop, hozzáadhatjuk a listában használt tartalomtípusokhoz. Ezután létre kell hoznunk a nézetet, amely később az XSLT-ünkkel lesz testre szabva. Mindenképpen hozzon létre egy szabványos nézetet, amely tartalmazza a forrásdátumoszlopot és az új számított oszlopot, amely helyőrzőként fog működni a számított értékhez.

Most már minden megvan, amire szükségünk lesz az egyéni öregedési jelentés támogatásához. Már csak az XSL-sablon létrehozása, a webhely stílustárába való feltöltése és a listanézethez való csatolása marad hátra. A használni kívánt XSL-sablon tartalmazni fog néhány normál, SharePoint által létrehozott korrektúrát a nézet létrehozásához, valamint a saját egyéni korrektúrát, amellyel felülbíráljuk ennek bizonyos részeit, és kiszámítjuk a kívánt értéket.

Hitelt ad, ha a jóváírás esedékes, az XSL-sablonokat a tényleges számítások elvégzéséhez használom ehhez a megoldáshoz, kegyesen biztosította a "swirch" az MSDN fórumokon:http://social.msdn.microsoft.com/Forums/en-US/sharepointcustomization/thread/aeda905b-9bc6-40c4-bd22-21306c5cb0d2/

Töltse le az XSL-stíluslap (aging.zip) itt található:https://OneDrive.live.com/?cid=c262e8e2d59a86d9&permissionsChanged=1&id=C262E8E2D59A86D9!104

A kedvenc szövegszerkesztőjében megnyitva rengeteg normál SharePoint XSL-korrektúrát láthat a nézetek megjelenítéséhez. Ha tovább görget a 357. sorig, látni fogja a korrektúrajelhez hozzáadott egyéni sablonok elejét, az első pedig a "DateDiff" sablon, majd a "calculate-julian-day" és a "FieldRef_printTableCell_EcbAllowed.Days_x0020_At_x0020_Status". Ez a három sablonunk, amelyek a számításokat a nézeteinkben készítik el és jelenítik meg. Ha a jelen cikkben korábban megadottaktól eltérő mezőneveket fog használni, akkor ezeket a sablonokat kell átnéznie, és lecserélnie a többi névre mutató hivatkozásokat. Ne feledje, hogy ehhez a mező BELSŐ nevét kell használnia, nem pedig a megjelenítendő nevet.

Ha meggyőződik arról, hogy a sablon készen áll a használatra, lépjen a Stílustárba, és töltse fel az "XSL-stíluslapok" mappába, majd másolja le a fájlra mutató hivatkozást. Ez lehetővé teszi számunkra, hogy könnyen módosítsa később, vagy adja hozzá a különböző részeit a webhely, ahogy kérjük.

Ezután lépjen a listára, és válassza ki a cikk korábbi részében létrehozott nézetet. A "Webhelyműveletek" menüben kattintson a "Lap szerkesztése" elemre.

A Webhelyműveletek menü Lap szerkesztése parancsa

Keresse meg a Listanézet kijelzőt a lapon, és nyissa meg a kijelző menüjét a jobb felső sarokban található, lefelé mutató kis nyílra kattintva. Ebben a menüben válassza a "Kijelző szerkesztése" lehetőséget.

A Kijelző szerkesztése parancs a kijelzőmenüben

Ekkor megnyílik a kijelző menüje a böngészőablak jobb oldalán.

Kijelzőmenü

Kattintson a + gombra a "Vegyes" szakaszhoz, és keresse meg az "XSL-hivatkozás" tulajdonságot.

XSL-hivatkozás tulajdonság a kijelzőmenüben

Illessze be az XSL-fájlra mutató hivatkozást a stílustárba, amelyet korábban lemásolt (ez lehet relatív vagy abszolút hivatkozás).

XSL-fájlhivatkozás beillesztve

Kattintson az OK gombra a módosítások mentéséhez, majd kattintson a lap tetején található "Lap" menüszalag "Szerkesztés leállítása" gombjára.

A Szerkesztés leállítása gomb a Lap lapon

Ha minden megfelelően lett konfigurálva, most a "Napok állapota" oszlopban kell látnia a számokat.

Az Állapotnapok oszlopban számok láthatók

Végül pedig a következőhöz hasonlóan nézne ki a különböző dátumokat tartalmazó tesztadatok:

Tesztadatokat megjelenítő elévülési jelentés

Összefoglalás:

Itt van: egy szépen formázott, robusztus és jobb teljesítményű módja annak, hogy korosító jelentést hozzon létre a SharePointban., egyszerű, kód nélküli implementációval kiegészítve. Ez számos lehetséges alkalmazással rendelkezik, eltekintve az itt feltárt egyetlen használati esettől. Az ilyen típusú jelentések egy másik gyakori forgatókönyve az, hogy egy feladatlistához csatolják, így egy pillantással megtekintheti, hogy mennyi ideje jött létre egy tevékenység.

Jó szórakozást!

--Justin

Justin Joyce, LANtek

Megjegyzések

Hiányzó lépések 2012. 10. 08. 03:51 ok Követtem a lépéseket, de valami hiányzik - hogyan fogja tudni az XSL, hogy melyik dátumot kell használni, vagy melyik mezőben adja hozzá az azóta eltelt napokat? utálom, ha a lépések kimaradnak.

Nincs kód, beleegyezett! 2012. 08. 30. 12:12 Egyetértek - Nem hiszem, hogy ez tényleg számít, mint "nincs kód".Érdekes, hogy a SharePoint néhány csavarja miatt van egy működő számított oszlopom a Today használatával... nem tudom, hogyan vagy miért, mert nem tudom, hogy ezt újra, de az egyik még mindig ott van, és működik.

A "Napok állapota" számított oszlop képlete? 2012.05.02. 07:39 Justin – Milyen képletet használt a "Napok állapota" számított webhelyoszlophoz (helyőrző oszlop)? "=ma" volt?

SharePoint 2007 2011. 12. 02. 11:29 Jelenleg nem kíséreltem meg alkalmazni ezt a megoldást a SharePoint 2007-ben, de én keresem rá. Sajnos a felhasználói felületen nem jelenik meg XslLink tulajdonság a kijelzőn.

Nagyszerű bejegyzés 2011. 11. 30. 09:53 Üdvözlöm Nagy Post.SharePoint 2007-et használok.Nem rendelkezem a fentiekben említett Egyéb szakaszsal.Vannak lépései az SP2007-konfigurációhoz? Köszönöm.

Re: Kód nélküli megoldás: A SharePoint-listaelem legutóbbi módosítása óta eltelt napok megjelenítése 2011. 10. 11. 08:24 Üdv Chris!nagyszerű keresés! Én megyek, hogy egy pillantást, amit kifüggesztett remélhetőleg később ma, és ha tudom, hogy ez a megoldás egy kicsit robusztusabb.Örülök, hogy tetszett a post, és nagyon örülök, hogy sikerült megtalálni a megoldást az európai dátumformátum. :) -Justin

Megoldás európai dátumformátumokhoz 2011. 10. 11. 06:45 Üdv ismét Justin, FYI, találtam egy megoldást a problémára, amit korábban említettem ezen az oldalon;https://sharepointbydummies.wordpress.com/2011/07/13/possible-work-around-to-date-format-issue-sharepoint-2010/

Európai dátumformátumok 2011. 10. 07. 03:59 Üdv Justin! Ez egy nagyon jó megoldás köszönöm, és csak az a fajta dolog, amit töltöttem az elmúlt két napban keresve! De van egy kis problémám vele, és reméltem, hogy segíthetsz nekem.Kissé módosítottam a kódot, hogy számítsa ki a napok számát, amíg valami nem történik, és nem azóta, a "DateDiff" függvény utolsó sorában lévő változók átváltásával; <xsl:value-of select="$JulianToday - $JulianStartDate"></xsl:value-of> De csak az idő felében tudom kakulálni a különbséget. Így például ezzel a dátummal (dd/MM/yyyy formátumban); 30/12/2011 Helyesen számít, de ezzel a dátummal (ugyanazzal a formátummal) 2011. 12. 10. Úgy számít, mintha 2011. dec. 10. helyett 2011. október 12. lenne.Megpróbáltam egyszerűen váltani a nap és a hónap értékeinek pozícióját a "JulianStartDate" változóban, így: <xsl:with-param name="Month" select="substring(ddwrt:FormatDateTime(string($StartDate), 1033, 'yyyyMMdd'),7,2)"/> <xsl:with-param name="Day" select="substring(ddwrt:FormatDateTime(string($StartDate), 1033, 'yyyyMMdd'),5,2)"/> Ezzel kijavítottuk a második dátummal kapcsolatos problémát, de az első dátumnál helytelen volt! Megpróbáltam módosítani a FormatDateTime hívásokat, hogy az európai LCID-ket és a FormatDateTime utolsó paraméterének különböző módosításait (pl. ddMMyyyy, MMddyyyy) használhassa a sztring alatti pozícióparaméterek megfelelő módosításával anélkül, hogy sikerrel járnánk.Nagyra értékelném a tanácsait.Kösz Chris

Kód nélküli 2011. 09. 21. 04:27 Nem hiszem, hogy az XSL "kód nélküli" megoldásnak minősül, mivel az XSL nyelvének megértése nem mindenki számára fontos – de nem jár programozással. Ezen kívül: Szép megoldás, köszönöm!

További segítségre van szüksége?

További lehetőségeket szeretne?

Fedezze fel az előfizetés előnyeit, böngésszen az oktatóanyagok között, ismerje meg, hogyan teheti biztonságossá eszközét, és így tovább.