Решение без код: Показване на дните, откакто последно е променен елемент от списък
Applies ToSharePoint в Microsoft 365 SharePoint в Microsoft 365 Small Business

чрез Джъстин Джойс, LANtek

Забележка: Тази статия е част от колекция от публикации от четири години на страницата Получете точка блог за крайните потребители на SharePoint.

Общ преглед: персонализирани отчети за стареене без код

Една от често изискваните функционални части на сайт на SharePoint е отчет за стареене за задачи или елементи от списък. С други думи, колко дни/месеци е било, тъй като този елемент от списък е бил променен за последно?

На пръв поглед това изглежда доста проста заявка. В края на краищата, имаме дати за създаване и промяна на елементи, ние имаме възможността да складираме потребителски дати, когато някои промени в елементите се провеждат чрез приемници на събития. Ние имаме изчисляеми колони, където можем да включваме формули, подобни на Excel, за да работим с нашата информация. Това изглежда като доста прав преден план. Ние изберете поле за дата, създаване на изчисляема колона и след това направете нещо по-различно от [DateField] – [днес]. Ах, не толкова бързо все пак! Тъй като всеки, който е опитал тази "проста" задача, знае, че опитвате да използвате нещо подобно на [Today] в изчисляема колона предизвиква проблеми. Опитайте да вмъкнете [Today] в полето за формула на изчисляемата колона ще ви даде съобщение за грешка, подобно на това:

Съобщение за грешка

Защо е това? Ами, има общо с начина, по който се изчисляват изчисляемите колони.

Нека направим проста формула като пример:

= If ( [Колона1] <= [Колона2], "OK", "не е OK")

Всичко това казва е, че ако Колона1 е по-малко или равно на Колона2, тогава Покажи OK, в противен случай не се показва OK. Това е доста типична основна формула за изчисляема колона и тя прави основно предположение за елемента от списъка, който съдържа тези колони: стойностите за Колона1 и Колона2 никога няма да могат да се променят без събитие за актуализиране в елемента от списъка.

Точно така, изчисляемите колони ще се преизчисляват само когато Списъкът се актуализира (или създаде), тъй като приемат, че информацията, която изчислявате, се съдържа в самия елемент. Това създава проблем, когато се опитвате да използвате нещо, което се променя независимо от полетата на елемента, като например днешната дата.

Сега не бях в събранието, където те решиха, че това е начинът, по който ще функционират изчисляемите колони, но ако трябва да направя образован предположение, че ще предположа, че те функционират по този начин за изпълнение. Представете си, че сте имали списък с няколко хиляди елемента, всеки от които е съдържал изчисляема колона, която е необходима за актуализиране на "живо". Това означава, че даден механизъм, може би задание за таймер, ще трябва да превърти през всеки елемент, който се съдържа в тази изчисляема колона, толкова често и да актуализира нейната стойност. Това може да е извънредно данъчно облагане по отношение на производителността, тъй като с по-големи разполагания тази задача може постоянно да се изпълнява и променя. Това е само мое предположение, но е доста разумно, ако се замислите.

Има някои предложения за подобни решения, плаващи около там, които включват разиграване на SharePoint, за да приемете днешната стойност, като първо създадете колона с име "днес", а след това я добавите към вашата формула, а след това я изтриете. Те са много добри и полезни, но помнете това, което ви казах, когато се актуализират изчисляеми колони. Тази стойност ще се промени само когато елементът е актуализиран, което означава, че вашите стойности скоро ще бъдат неправилни, особено в случай на изчисляване на ден.

Видях други хора, използващи умно JavaScript, за да запишат стойностите на страницата. Това ще работи също, но съм доста категорично против сценария на клиента, когато той може да бъде избегнат.

Реализация

