Platí pro
SharePoint v Microsoftu 365 SharePoint v Microsoftu 365 Small Business

Justin Joyce, LANtek

Poznámka: Tento článek je součástí kolekce příspěvků ze čtyř let blogu Get the Point pro koncové uživatele SharePointu.

Přehled: Vlastní sestavy stárnutí bez kódu

Jednou z často požadovaných funkčních částí sharepointového webu je sestava stárnutí pro úkoly nebo položky seznamu. Jinými slovy, kolik dní/měsíců uplynulo od poslední změny této položky seznamu?

Zdá se, že se jedná o velmi jednoduchý požadavek. Koneckonců, máme data pro položky, které se vytvářejí a mění, máme možnost ukládat vlastní data, když určité změny položek proběhnou prostřednictvím příjemců událostí. Vypočítali jsme sloupce, do kterých můžeme zahrnout vzorce podobné Excelu pro práci s našimi informacemi. Zdá se to jako docela přímá nabídka. Vybereme pole s kalendářním datem, vytvoříme počítaný sloupec a pak vytvoříme vzorec na řádcích [DateField] – [Today]. Ale ne tak rychle! Jak ví každý, kdo se pokusil o tento "jednoduchý" úkol, pokus použít v počítaném sloupci něco jako [Dnes] způsobuje problémy. Zkuste vložit [Dnes] do pole vzorce počítaný sloupec a zobrazí se chybová zpráva podobná této:

Chybová zpráva

Proč? Má to co do či či onoho způsobu výpočtu počítaných sloupců.

Jako příklad si vezměme jednoduchý vzorec:

= KDYŽ( [Sloupec1]<=[Sloupec2], "OK", "Není v pořádku")

Všechno to znamená, že pokud je Sloupec1 menší než nebo roven sloupci2, zobrazí se OK, jinak se nezobrazí OK. Toto je poměrně typický základní vzorec pro počítaný sloupec a vytváří základní předpoklad o položce seznamu, která obsahuje tyto sloupce: Hodnoty pro Sloupec1 a Sloupec2 se nikdy nebudou moct změnit bez události Update u položky seznamu.

Správně, počítané sloupce se přepočítávají jenom při aktualizaci (nebo vytvoření) seznamu, protože předpokládají, že informace, které počítáte, jsou obsaženy v samotné položce. To vytvoří problém, když se pokoušíte použít něco, co se změní nezávisle na polích položky, například dnešní datum.

Teď jsem nebyl na schůzce, kde se rozhodli, že to je způsob, jakým by počítané sloupce fungovaly, ale kdybych musel udělat poučený odhad, předpokládám, že fungují tímto způsobem pro výkon. Představte si, že byste měli seznam několika tisíc položek, z nichž každá obsahovala počítaný sloupec, který potřeboval "živou" aktualizaci. To by znamenalo, že určitý mechanismus, třeba úloha časovače, by musel iterovat každou položku, která obsahovala tento počítaný sloupec, a aktualizovat jeho hodnotu. To může být z hlediska výkonu velmi zdanné, protože při větších nasazeních může být tato úloha neustále spuštěná a může se měnit. To je jen můj odhad, ale dává to docela smysl, pokud se nad tím zamyslíte.

Existuje několik návrhů pro podobná řešení, která se tam nacházejí, a zahrnují oklamat SharePoint, aby přijal hodnotu Dnes tím, že nejprve vytvoří sloupec s názvem Dnes, pak ho přidá do vzorce a pak ji odstraní. Všechno je v pořádku a dobře, ale pamatujte si, o čem jsem řekl, když se aktualizují počítané sloupce. Tato hodnota se změní pouze při aktualizaci položky, což znamená, že vaše hodnoty budou brzy nesprávné, zejména v případě výpočtu dne.

Viděl(a) jsem, jak ostatní používají chytrý JavaScript k zápisu hodnot na stránku. To by také fungovalo, ale jsem do značné míry kategoricky proti klientskému skriptu, když se tomu dá vyhnout.

Implementace:

