Riešenie bez kódu: Zobrazenie dní od poslednej zmeny položky zoznamu
Applies To
SharePoint v službe Microsoft 365 SharePoint v službe Microsoft 365 Small Businessod Justin Joyce, LANtek
Poznámka: Tento článok je súčasťou zbierky príspevkov od štyroch rokov od získania bodového blogu pre koncových používateľov SharePointu.
Prehľad: vlastné zostavy starnutia bez kódu
Jedným z často vyžiadaných funkčných častí lokality SharePoint je zostava o starnutí pre úlohy alebo položky zoznamu. Inými slovami, koľko dní/mesiacov bolo od poslednej úpravy tejto položky zoznamu?
Na povrchu sa zdá, že ide o veľmi jednoduchú žiadosť. Po tom všetkom sme dátumy vytvorenia a úpravy položiek, máme možnosť Uložiť vlastné dátumy, keď sa určité zmeny položiek uskutočnia prostredníctvom prijímačov udalostí. Vypočítavali sme stĺpce, v ktorých môžeme zahrnúť excelové vzorce na prácu s našimi informáciami. Zdá sa, že to vyzerá celkom rovno vpred. Vyberáme pole dátumu, vytvorte vypočítavaný stĺpec a potom vzorec vykonáte v riadkoch [DateField] – [dnes]. Ah, nie tak rýchlo aj keď! Ako každý, kto sa pokúsil o túto "jednoduchú" úlohu, vie, že v vypočítavanom stĺpci spôsobuje problémy, ktoré sa pokúšajú použiť niečo podobné [dnes]. Skúste vložiť [Today] do poľa vzorca vypočítavaného stĺpca sa zobrazí chybové hlásenie, ktoré sa podobá nasledujúcemu:
Prečo je to? No, to musí urobiť s tým, ako sa vypočítavajú vypočítavané stĺpce.
Pozrime sa na príklad jednoduchého vzorca:
= If ( [Stĺpec1] <= [Stĺpec2]; "OK"; "nie je to OK")
To všetko hovorí, že ak Stĺpec1 je menšia alebo rovná Stĺpec2, potom sa zobrazí tlačidlo OK, inak sa nezobrazuje OK. Toto je pomerne typický základný vzorec pre vypočítavaný stĺpec a predstavuje základný predpoklad položky zoznamu, ktorý obsahuje tieto stĺpce: hodnoty pre Stĺpec1 a Stĺpec2 sa nikdy nebudú môcť zmeniť bez udalosti aktualizácie v položke zoznamu.
To je pravda, vypočítavané stĺpce sa prepočítajú len vtedy, keď je zoznam aktualizovaný (alebo vytvorený), pretože predpokladá, že informácie, ktoré vypočítavate, sú obsiahnuté v samotnej položke. Takto sa vytvorí problém, keď sa pokúšate použiť niečo, čo sa zmení na nezávislý od polí položky, ako je napríklad dnešný dátum.
Teraz som nebol na schôdzi, kde sa rozhodli, že je to spôsob, akým vypočítané stĺpce budú fungovať, Avšak ak by som musel urobiť vzdelanejší odhad by som predpokladať, že fungujú týmto spôsobom pre výkon. Predstavte si, že ste mali zoznam niekoľkých tisíc položiek, z ktorých každá obsahovala vypočítavaný stĺpec, ktorý potreboval aktualizáciu naživo. Znamenalo by to, že niektoré mechanizmy, snáď úloha časovača, by museli zopakovať všetky položky, ktoré obsahovali tento vypočítavaný stĺpec každých tak často a aktualizovať jeho hodnotu. Môže to byť veľmi zdaňované, pokiaľ ide o výkonnosť, pretože pri väčších nasadeniach môže byť táto úloha neustále spustená a zmenená. To je len môj odhad, ale to je docela zmysel, ak si o tom myslíte.
Existuje niekoľko návrhov na podobné riešenia, ktoré sa tam nachádzajú, ktoré zahŕňajú podnietenie SharePointu na akceptovanie dnešnej hodnoty tak, že najprv vytvoríte stĺpec s názvom dnes a potom ho pridáte do vzorca a potom ho odstránite. Tieto sú dobre a dobre, ale pamätajte, čo som povedal o tom, kedy sa aktualizujú vypočítavané stĺpce. Táto hodnota sa zmení iba vtedy, keď sa položka aktualizuje, čo znamená, že vaše hodnoty budú čoskoro nesprávne, a to najmä v prípade výpočtu dňa.
Videl som ostatných, ktorí používajú šikovný JavaScript na zapísanie hodnôt na stránku. To by tiež fungovalo, ale ja som veľmi kategoricky proti klientovi skriptu, keď je možné sa vyhnúť.
Vykonávanie
Čo mám robiť? Vypočítavané stĺpce vychádzajú z otázky pre takzvané "prchavé" funkcie, ako je dnes. Je možné, že by sme mohli vyvinúť nejaký vlastný kód, ktorý sa bude postarať o to, aby sme sa dostali ako vypočítavaný stĺpec, úloha časovača alebo plánovaný proces, ktorý sa má zostaviť a aktualizovať každú jednotlivú položku, ktorá tento výpočet potrebuje. To nás privádza späť k problému s výkonom, ktorý som spomenul v poslednom odseku, a navyše je to krehké riešenie, ktoré by bolo veľmi špecifické pre danú lokalitu/zoznam/stĺpec. Na základe týchto dvoch obáv by ste tiež museli nájsť hlúpy chlapík, ako som ja, ktorý vie, ako kód a presvedčiť ho, aby vyvinul Toto riešenie za vás. Je to však jednoduchší spôsob.
Ak máte práva na vytváranie polí a úpravu stránok na svojej lokalite a máte trochu znalostí o transformácii XSLT a vytváraní zobrazení, môžete vložiť šablónu XSL, ktorá môže byť zahrnutá v zobrazení zoznamu, a bude verne počítať svoju hodnotu pri každom požadovaní stránky. Tento scenár odstraňuje naše obavy v súvislosti s výkonom a nevyžaduje, aby sa vlastný kód vypracoval a nasadil prostredníctvom riešenia.
Perfektné. Ako to urobíme?
-
Vytvorte alebo vyberte pole, ktoré bude fungovať ako náš zdroj. Musí to byť typ dátumu.
-
Vytvorte pole, ktoré bude slúžiť ako zástupný objekt pre vypočítanú hodnotu.
-
Pridajte obidva tieto polia do typu obsahu a pridajte daný typ obsahu do zoznamu.
-
Vytvorenie zobrazenia tohto zoznamu obsahujúceho stĺpce zdroja aj zástupného symbolu.
-
Nahrajte šablónu XSL do knižnice štýlov.
-
Nastavte vlastnosť prepojenia XSL pre webovú časť Zobrazenie zoznamu prostredníctvom používateľského rozhrania.
-
Úspech!
Pozrime sa na príklad použitia prípadu a prechádzajte implementáciou. Náš zákazník si želal Zobraziť ich hlavný zoznam, v ktorom by im povedal, ako dlho bola určitá položka zoznamu sedieť na jej stave. Tento zoznam obsahoval vlastný typ obsahu lokality, ktorý je odvodený od typu položky a pridaný do zoznamu. Vyskytol sa už prijímač udalostí, ktorý zachytáva zakaždým, keď sa pole stavu v položke zoznamu zmenilo a uložilo tento dátum do stĺpca s názvom dátum zmeny stavu. Všetky tieto vedenia sa nevyžadujú a možno ich vykonať s ĽUBOVOĽNÝm poľom s dátumom (ide to len o našu realizáciu, ale neváhajte experimentovať). Minimum, ktoré budete potrebovať, je pole Dátum zdroja a zástupné pole, ktoré bude obsahovať výpočet (Ďalšie informácie nájdete v ďalšom odseku), aj keď navrhujem použiť stĺpce lokality a typy obsahu lokality v prípade, ak chcete toto riešenie použiť na iných miestach na lokalite.
Preto máme dátum zdroja, ktorý môžeme použiť v našom výpočte pred dnešným dátumom. Teraz môžeme vytvoriť vlastný stĺpec lokality, ktorý sa má použiť ako kontajner pre vypočítavanú hodnotu. V tomto prípade som sa rozhodol použiť vypočítavaný stĺpec, pretože sa nebude dať zmeniť na nové alebo upraviť formuláre položiek, ale môže byť vybratý na zobrazenie v zobrazeniach, pretože nechceme, aby používatelia do tohto stĺpca zadávali ľubovoľné hodnoty. Môže to byť mätúce, prečo sa nezobrazuje v zobrazeniach atď.
Teraz, keď sme náš stĺpec lokality, môžeme ho pridať do našich typov obsahu, ktoré sa budú používať v našom zozname. Ďalej je potrebné vytvoriť naše zobrazenie, ktoré bude neskôr prispôsobené s našou transformáciou XSLT. Skontrolujte, či ste vytvorili štandardné zobrazenie obsahujúce stĺpec dátum zdroja a nový vypočítavaný stĺpec, ktorý bude slúžiť ako zástupný objekt pre vypočítanú hodnotu.
Teraz máme všetko na mieste, ktoré budeme potrebovať na podporu našej vlastnej správy o starnutí. Všetko, čo zostáva, je vytvoriť našu šablónu XSL, nahrať ju do knižnice štýlov lokality a prepojiť ju s naším zobrazením zoznamu. Šablóna XSL, ktorú budeme používať, bude obsahovať niektoré bežné značky vytvorené v SharePointe na generovanie zobrazenia, ako aj vlastné značky použité na prepísanie niektorých častí a výpočet požadovanej hodnoty pre nás.
Poskytnutie kreditu, kde je úver splatný, šablóny XSL na vykonanie skutočných výpočtov, ktoré používam pre toto riešenie, boli láskavo poskytnuté "swirch" na fórach MSDN: http://Social.MSDN.Microsoft.com/Forums/en-US/sharepointcustomization/Thread/aeda905b-9bc6-40c4-BD22-21306c5cb0d2/
Stiahnite si šablónu XSL (aging.zip), ktorú mám dať dokopy: https://OneDrive.Live.com/?CID=c262e8e2d59a86d9&permissionsChanged = 1&ID = c262e8e2d59a86d9! 104
Otvorenie tohto textu vo svojom obľúbenom textovom editore zobrazí sa množstvo bežných značiek XSL v SharePointe na vykresľovanie zobrazení, ak sa posúvate nadol na položku 357, zobrazí sa začiatok vlastných šablón, ktoré som pridal k značke, pričom prvá je "DateDiff" šablóna, za ktorou nasleduje "výpočet – Julian-Day" a "FieldRef_printTableCell_EcbAllowed. Days_x0020_At_x0020_Status". Toto sú naše tri šablóny, ktoré vám vytvoria a zobrazia naše výpočty v našich zobrazeniach. Ak sa chystáte používať iné názvy polí, než boli uvedené vyššie v tomto článku, budete musieť prejsť týmito šablónami a nahradiť všetky odkazy na iné názvy. Zapamätajte si, že v tomto prípade budete chcieť použiť INTERNý názov poľa, nie zobrazovaný názov.
Keď sa presvedčte, že šablóna je pripravená na odoslanie, prejdite do knižnice štýlov a nahrajte ju v priečinku šablóny so štýlmi XSL, potom skopírujte prepojenie na súbor. Umožní nám to jednoducho vykonať zmeny neskôr, alebo ju môžete pridať do rôznych častí lokality.
Potom prejdite do zoznamu a vyberte zobrazenie, ktoré ste predtým vytvorili v tomto článku. V ponuke Akcie lokality kliknite na položku Upraviť stránku.
Vyhľadajte webovú časť Zobrazenie zoznamu na stránke a otvorte ponuku webovej časti kliknutím na malú šípku smerujúcu nadol v pravom hornom rohu. V tejto ponuke vyberte položku upraviť webovú časť.
Otvorí sa vám ponuka webovej časti na pravej strane okna prehliadača.
Kliknite na položku + v časti rôzne a vyhľadajte vlastnosť XSL Link.
Prilepte prepojenie na súbor XSL v knižnici štýlov, ktoré ste predtým skopírovali (môže to byť relatívny alebo absolútny odkaz).
Kliknutím na tlačidlo OK uložte zmeny a potom kliknite na tlačidlo zastaviť úpravy na páse s nástrojmi "strana" v hornej časti stránky.
Ak je všetko správne nakonfigurované, mali by ste teraz vidieť čísla v stĺpci "dni v stave".
A konečne, tu je to, ako by to vyzeralo s niektorými testovacími údajmi rôznych dátumov:
Súhrn:
K dispozícii je: pekne formátovaný, robustný a lepší spôsob, ako vytvoriť zostavu starnutia v SharePointe., doplňte jednoduchou implementáciou bez kódu. Toto je pomerne málo potenciálnych aplikácií okrem prípadu použitia, ktoré sme tu preskúmali. Ďalší bežný scenár pre tento typ zostavy sa priloží k zoznamu úloh, aby ste videli, ako dlho sa už vytvorila úloha na prvý pohľad.
Užite si to!
--Justin
Justin Joyce, LANtek
Komentáre
Chýbajúce
kroky 10/8/2012 3:51 AM OK sledovali sme kroky, ale musí existovať niečo, čo chýba – ako bude XSL vedieť, ktorý dátum sa má použiť, alebo pole, do ktorého chcete pridať dni od začiatku? pri zmeškaní krokov ju nenávidieť.No-Code, súhlasila!
8/30/2012 12:12 PM Súhlasím – nemyslím si, že sa to naozaj počíta ako "žiadny kód". Zaujímavé je, že prostredníctvom niektorých Screwup SharePointu mám funkčný vypočítavaný stĺpec s použitím dneška... nie ste si istí, ako alebo prečo, pretože nemôžem si to urobiť znova, ale ten je stále tam a funguje.Vzorec pre vypočítavaný stĺpec dní v stave?
5/2/2012 7:39 AM Justin – Aký je vzorec, ktorý ste použili pre svoj stĺpec "dni v stave" (stĺpec zástupný symbol)? Bol to "= dnes"?SharePoint 2007
12/2/2011 11:29 AM V súčasnosti sa Nepokúšam použiť toto riešenie na SharePoint 2007, ale v ňom sa pozerám. Bohužiaľ nie je k dispozícii žiadna vlastnosť XslLink na webe prostredníctvom používateľského rozhrania.Great post
11/30/2011 9:53 AM Dobrý deň, Great post. Používam SharePoint 2007. Nemám sekciu Misc, ako je uvedené vyššie. Máte kroky týkajúce sa konfigurácie SP2007? ďakujem.Re: riešenie bez kódu: Zobrazenie dní od poslednej zmeny
položky zoznamu SharePointu 10/11/2011 8:24 AM Ahoj Chris. Veľké nájsť! Chystám sa pozrieť na to, čo ste uverejnili dúfajme neskôr a uvidíme, či môžem Toto riešenie trochu robustnejšie. som rada, že sa vám páčil príspevok a som veľmi rada, že ste boli schopní nájsť riešenie k Európskemu formátu dátumu. :) -JustinRiešenie pre európske formáty https://sharepointbydummies.wordpress.com/2011/07/13/possible-work-around-to-date-Format-Issue-SharePoint-2010/
dátumu 10/11/2011 6:45 AM Ahoj opäť Justin, FYI, našiel som riešenie problému, ktorý som už spomenul na tejto stránke,Európske formáty
dátumu 10/7/2011 3:59 AM Dobrý deň, Justin, Toto je naozaj dobré riešenie vďaka a len to, čo som strávil posledné dva dni, ktoré hľadáte. Mám však trochu problém s tým a dúfal som, že by ste mi pomohli. Zmenili sme svoj kód tak, aby calcultate počet dní, kým sa niečo nestane, a nie od toho, prepnutím premenných v poslednom rade funkcie "DateDiff"; <xsl: value-of Select = "$JulianToday-$JulianStartDate" ></xsl: hodnota-z> Avšak som len schopný dostať sa k caclulate rozdielu správne polovicu času. Napríklad s týmto dátumom (formát DD/MM/rrrr); 30/12/2011 Vypočítava sa správne, ale s týmto dátumom (rovnaký formát) 12/10/2011 Vypočíta sa, ako keby to bolo 10-dec-2011, namiesto 12-ZKÚ-2011. Pokúsil som sa jednoducho zmeniť umiestnenie hodnôt dňa a mesiaca v premennej "JulianStartDate", ako je tento; <xsl: s-param Name = "mesiac" Select = "podreťazec (ddwrt: FormatDateTime (String ($StartDate), 1033;" RRRRMMDD "), 7; 2)"/> <xsl: s-param Name = "Day" Select = "podreťazec (ddwrt: FormatDateTime (String ($StartDate), 1033;" RRRRMMDD "), 5; 2)"/> Problém s druhým dátumom sa však opravil, ale potom bol nesprávny pre prvý dátum. Snažil som sa tiež zmeniť FormatDateTime hovory na používanie európskych LCID a rôznych zmien v poslednom parametri FormatDateTime (napríklad ddMMyyyy, MMddyyyy) s príslušnými úpravami polohových parametrov podreťazca bez úspechu. Ja by som veľmi ocenil všetky rady, ktoré môžete ponúknuť. Vďaka, ChrisBez kódu
9/21/2011 4:27 AM Nemyslím si, že XSL sa kvalifikuje ako riešenie bez kódu, pretože pochopenie jazyka XSL nie je pre každého, ale nezahŕňa programovanie. Okrem toho: príjemné riešenie, Ďakujeme.