И така, какво да направя? Изчисляеми колони са извън въпроса за т. нар "летливи" функции, като днешния ден. Възможно е да развием някакъв потребителски код, за да се погрижим за това, като изчисляема колона, задание за таймер или планиран процес, за да се появи и да актуализираме всеки отделен елемент, който има нужда от това изчисление. Това ни връща към проблема с производителността, която споменах в последния абзац, и освен това е чупливо решение, което би било много конкретно за въпросния сайт/списък/колона. В горния край на тези две тревоги ще трябва да намерите и изперкал човек, като например себе си, който знае как да го кодирате и да го убедите да разработи това решение вместо вас. Но има и по-лесен начин!

Ако имате права за създаване на полета и редактиране на страници във вашия сайт и имате малко познания за XSLT и създаване на изгледи, можете да сглобите XSL шаблон, който може да бъде включен в списъчен изглед, и ще изчисли точно стойността ви всеки път, когато се изисква страницата. Този сценарий премахва нашата загриженост за работата и не изисква да бъде разработен и разгърнат потребителски код чрез решение.

Идеалната. И така, как да го направим?

  1. Създайте или изберете полето, което ще действа като наш източник. Той трябва да бъде тип дата.

  2. Създайте нашата област, която ще действа като контейнер за изчислената стойност.

  3. Добавете тези полета към тип съдържание и добавете този тип съдържание към списък.

  4. Създайте изглед на този списък, съдържащ колоните източник и контейнер.

  5. Качване на XSL шаблона в библиотеката със стилове.

  6. Задайте свойството "XSL връзка" за уеб частта "списъчен изглед" чрез потребителския интерфейс.

  7. Успех!

Нека разгледаме примерен казус за използване и преминете през изпълнението. Наш клиент искаше изглед на основния списък, който ще им каже колко време определен елемент от списък е седял в състоянието си. Този списък съдържа потребителски тип съдържание на сайт, който е извлечен от типа на елемента и е добавен към списъка. Вече има приемник за събития, който улавя всеки път, когато полето за състояние в елемента от списъка е променено и е записал тази дата в колона, наречена "състояние на дата на промяна". Не се изисква всичко това окабеляване и може да бъде направено с всяко поле за дата (това е нашата имплементация, но не се колебайте да експериментирате). Минималният минимум, от който се нуждаете, е полето за полета за дата и полето контейнер, за да задържите изчисленията си (повече за това в следващия абзац), добавени към вашия списък, въпреки че предлагам да използвате колоните на сайта и типовете съдържание на сайта, в случай че искате да използвате повторно това решение на други места във вашия сайт.

Така че ние имаме нашата дата източник, който можем да използваме в нашите изчисления спрямо днешната дата. Сега можем да създадем колона на сайт по избор, която да се използва като контейнер за нашата изчисляема стойност. В този случай реших да използвам изчисляема колона, тъй като тя няма да може да се променя в новите или редактираните формуляри, но може да бъде избрана за показване в изгледите, тъй като не искаме потребителите да въвеждат произволни стойности в тази колона. Може да е объркващо защо не се показва в изгледите и т. н.

Сега, след като имаме нашата колона на сайта, ние можем да я добавим към нашите типове съдържание, които ще се използват в списъка. След това трябва да създадем наш изглед, който по-късно ще бъде персонализиран чрез нашата XSLT трансформация. Уверете се, че сте създали стандартен изглед, който съдържа колоната "източник на дати" и вашата нова изчисляема колона, която ще действа като контейнер за изчислената стойност.

Сега разполагаме с всичко, което ни е необходимо, за да поддържаме нашия потребителски доклад за стареене. Остава само създаването на нашия XSL шаблон, качването му в библиотеката със стилове на сайта и свързването към нашия списъчен изглед. XSL шаблонът, който ще използваме, ще съдържа известна нормална корекция, генерирана от SharePoint, за генериране на изгледа, както и собствената ни коректура по избор, използвана за замести някои части от това и изчисли желаната стойност за нас.