Tak co dělat? Počítané sloupce nejsou u takzvaných "nestálých" funkcí, jako je dnes, mimo otázku. Je možné, že bychom mohli vyvinout nějaký vlastní kód, který by se o to postaral za nás, jako je vypočítaný sloupec, úloha časovače nebo naplánovaný proces a aktualizovat každou položku, která potřebuje tento výpočet provést. To nás vrací k problému výkonu, který jsem zmínil v posledním odstavci, a navíc je to křehké řešení, které by bylo vysoce specifické pro danou stránku / seznam / sloupec. Kromě těchto dvou obav byste také museli najít nerdyho chlápka, jako jsem já, který ví, jak kódovat a přesvědčit ho, aby pro vás vyvinul toto řešení. Ale existuje jednodušší způsob!

Pokud máte oprávnění k vytváření polí a úpravám stránek na webu a máte trochu znalostí o XSLT a vytváření zobrazení, můžete sestavit šablonu XSL, která může být zahrnuta do zobrazení seznamu a věrně vypočítá hodnotu při každé žádosti o stránku. Tento scénář eliminuje naše obavy ohledně výkonu a nevyžaduje vývoj a nasazení vlastního kódu prostřednictvím řešení.

Skvěle. Tak jak to uděláme?

  1. Vytvořte nebo vyberte pole, které bude fungovat jako náš zdroj. Musí se jednat o typ data.

  2. Vytvořte pole, které bude fungovat jako zástupný symbol pro počítanou hodnotu.

  3. Přidejte obě tato pole do typu obsahu a přidejte tento typ obsahu do seznamu.

  4. Vytvořte zobrazení tohoto seznamu obsahujícího zdrojový i zástupný sloupec.

  5. Nahrajte šablonu XSL do knihovny stylů.

  6. Nastavte vlastnost XSL Link pro webovou část Seznam prostřednictvím uživatelského rozhraní.

  7. Hotovo.

Pojďme se podívat na příklad případu použití a projít si implementaci. Náš zákazník chtěl zobrazit svůj hlavní seznam, který by mu řekl, jak dlouho seděla konkrétní položka seznamu v jejím stavu. Tento seznam obsahoval vlastní typ obsahu webu odvozený z typu Položka a přidaný do seznamu. Příjemce události již byl na místě, který zaznamenává každou změnu stavového pole v položce seznamu a uloží toto datum do sloupce s názvem "Datum změny stavu". Všechny tyto zapojení není vyžadováno a lze provést s libovolným datem pole (to se prostě stane, že je to naše implementace, ale neváhejte experimentovat). Minimální minimum, které budete potřebovat, je pole zdrojového data a zástupné pole pro uložení výpočtu (více o tom v dalším odstavci) přidané do seznamu, i když doporučujeme použít sloupce webu a typy obsahu webu v případě, že chcete toto řešení znovu použít na jiných místech na vašem webu.

Máme tedy zdrojové datum, které můžeme použít ve výpočtu oproti dnešnímu datu. Teď můžeme vytvořit vlastní sloupec webu, který se použije jako kontejner pro naši počítanou hodnotu. V tomto případě jsem se rozhodl(a) použít počítaný sloupec, protože ho nebude možné změnit v nových formulářích nebo formulářích upravit položku, ale dá se vybrat pro zobrazení, protože nechceme, aby uživatelé do tohoto sloupce zadávají libovolné hodnoty. Může být matoucí, proč se nezobrazuje v zobrazení atd.

Když teď máme sloupec webu, můžeme ho přidat k typům obsahu, které se použijí v našem seznamu. Dále musíme vytvořit zobrazení, které se později přizpůsobí naším XSLT. Ujistěte se, že jste vytvořili standardní zobrazení obsahující zdrojový sloupec kalendářního data a nový počítaný sloupec, který bude fungovat jako zástupný symbol pro počítanou hodnotu.

Teď máme všechno, co budeme potřebovat k podpoře vlastní sestavy stárnutí. Zbývá jen vytvořit šablonu XSL, nahrát ji do knihovny stylů webu a propojit ji se zobrazením seznamu. Šablona XSL, kterou budeme používat, bude obsahovat normální kód vygenerovaný SharePointem pro vygenerování zobrazení a také naše vlastní značky použité k přepsání určitých částí a výpočtu požadované hodnoty pro nás.

