Przejdź do głównej zawartości
Pomoc techniczna
Zaloguj się przy użyciu konta Microsoft
Zaloguj się lub utwórz konto.
Witaj,
Wybierz inne konto.
Masz wiele kont
Wybierz konto, za pomocą którego chcesz się zalogować.
Rozwiązanie bez kodu: wyświetlanie dni od ostatniej zmiany elementu listy

przez Justin Joyce, LANtek

Uwaga: Ten artykuł jest częścią zbioru ogłoszeń od czterech lat w blogu uzyskaj dostęp do punktów końcowych programu SharePoint.

Omówienie: niestandardowe raporty wiekowania bez kodu

Jednym z często żądanych fragmentów funkcjonalnych witryny programu SharePoint jest raport chronologiczny dotyczący zadań lub elementów listy. Innymi słowy, ile dni/miesięcy było od ostatniej modyfikacji tego elementu listy?

Na powierzchni wydaje się, że jest to bardzo proste żądanie. Po upływie wszystkich terminów w przypadku tworzenia i modyfikowania elementów mamy możliwość przechowywania niestandardowych dat, gdy pewne zmiany w elementach są wykonywane za pośrednictwem odbiorców zdarzeń. Istnieją kolumny obliczeniowe, w których możemy dołączać formuły do programu Excel, które będą współpracować z naszymi informacjami. Wygląda to tak, jak całkiem proste miejsce do przodu. Wybieramy pole Date, Tworzenie kolumny obliczeniowej, a następnie wykonywanie formuł w wierszach [DateField] — [Dzisiaj]. Protokół AH, ale nie tak szybko! Ponieważ każdy, kto próbował wykonać to zadanie proste, próbuje użyć czegoś, na przykład [Dzisiaj] w kolumnie obliczeniowej, powoduje problemy. Próba wstawienia [Dzisiaj] do pola formuły kolumny obliczeniowej spowoduje wyświetlenie komunikatu o błędzie w następujący sposób:

Komunikat o błędzie

Dlaczego? Co więcej, musimy zrobić z sposobem obliczania kolumn obliczeniowych.

Przypuśćmy prostą formułę jako przykład:

= Jeżeli ( [Kolumna1] <= [Kolumna2]; "OK"; "nie OK")

Wszystkie te informację, że jeśli wartość Kolumna1 jest mniejsza niż lub równa wartości Kolumna2, wyświetlenie przycisku OK, w przeciwnym razie wyświetlenie not OK. Jest to dość typowa formuła podstawowa dla kolumny obliczeniowej i stanowi podstawowe założenie dotyczące elementu listy zawierającego następujące kolumny: wartości Kolumna1 i Kolumna2 nigdy nie będą mogły być zmieniane bez zdarzenia Update w elemencie listy.

To prawo, kolumny obliczeniowe będą ponownie obliczać tylko wtedy, gdy lista zostanie zaktualizowana (lub utworzona), ponieważ zakłada, że informacje są obliczane w samym elemencie. Powoduje to powstanie problemu, gdy próbujesz użyć zmiany niezależnie od pola elementu, takiego jak dzisiejsza data.

Teraz nie jestem w spotkaniu, w którym zdecydują, że jest to sposób, w jaki te kolumny obliczeniowe będą działać, jednak gdyby musiały być sprawnie przewidzianą, należy pamiętać, że będą one działać w ten sposób w celu uzyskania wydajności. Załóżmy, że lista kilku tysięcy elementów zawierała kolumnę obliczeniową, która wymagała aktualizacji "na żywo". Oznacza to, że niektóre mechanizmy, które mogą być zadaniem czasomierza, będą musiały wykonać iteracje każdego elementu, który zawierał tę kolumnę obliczeniową co często tak, aby zaktualizować jego wartość. Może to być niezwykle opodatkowane w zakresie wydajności, ponieważ dzięki większym rozmieszczeniam to zadanie może być stale uruchomione i można je zmieniać. To tylko moje przypuszczenie, ale jest dość sensowna, jeśli sądzisz o tym.

Istnieje kilka sugestii dotyczących podobnych rozwiązań wokół tego, co pociąga za sobą wzięcie udziału w programie SharePoint w celu zaakceptowania wartości dzisiejszej, najpierw tworząc kolumnę o nazwie dzisiaj, a następnie dodając ją do formuły, a następnie usuwając ją. Są one dobrze i dobrze, ale pamiętaj o tym, kiedy są aktualizowane kolumny obliczeniowe. Ta wartość będzie zmieniana tylko w przypadku zaktualizowania elementu, co oznacza, że wartości będą wkrótce poprawnie, szczególnie w przypadku obliczania dni.