Даване на кредит, при който кредитът е дължим, XSL шаблоните за извършване на действителните изчисления, които използвам за този разтвор, се предоставят благосклонно от "swirch" във форумите на MSDN: http://Social.MSDN.Microsoft.com/forums/EN-US/sharepointcustomization/Thread/aeda905b-9bc6-40c4-bd22-21306c5cb0d2/

Изтегляне на XSL стиловия интерфейс (aging.zip) имам взети заедно, разположени тук: HTTPS://OneDrive.Live.com/?CID=c262e8e2d59a86d9&permissionsChanged = 1&ID = c262e8e2d59a86d9! 104

Отварянето на това в любимия ви текстов редактор ще видите много от нормалната XSL коректура в SharePoint за рендиране на изгледите, Ако продължавате да превъртате надолу до ред 357, ще видите началото на шаблони по избор, които съм добавил към коректурата, като първият от тях е шаблонът "DateDiff", следван от "изчисли-Julian-Day" и "FieldRef_printTableCell_EcbAllowed. Days_x0020_At_x0020_Status". Това са нашите три шаблона, които ще направят и показват нашите изчисления в нашите изгледи. Ако ще използвате различни имена на полета, отколкото са посочени по-горе в тази статия, ще трябва да преминете през тези шаблони и да заместите препратките към другите имена. Не забравяйте, че за това ще искате да използвате ВЪТРЕШНОТО име на полето, а не показваното име.

След като сте сигурни, че шаблонът е готов за работа, отидете до библиотеката със стилове и го качете под папката "XSL листове със стилове", след което копирайте връзката към файла. Това ще ни помогне да направим лесно промените по-късно, или да го добавим към различни части на сайта, както ни е угодно.

След това отидете в списъка и изберете изгледа, който създадохте по-рано в тази статия. От менюто "действия за сайта" щракнете върху "Редактиране на страница".

Команда "Редактиране на страница" в менюто "Действия за сайта"

Намерете уеб частта за списъчен изглед на страницата и отворете менюто "уеб част", като щракнете върху малката стрелка надолу в горния десен ъгъл. От това меню изберете "Редактиране на уеб част".

Командата за редактиране на уеб част в менюто "Уеб част"

Това ще отвори менюто на уеб частта от дясната страна на прозореца на браузъра.

Меню на уеб компонент

Щракнете върху раздела + за секцията "разни" и намерете свойството "XSL връзка".

Свойството "XSL връзка" в менюто "Уеб част"

Поставете връзката към XSL файла в библиотеката със стилове, която сте копирали по-рано (това може да бъде относителна или абсолютна връзка).

Поставена връзка към XSL файл

Щракнете върху "OK", за да запишете промените, след което щракнете върху бутона "край на редактирането" в лентата "страница" в горната част на страницата.

Бутон за спиране на редактирането на раздела "Страница"

Ако всичко е конфигурирано правилно, сега би трябвало да видите числа във вашата колона "дни при положение".

Колона "Дни в състоянието", показваща число

И накрая, Ето как би изглеждало това с някои тестови данни от различни дати:

Отчет за стареене, който показва тестови данни

Обобщение:

Ето го: добре форматиран, надежден и по-добре функциониращ начин за създаване на отчет за стареене в SharePoint Това има доста потенциални приложения настрана от този случай за използване, който изследваме тук. Друг обичайен сценарий за този тип отчет го прикачва към списък със задачи, така че да можете да видите колко време е било, откакто е създадена задача с един поглед.

Наслаждавайте се!

--Джъстин

Джъстин Джойс, LANtek

Коментари

Липсващи стъпки 10/8/2012 3:51 ч . OK, следвах стъпките, но трябва да има нещо, което не може да се използва – как да се покаже XSL коя дата да бъде използвана или кое поле да се добавят дните след това? мразя, когато са пропуснати стъпки.