Pokud je kredit splatný, šablony XSL pro provádění skutečných výpočtů, které používám pro toto řešení, byly laskavě poskytnuty "swirch" na fórech MSDN:http://social.msdn.microsoft.com/Forums/en-US/sharepointcustomization/thread/aeda905b-9bc6-40c4-bd22-21306c5cb0d2/

Stáhněte si šablonu stylů XSL (aging.zip), která jsem sestavila, najdete tady:https://OneDrive.live.com/?cid=c262e8e2d59a86d9&permissionsChanged=1&id=C262E8E2D59A86D9!104

Když to otevřete ve svém oblíbeném textovém editoru, uvidíte spoustu normálních značek SharePoint XSL pro vykreslování zobrazení. Pokud se posunete dolů na řádek 357, uvidíte začátek vlastních šablon, které jsem přidal do kódu, první z nich je "DateDiff" šablona následovaná "calculate-julian-day" a "FieldRef_printTableCell_EcbAllowed.Days_x0020_At_x0020_Status". Toto jsou naše tři šablony, které vytvoří a zobrazí naše výpočty v našich zobrazeních. Pokud budete používat jiné názvy polí, než jste zadali dříve v tomto článku, budete muset tyto šablony projít a nahradit všechny odkazy na ostatní názvy. Nezapomeňte, že k tomu budete chtít použít INTERNÍ název pole, a ne zobrazovaný název.

Jakmile budete spokojení, že je šablona připravená k použití, přejděte do knihovny stylů a nahrajte ji do složky Šablon stylů XSL a zkopírujte odkaz na soubor. To nám umožní později snadno provést změny nebo ho podle potřeby přidat do různých částí webu.

Pak přejděte do seznamu a vyberte zobrazení, které jste vytvořili dříve v tomto článku. V nabídce Akce webu klikněte na Upravit stránku.

Příkaz Upravit stránku v nabídce Akce webu

Najděte webovou část Seznam na stránce a kliknutím na malou šipku dolů v pravém horním rohu otevřete nabídku Webová část. V této nabídce vyberte Upravit webovou část.

Příkaz Upravit webovou část v nabídce Webová část

Otevře se nabídka webové části na pravé straně okna prohlížeče.

Nabídka Webová část

V části Různé klikněte na + a vyhledejte vlastnost XSL Link.

Vlastnost Odkaz na data XSL v nabídce Webová část

Vložte odkaz na soubor XSL v knihovně stylů, který jste si předtím zkopírovali (může se jednat o relativní nebo absolutní odkaz).

Odkaz na soubor XSL vložený do

Kliknutím na OK uložte změny a pak klikněte na tlačítko Ukončit úpravy na pásu karet Stránka v horní části stránky.

Tlačítko Ukončit úpravy na kartě Stránka

Pokud bylo všechno správně nakonfigurované, měla by se teď ve sloupci Stav dnů zobrazovat čísla.

Sloupec stavu ke dni zobrazující číslo

A nakonec, jak by to vypadalo s některými testovacími daty různých dat:

Sestava stárnutí zobrazující testovací data

Shrnutí:

Je to pěkně formátovaný, robustní a výkonnější způsob, jak vytvořit sestavu stárnoucí v SharePointu. Kromě jednoho případu použití, který jsme zde prozkoumali, je poměrně málo potenciálních aplikací. Dalším běžným scénářem pro tento typ sestavy je její připojení k seznamu úkolů, abyste na první pohled viděli, jak dlouho uplynulo od vytvoření úkolu.

Bavte se!

--Justin

Justin Joyce, LANtek

Komentáře

Chybějící kroky 8. 10. 2012 3:51 Ok, postupoval jsem podle kroků, ale musí tam něco chybět - jak bude XSL vědět, které datum použít, nebo jaké pole přidat dny od té doby? nesnáší to, když jsou zmeškané kroky.