W celu zapisania wartości na stronie były wyświetlane inne osoby korzystające z Clever JavaScript. Będzie to miało na celu, ale bardzo categorically się na skrypcie klienta, kiedy można uniknąć tego problemu.

Stosowania

Co należy zrobić? Kolumny obliczeniowe nie są pytaniami o takiej nazwie, że są to "nietrwałe" funkcje, takie jak dzisiaj. Możliwe jest opracowanie niestandardowego kodu w celu poprawienia go dla nas, takiego jak kolumna obliczana, zadanie czasomierza lub zaplanowany proces, aby uwzględnić i zaktualizować każdy pojedynczy element, który wymaga wykonania tego obliczenia. Przywracamy nam problem z wydajnością wymieniony w ostatnim akapicie, a ponadto jest to rozwiązanie Brittle, które byłoby wysoce specyficzne dla danej witryny/listy/kolumny. Na początek tych dwóch wątpliwości warto również znaleźć nerdy Guy, taki jak ja, aby uzyskać informacje o tym, jak to zrobić, i nakłonić go do opracowania tego rozwiązania. Ale jest to łatwiejszy sposób!

Jeśli masz uprawnienia do tworzenia pól i edytowania stron w witrynie, a ponadto masz trochę wiedzy na temat języka XSLT i tworzenia widoków, możesz umieścić szablon XSL, który może zostać dołączony do widoku listy, a następnie będzie on wiernie obliczać wartości za każdym razem, gdy strona zostanie zażądana. Ten scenariusz eliminuje obawy związane z wydajnością i nie wymaga opracowania i wdrażania kodu niestandardowego za pośrednictwem rozwiązania.

Czego. Jak to zrobić?

  1. Utwórz lub wybierz pole, które będzie pełnić rolę naszego źródła. Musi to być typ daty.

  2. Utwórz pole, które będzie pełnić rolę symbolu zastępczego dla obliczanej wartości.

  3. Dodaj oba te pola do typu zawartości i Dodaj ten typ zawartości do listy.

  4. Utwórz widok tej listy zawierający kolumny Źródło i symbole zastępcze.

  5. Przekaż szablon XSL do biblioteki style.

  6. Ustawianie właściwości "link XSL" składnika Web Part widoku listy za pośrednictwem interfejsu użytkownika.

  7. Sukces!

Przyjrzyjmy się przykładowi przypadków użycia i instruktażu implementacji. Nasz klient chciał wyświetlić główną listę, która poinformuje o tym, jak długo dany element listy znajdował się pod jego statusem. Ta lista zawiera niestandardowy typ zawartości witryny utworzony na podstawie typu elementu i dodany do listy. W miejscu, w którym znajduje się już odbiorca zdarzeń, który przechwytuje wszystkie pola stan w elemencie listy, a następnie Zapisano tę datę w kolumnie o nazwie "Data zmiany statusu". Wszystkie te okablowanie nie są wymagane i można je wykonać przy użyciu dowolnego pola daty (tak więc zdarza się to w naszej implementacji, ale może to robić bez eksperymentu). Do momentu wejścia w życie wymagane jest co najmniej wartość wymagana to pole daty źródłowej oraz pole symbolu zastępczego w celu przechowania obliczeń (więcej informacji na ten temat w następnym akapicie) dodanych do listy, chociaż proponuję używanie kolumn witryny i typów zawartości witryny na wypadek, gdyby można było ponownie użyć tego rozwiązania w innych miejscach witryny.

Mamy więc nasze daty źródłowe, z których możemy korzystać w obliczeniach na podstawie dzisiejszej daty. Teraz możemy utworzyć niestandardową kolumnę witryny, która będzie używana jako kontener dla naszej wartości obliczeniowej. W tym przypadku wybrano używanie kolumny obliczeniowej, ponieważ nie można jej zmienić w formularzach nowy lub edytowanie elementów, ale można ją wybrać do wyświetlenia w widokach, ponieważ nie chcemy, aby użytkownicy wprowadzali wartości w tej kolumnie. Być może jest to sposób mylący, dlaczego nie jest wyświetlany w widokach itd.

Teraz, gdy mamy naszą kolumnę witryny, możemy dodać ją do naszych typów zawartości, które będą używane w naszej liście. Następnie musimy utworzyć nasz widok, który później będzie dostosowany do naszego przekształcenia XSLT. Upewnij się, że utworzono widok standardowy zawierający kolumnę daty źródłowej, a nowa kolumna obliczeniowa będzie pełnić rolę symbolu zastępczego dla obliczonej wartości.

Teraz mamy wszystko, co będziemy wymagać obsługi niestandardowego raportu wiekowania. Wszystko, co pozostało, powoduje utworzenie naszego szablonu XSL, przekazanie go do biblioteki stylów witryny i połączenie go z naszym widokiem listy. Szablon XSL, który będzie używany, powinien zawierać niektóre normalne znaczniki generowane przez program SharePoint w celu wygenerowania widoku, a także własną adiustację niestandardową używaną w celu zastąpienia określonych części i obliczenia naszej wartości dla nas.