Без код, договорено! 8/30/2012 12:12 ч . Съгласен съм-не мисля, че това наистина се брои за "без код".Интересното е, че през някои отчасти на SharePoint имам работеща изчисляема колона с помощта на днешния... не сте сигурни как или защо, защото не мога да го направя отново, но този е все още там и работи.

Формула за изчисляема колона "дни в състояние"? 5/2/2012 7:39 ч . Джъстин – каква е формулата, която сте използвали за вашите "дни при състоянието" изчисляема колона на сайта (колона контейнер)? Беше ли "= днес"?

SharePoint 2007 12/2/2011 11:29 ч . В момента не съм опитал да приложа този разтвор към SharePoint 2007, но търся в него. За съжаление няма свойство XslLink, което се появява на уеб частта чрез ИНТЕРФЕЙСА.

Great Post 11/30/2011 9:53 ч . Здравейте, Great Post.Използвам SharePoint 2007.Не разполагам с Разни секции, както е посочено по-горе.Имате ли стъпки за конфигуриране на SP2007? Благодаря.

Re: No-Code Solution: Показване на дните, откакто последно е променен елемент от списък на SharePoint 10/11/2011 8:24 ч . Hi Chris.Великата намиране! ще погледна какво сте написали, надявайки се по-късно днес, и вижте дали мога да направя това решение малко по-силно.Радвам се, че ви харесва поста, и много се радвам, че успяхте да намерите решение за Европейския формат за дата. :) -Джъстин

Решение за формати за европейски дати 10/11/2011 6:45 ч . Hi отново Джъстин, FYI, намерих решение за проблема, който споменах по-рано на тази страница; HTTPS://sharepointbydummies.WordPress.com/2011/07/13/possible-Work-Around-to-Date-Format-Issue-SharePoint-2010/

Европейски формати за дата 10/7/2011 3:59 ч . Hi Джъстин, Това е наистина добро решение, което ви благодари и е точно нещо, което прекарах последните два дни, търсейки! Все пак имам проблем с това и се надявах, че можете да ми помогнете.Измених леко кода ви, за да calcultate броя на дните, докато не се случи нещо, вместо това, като превключва променливите в последния ред на функцията "DateDiff"; <XSL: Value-Select = "$JulianToday-$JulianStartDate" ></XSL: Value-of> Все пак мога да го настигна, за да caclulate разликата правилно през половината от времето. Например с тази дата (формат дд/мм/гггг); 30/12/2011 Изчислява се правилно, но с тази дата (същия формат) 12/10/2011 Изчислява се като If If 10-Dec-2011 вместо 12-Oct-2011.Опитах просто да сменя позицията на дните и месецните стойности в променливата "JulianStartDate", ето така; <XSL: with-параметри за име = "месец" изберете = "подниз (ddwrt: FormatDateTime (низ ($StartDate); 1033;" ГГГГММДД "); 7; 2)"/> <XSL: with-параметри име = "ден" изберете = "подниз (ddwrt: FormatDateTime (низ ($StartDate); 1033;" ГГГГММДД "); 5; 2)"/> И това коригира проблема с втората дата, но после е неправилна за първата дата! Изпробвах и промяна на разговорите на FormatDateTime, за да използвам европейските LCIDs и различни промени в последния параметър на FormatDateTime (напр. ддммгггг, MMddyyyy) със съответните настройки на Позиционните параметри без успех.Бих оценила всеки съвет, който можете да предложите.Благодарим ви, Крис

Без код 9/21/2011 4:27 ч . Не мисля, че XSL се квалифицира като решение "не-код", тъй като разбирането на XSL езика не е за всеки – но не включва програмиране. Освен това: хубаво решение, Благодарим ви!

Нуждаете ли се от още помощ?

Искате ли още опции?

Разгледайте ползите от абонамента, прегледайте курсовете за обучение, научете как да защитите устройството си и още.

Общностите ви помагат да задавате и отговаряте на въпроси, да давате обратна връзка и да получавате информация от експерти с богати знания.