Bez kódu, souhlasím! 30.8.2012 12:12 Souhlasím - nemyslím si, že se to opravdu počítá jako "žádný kód".Zajímavé je, že prostřednictvím nějakého šroubování SharePointu mám pracovní počítaný sloupec pomocí dnes... Nevím, jak nebo proč, protože nemůžu dostat to udělat znovu, ale ten je stále tam a pracuje.

Vzorec pro počítaný sloupec Počet dnů ve stavu? 2. 5. 2012 7:39 Justin – jaký vzorec jste použili pro počítaný sloupec webu Days At Status (zástupný sloupec)? Bylo to "=dnes"?

SharePoint 2007 2. 12. 2011 11:29 V současné době jsem se nepokusil použít toto řešení na SharePoint 2007, ale hledám v něm. Ve webové části se bohužel v uživatelském rozhraní nezobrala žádná vlastnost XslLink.

Velký příspěvek 30.11.2011 9:53 Dobrý den Skvělý příspěvek.Používám SharePoint 2007.Nemám oddíl Misc, jak je uvedeno výše.Máte kroky pro konfiguraci aktualizace SP2007? Děkuju.

Re: Řešení bez kódu: Zobrazení dnů od poslední změny položky seznamu SharePointu 11. 10. 2011 8:24 Ahoj Chrisi.skvělé hledání! Chystám se podívat na to, co jste publikovali doufejme později dnes a uvidíte, jestli mohu toto řešení udělat trochu robustnější.Jsem rád, že se vám příspěvek líbil, a jsem velmi rád, že jste mohli najít řešení pro evropský formát data. :) -Justin

Řešení pro evropské formáty kalendářních dat 11. 10. 2011 6:45 Ahoj znovu Justine, FYI, našel jsem řešení problému, který jsem zmínil dříve na této stránce;https://sharepointbydummies.wordpress.com/2011/07/13/possible-work-around-to-date-format-issue-sharepoint-2010/

Evropské formáty kalendářních dat 7. 10. 2011 3:59 Ahoj Justine, To je opravdu dobré řešení, díky, a právě to, co jsem strávil poslední dva dny hledáním! Ale mám s tím trochu problém a doufal jsem, že mi pomůžeš.Mírně jsem změnil váš kód tak, aby počítal počet dní, než se něco stane, spíše než od té doby, přepnutím proměnných na posledním řádku funkce "DateDiff"; <xsl:value-of select="$JulianToday - $JulianStartDate"></xsl:value-of> Nicméně jsem schopen jen dostat to, aby správně kakat rozdíl správně polovinu času. Například s tímto datem (formát dd/MM/rrrr); 30/12/2011 Počítá se správně, ale s tímto datem (ve stejném formátu). 10. 12. 2011 Počítá se jako kdyby 10-Dec-2011 místo 12-Oct-2011.Zkusil jsem jednoduše přepínat pozice hodnot dne a měsíce v proměnné "JulianStartDate", jako je tato; <xsl:with-param name="Month" select="substring(ddwrt:FormatDateTime(string($StartDate); 1033; 'rrrrrrMdd');7,2)"/> <xsl:with-param name="Day" select="substring(ddwrt:FormatDateTime(string($StartDate); 1033; 'rrrrrrMdd');5,2)"/> A to opravilo problém s druhým datem, které však nebylo správné pro první datum! Zkusil jsem také změnit volání FormatDateTime tak, aby používala evropské identifikátory LCID a různé změny posledního parametru FormatDateTime (např. ddMMyyyy, MMddyyyy) s příslušnými úpravami pozičních parametrů podřetězců bez úspěchu.Velmi bych ocenil jakoukoli radu, kterou můžete nabídnout.Dík Chris

Bez kódu 21. 9. 2011 4:27 Nemyslím si, že XSL se kvalifikuje jako řešení bez kódu, protože pochopení jazyka XSL není pro každého , ale nezahrnuje programování. Kromě toho: Pěkné řešení, děkuji!

Potřebujete další pomoc?

Chcete další možnosti?

Prozkoumejte výhody předplatného, projděte si školicí kurzy, zjistěte, jak zabezpečit své zařízení a mnohem více.