Doładowanie konta w przypadku doładowania, szablony XSL służące do wykonywania rzeczywistych obliczeń, których używam dla tego rozwiązania, zostały graciously dostarczone przez "swirch" na forach MSDN:
http://Social.MSDN.Microsoft.com/forums/en-us/sharepointcustomization/Thread/aeda905b-9bc6-40c4-bd22-21306c5cb0d2/

Pobierz arkusz stylów XSL (aging.zip), który został umieszczony razem:
https://OneDrive.Live.com/?CID=c262e8e2d59a86d9&permissionsChanged = 1&ID = c262e8e2d59a86d9! 104

Otwarcie tego elementu w ulubionym edytorze tekstu spowoduje wyświetlenie dużej liczby zwykłych oznaczeń XSL programu SharePoint umożliwiających renderowanie widoków, jeśli zachowasz przewijanie w dół do wiersza 357, zobaczysz początek szablonów niestandardowych, które dodałem do adiustacji, pierwszy jest szablonem "DateDiff", po którym następuje ciąg "Oblicz-juliańskim-Day" and "FieldRef_printTableCell_EcbAllowed. Days_x0020_At_x0020_Status". Są to nasze trzy szablony, które umożliwiają wykonywanie i wyświetlanie obliczeń w naszych widokach. Jeśli chcesz korzystać z innych nazw pól niż określono wcześniej w tym artykule, musisz przejść przez te szablony i zamienić odwołania na inne imiona i nazwiska. Pamiętaj, że w tym celu użyj wewnętrznej nazwy pola, a nie nazwy wyświetlanej.

Po upewnieniu się, że szablon jest gotowy do przechodzenia, przejdź do biblioteki stylów i przekaż go w folderze "arkusze stylów XSL", a następnie skopiuj link do pliku. Umożliwi to łatwe wprowadzanie zmian w późniejszym czasie lub dodawanie ich do różnych części witryny.

Następnie przejdź do listy i wybierz widok utworzony wcześniej w tym artykule. W menu Akcje witryny kliknij polecenie Edytuj stronę.

Polecenie Edytuj stronę wyświetlane w menu Akcje witryny

Znajdź składnik Web Part widoku listy na stronie i otwórz menu składnika Web Part, klikając małą strzałkę skierowaną w dół w prawym górnym rogu. Z tego menu wybierz pozycję Edytuj składnik Web Part.

Polecenie Edytuj składnik Web Part w menu składnika Web Part

Spowoduje to otwarcie menu składnika Web Part z prawej strony okna przeglądarki.

Menu składnika Web Part

Kliknij pozycję + w sekcji "różne" i Znajdź właściwość "link XSL".

Właściwość Łącze XSL w menu składnika Web Part

Wklej link do pliku XSL w bibliotece Style, który został skopiowany wcześniej (może to być link względny lub bezwzględny).

Wklejone łącze do pliku XSL

Kliknij przycisk OK, aby zapisać zmiany, a następnie kliknij przycisk "Zakończ edytowanie" na Wstążce "Strona" u góry strony.

Przycisk Zakończ edycję na karcie Strona

Jeśli wszystko zostało skonfigurowane poprawnie, należy teraz wyświetlić numery w kolumnie "dni w stanie".

Kolumna dni ze stanem wyświetlająca liczbę

Ponadto Oto, co będzie wyglądać z pewnymi danymi testowymi różnych dat:

Raport wiekowania z testowymi danymi

Podsumowanie:

Jest to: właściwego sformatowany, niezawodny i lepszy sposób tworzenia raportu wiekowania w programie SharePoint. wykonaj prostą implementacją bez kodu. W tym artykule przedstawiono kilka potencjalnych aplikacji oprócz przypadków użycia, które zostały tu omówione. Inny typowy scenariusz dla tego typu raportu jest dołączany do listy zadań, dzięki czemu można sprawdzić, jak długo jest on tworzony od razu po utworzeniu zadania.

Miłej pracy!

--Justin

Justin Joyce, LANtek

Komentarze

Brakuje
kroków 10/8/2012 3:51 AM
Po wykonaniu kroków należy wykonać te czynności, ale musi istnieć coś, w jaki sposób kod XSL wie, którego daty użyć, lub w polu, od którego ma zostać dodane dni? nie cierpisz, kiedy nie ma żadnych kroków.

Nie-kod, uzgodniono!
8/30/2012 12:12 PM
Zgadzam się — nie wyrażam tego, ile to naprawdę uważam za brak kodu.
Z jakiegoś Screwup w programie SharePoint mam w pracy kolumnę obliczeniową przy użyciu dzisiaj... nie wiesz, jak i dlaczego nie mogę go zrobić, ale jest on nadal wyświetlany i działa.

Formuła dla kolumny obliczeniowej "dni w stanie"?
5/2/2012 7:39 AM
Justin — jaka jest formuła używana w kolumnie witryny obliczeniowej "dni w stanie" (kolumna zastępcza)? Czy to "= dziś"?

SharePoint 2007
12/2/2011 11:29 AM
Obecnie nie mam jeszcze, aby zastosować to rozwiązanie do programu SharePoint 2007, ale w tym celu jest on wyświetlany. Niestety w składniku Web Part nie ma właściwości XslLink, którą podano w interfejsie użytkownika.

Dobry wpis
11/30/2011 9:53 AM
Witaj,
Dobry wpis.
Korzystam z programu SharePoint 2007.
Nie mam sekcji misc.
Czy masz kroki dla konfiguracji SP2007?
Dziękuję.

Re: rozwiązanie bez kodu: wyświetlanie dni od ostatniej zmiany
elementu listy programu SharePoint 10/11/2011 8:24 AM
Witaj Krzysztofowi.
miłe Znajdowanie!
chcę zapoznać się z tym, co zostało opublikowane hopefully później, i sprawdź, czy to rozwiązanie jest nieco bardziej niezawodne.
Cieszę się, że muszę polubić wpis i bardzo cieszę się, że udało Ci się znaleźć rozwiązanie w europejskim formacie daty. :)
-Justin

Rozwiązanie dotyczące europejskich formatów
dat 10/11/2011 6:45 AM
Witaj ponownie Justin,
Mam rozwiązanie problemu wymienionego powyżej na tej stronie.
https://sharepointbydummies.wordpress.com/2011/07/13/possible-Work-Around-to-Date-format-Issue-SharePoint-2010/

Europejskie formaty
dat 10/7/2011 3:59 AM
Witaj Justin,
Jest to naprawdę dobre rozwiązanie, a tylko sortowanie, co zostało poświęcone na ostatnie dwa dni na wyszukanie! Jednak mam problem z tym, a mimo to nadzieję Ci Cię.
Zmieniłeś swój kod, aby calcultate liczbę dni do momentu, gdy coś się stanie, a nie od czasu, przełączając zmienne w ostatnim wierszu funkcji "DateDiff";

<xsl: value-of Select = "$JulianToday-$JulianStartDate" ></xsl: value-of>

Jednak mam tylko możliwość, aby caclulate różnicę w sposób poprawny w połowie czasu. Na przykład z tą datą (format DD/MM/RRRR);

30/12/2011

Jest obliczana poprawnie, ale z tą datą (ten sam format)

12/10/2011

Wartość ta jest obliczana jako if 10-gru-2011, a nie 12-paź-2011.
Po przeprowadzeniu próby przełączenia pozycji dnia i miesiąca w zmiennej "JulianStartDate" jest to podobne;

<xsl: with-param Name = "Month" Select = "substring (ddwrt: FormatDateTime (String ($StartDate), 1033," RRRRMMDD "), 7, 2)"/>
<xsl: with-param Name = "Day" Select = "substring (ddwrt: FormatDateTime (String ($StartDate), 1033," RRRRMMDD "), 5, 2)"/>

W ten sposób rozwiązano problem z drugą datą, ale jest on nieprawidłowy dla pierwszej daty!
Po wypróbowaniu wszystkich połączeń FormatDateTime użyto europejskich identyfikatorów LCID i różnych zmian w ostatnim parametrze FormatDateTime (na przykład ddMMyyyy, MMddyyyy) z odpowiednimi poprawkami do parametrów pozycyjnych w podciągu bez sukcesu.
Bardzo doceniam wszelkie porady, które możesz zaoferować.
Dziękujemy,
Chris

Bez kodu
9/21/2011 4:27 AM
Nie uważam, że kod XSL kwalifikuje się jako rozwiązanie "No-Code", ponieważ zrozumienie języka XSL nie dotyczy wszystkich — ale nie obejmuje programowania. Oprócz tego: Nice rozwiązanie, Dziękujemy!

Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.

Społeczności pomagają zadawać i odpowiadać na pytania, przekazywać opinie i słuchać ekspertów z bogatą wiedzą.

Czy te informacje były pomocne?

Jaka jest jakość języka?
Co wpłynęło na Twoje wrażenia?
Jeśli naciśniesz pozycję „Wyślij”, Twoja opinia zostanie użyta do ulepszania produktów i usług firmy Microsoft. Twój administrator IT będzie mógł gromadzić te dane. Oświadczenie o ochronie prywatności.

Dziękujemy za opinię!

×