Primjenjuje se na
SharePoint u sustavu Microsoft 365 SharePoint u sustavu Microsoft 365 Small Business

by Justin Joyce, LANtek

Napomena: Ovaj je članak dio zbirke objava od četiri godine bloga Dohvaćanje točke za krajnje korisnike sustava SharePoint.

Pregled: Prilagođena izvješća o starenju bez koda

Jedan od često zatraženih funkcionalnih dijelova web-mjesta sustava SharePoint izvješće je o starenju za zadatke ili stavke popisa. Drugim riječima, koliko je dana/mjeseci prošlo od zadnje izmjene ove stavke popisa?

Na površinu se čini da je to vrlo jednostavan zahtjev. Nakon svega, imamo datume za stavke koje se stvaraju i mijenjaju, imamo mogućnost pohrane prilagođenih datuma kada se određene promjene stavki odvijaju putem prijamnika događaja. Imamo izračunate stupce u koje možemo uvrstiti formule kao što su Excel za rad s našim informacijama. Ovo izgleda kao prilično izravna proslijeđena ponuda. Odaberemo polje datuma, stvorimo izračunati stupac, a zatim u redaka polja [DateField] – [Danas]. Ne tako brzo! Budući da svatko tko je pokušao ovaj "jednostavan" zadatak zna, pokušaj korištenja nešto poput [Danas] u izračunatom stupcu uzrokuje probleme. Pokušajte umetnuti [Danas] u okvir formule izračunatog stupca, prikazat će vam se poruka o pogrešci kao što je ova:

Poruka o pogrešci

Zašto je to tako? Pa, to ima veze s načinom na koji se izračunati stupci izračunavaju.

Uzmimo jednostavnu formulu kao primjer:

= IF( [Stupac1]<=[Stupac2], "U redu", "Nije U redu")

Sve što piše je da ako je Stupac1 manji od ili jednak stupcu2, onda prikaži U redu, u suprotnom prikaži Nije U redu. To je prilično uobičajena osnovna formula za izračunati stupac i osnovna je pretpostavka o stavci popisa koja sadrži te stupce: vrijednosti za stupac1 i stupac2 nikad se neće moći promijeniti bez događaja Ažuriranja na stavci popisa.

To je točno, izračunati stupci ponovno će se izračunavati samo kada se popis ažurira (ili stvori) jer pretpostavljaju da su podaci koje izračunavate sadržani u samoj stavci. Time se stvara problem kada pokušavate koristiti nešto što mijenja neovisno o poljima stavke, kao što je današnji datum.

Sada nisam bio na sastanku gdje su odlučili da je to način na koji će izračunati stupci funkcionirati, međutim, ako bih morao napraviti obrazovanje procjena bih pretpostaviti da oni funkcionirati na taj način za izvođenje. Zamislite da imate popis od nekoliko tisuća stavki, od kojih svaka sadrži izračunati stupac za koji je bilo potrebno ažuriranje "uživo". To znači da bi neki mehanizam, možda zadatak mjerača vremena, trebao iterirati kroz svaku stavku koja je sadržavala taj izračunati stupac svaki put i ažurirati njegovu vrijednost. To može biti iznimno porezno u smislu performansi jer s većim implementacijama ovaj posao može stalno biti pokrenut i mijenja stvari. To je samo moja procjena, ali to ima prilično smisla ako razmislite o tome.

Postoje neki prijedlozi za slična rješenja koja plutaju okolo koja obuhvaćaju prevari sustava SharePoint u prihvaćanje vrijednosti Danas tako da najprije stvorite stupac s nazivom Danas, a zatim ga dodate u formulu, a zatim je izbrišete. Sve je to dobro i dobro, ali imajte na umu što sam rekao prilikom ažuriranja izračunatih stupaca. Ta će se vrijednost promijeniti samo kada se stavka ažurira, što znači da će vrijednosti uskoro biti netočne, osobito u slučaju izračuna dana.

Vidio sam druge koji koriste pametni JavaScript za pisanje vrijednosti na stranicu. To će funkcionirati isto tako, ali ja sam ljepušan mnogo kategorično protiv klijenta skripta kada se može izbjeći.

Implementacija:

Pa što učiniti? Izračunati stupci ne postoje u pitanju za tzv. "hlapljive" funkcije kao što je Danas. Moguće je da možemo razviti prilagođeni kod koji će se pobrinuti za to kao što su izračunati stupac, zadatak mjerača vremena ili zakazani proces koji će se pokrenuti i ažurirati svaku stavku za koju je potreban ovaj izračun. To nas vraća na problem performansi sam spomenuo u posljednjem odlomku ipak, a osim toga je krhko rješenje koje bi bilo vrlo specifično za web-mjesto / popis / stupac u pitanju. Na vrhu ta dva pitanja, također bi morati ići naći štreber tip, kao što sam ja, koji zna kako kod i uvjeriti ga da razvije ovo rješenje za vas. Ali postoji lakši način!

Ako imate prava na stvaranje polja i uređivanje stranica na web-mjestu i imate malo znanja o XSLT-u i stvaranju prikaza, možete sastaviti XSL predložak koji se može uvrstiti u prikaz popisa i vjerno će izračunati vašu vrijednost svaki put kada se stranica zatraži. Taj scenarij uklanja našu zabrinutost zbog performansi i ne zahtijeva razvoj i implementaciju prilagođenog koda putem rješenja.

Perfektan. Kako da to uиinimo?

  1. Stvorite ili odaberite polje koje će djelovati kao naš izvor. Mora biti vrsta datuma.

  2. Stvorite naše polje koje će djelovati kao rezervirano mjesto za vrijednost koja se izračunava.

  3. Dodajte oba polja u vrstu sadržaja i dodajte tu vrstu sadržaja na popis.

  4. Stvorite prikaz tog popisa koji sadrži stupce izvora i rezerviranog mjesta.

  5. Prenesite XSL predložak u biblioteku stilova.

  6. Postavite svojstvo "XSL Link" za web-dio prikaza popisa putem korisničkog sučelja.

  7. Uspjelo je!

Pogledajmo primjer upotrebe slučaja i prođite kroz implementaciju. Naš je korisnik htio pogledati glavni popis koji će im reći koliko dugo određeni popis ima status. Ovaj popis sadrži prilagođenu vrstu sadržaja web-mjesta izvedenu iz vrste Stavka i dodanu na popis. Već je na mjestu prijamnik događaja koji bilježi svaki put kada je to polje statusa na stavci popisa promijenjeno i spremljeno taj datum u stupac pod nazivom "Datum promjene statusa". Sve ovo ožičenje nije potrebno, a može se učiniti s bilo koje polje datuma (to se događa samo to je naša implementacija, ali slobodno eksperimentirati). Bare minimum koji će vam trebati su izvorišno polje datuma i polje rezerviranog mjesta za čuvanje izračuna (više o tome u sljedećem odlomku) dodano na popis, iako preporučujem da koristite stupce web-mjesta i vrste sadržaja web-mjesta u slučaju da želite ponovno koristiti to rješenje na drugim mjestima na web-mjestu.

Dakle, imamo izvorni datum koji možemo koristiti u izračunu u odnosu na današnji datum. Sada možemo stvoriti prilagođeni stupac web-mjesta koji će se koristiti kao spremnik za izračunatu vrijednost. U ovom sam slučaju odabrao korištenje izračunatog stupca jer se neće moći mijenjati na novim obrascima ili za uređivanje stavki, ali se može odabrati za prikaz u prikazima jer ne želimo da korisnici unose proizvoljne vrijednosti u ovaj stupac. To može biti zbunjujuće o tome zašto se ne prikazuje u prikazima, itd.

Sada kada imamo stupac web-mjesta, možemo ga dodati u vrste sadržaja koje će se koristiti na našem popisu. Zatim moramo stvoriti naš prikaz koji će se kasnije prilagoditi našim XSLT-om. Obavezno stvorite standardni prikaz koji sadrži izvorni stupac datuma i novi izračunati stupac koji će funkcionirati kao rezervirano mjesto za izračunatu vrijednost.

Sada imamo sve na mjestu koje ćemo morati podržavati naše prilagođeno izvješće o starenju. Sve što ostaje jest stvaranje XSL predloška, prijenos u biblioteku stilova web-mjesta i povezivanje s prikazom popisa. XSL predložak koji ćemo koristiti sadržavat će neke normalne oznake generirane u sustavu SharePoint za generiranje prikaza, kao i vlastite prilagođene oznake koje se koriste za nadjačavanje određenih dijelova te izračun željene vrijednosti za nas.

Davanje kredit gdje kredit je zbog, XSL predlošci za događaj stvarne izračune ja sam koristeći za ovo rješenje su ljubazno dobili "swirch" na MSDN forumima:http://social.msdn.microsoft.com/Forums/en-US/sharepointcustomization/thread/aeda905b-9bc6-40c4-bd22-21306c5cb0d2/

Preuzmite XSL list stilova (aging.zip) koji sam smještao ovdje:https://OneDrive.live.com/?cid=c262e8e2d59a86d9&permissionsChanged=1&id=C262E8E2D59A86D9!104

Ako to otvorite u omiljenom uređivaču teksta, vidjet ćete obilje uobičajenih XSL oznaka sustava SharePoint za prikaz prikaza, ako se nastavite pomicati prema dolje do retka 357, vidjet ćete početak prilagođenih predložaka koje sam dodao u oznaku, a prvi će biti predložak "DateDiff" i "calculate-julian-day" i "FieldRef_printTableCell_EcbAllowed.Days_x0020_At_x0020_Status". Ovo su naša tri predloška koja će izraditi i prikazati naše izračune u našim prikazima. Ako ćete koristiti različite nazive polja nego što je prethodno navedeno u ovom članku, morat ćete proći kroz te predloške i zamijeniti sve reference na druge nazive. Zapamtite, za to ćete htjeti koristiti interni naziv polja, a ne zaslonski naziv.

Kada budete zadovoljni da je predložak spreman, idite na biblioteku stilova i prenesite ga u mapu "XSL listovi stilova", a zatim kopirajte vezu na datoteku. To će nam omogućiti da kasnije jednostavno unesete promjene ili da ih dodamo u različite dijelove web-mjesta kako god želimo.

Zatim idite na popis i odaberite prikaz koji ste prethodno stvorili u ovom članku. Na izborniku "Akcije web-mjesta" kliknite "Uredi stranicu".

Snimka zaslona za odabir primarnog uređaja

Pronađite web-dio prikaza popisa na stranici i otvorite izbornik web-dijela klikom na malu strelicu prema dolje u gornjem desnom kutu. Na ovom izborniku odaberite "Uređivanje web-dijela".

Izgled SmartArt grafika

Time će se otvoriti izbornik web-dijela na desnoj strani prozora preglednika.

Izbornik web-dijela

Kliknite + za odjeljak "Razno" i pronađite svojstvo "XSL Link".

XSL Link property on Web Part menu

Zalijepite vezu na XSL datoteku u biblioteci stilova koju ste ranije kopirali (to može biti relativna ili apsolutna veza).

Snimka zaslona s pločicom povijesti i više izravnih poruka. Propuštena je izravna poruka istaknuta.

Kliknite "U redu" da biste spremili promjene, a zatim kliknite gumb "Zaustavi uređivanje" na vrpci "Stranica" pri vrhu stranice.

Stop Editing button on Page tab

Ako je sve ispravno konfigurirano, sada biste trebali vidjeti brojeve u stupcu "Dani na statusu".

Days At Status column displaying number

I na kraju, evo kako bi to izgledalo s nekim testnim podacima različitih datuma:

Aging Report displaying test data

Sažetak:

Evo ga: lijepo oblikovan, robustan i bolji način stvaranja izvješća o starini u sustavu SharePoint. Uz jednostavnu implementaciju bez koda. Ovo ima dosta potencijalnih aplikacija osim jednog slučaja korištenja koji smo istražili ovdje. Drugi uobičajeni scenarij za tu vrstu izvješća prilaže se popisu zadataka da biste vidjeli koliko je dugo bio od stvaranja zadatka na prvi pogled.

Uživajte!

--Justin

Justin Joyce, LANtek

Komentari

Nedostaju koraci 10/8/2012 3:51 u redu Slijedio sam korake, ali mora postojati nešto nedostaje - kako će XSL znati koji datum koristiti, ili koje polje dodati dana od? mrzim kada su koraci propušteni.

Ne-Kod, dogovoreno! 30.8.2012. 12:12 Slažem se. Mislim da se ovo ne računa kao "bez koda".Zanimljivo je da kroz neki sustava SharePoint imam izračunati stupac koji koristi danas... ne siguran kako ili zašto jer JA can't dobiti To učiniti opet, ali on je pa ipak ima i rad.

Formula za izračunati stupac "Dani na statusu"? 2. 5.2012. 7.39 Justin – koja je formula koju ste koristili za izračunati stupac web-mjesta "Days At Status" (stupac rezerviranog mjesta)? Je li bilo "=danas"?

SharePoint 2007 12/2/2011 11:29 Trenutno nisam pokušao primijeniti ovo rješenje na SharePoint 2007, no ja sam obličje u to. Nažalost, na web-dijelu ne postoji svojstvo XslLink putem korisničkog sučelja.

Velika objava 30.11.2011 9.53 Pozdrav Velik Pošta.Koristim SharePoint 2007.Nemam odjeljak Ostalo kao što je prethodno navedeno.Imate li korake za konfiguraciju sustava SP2007? Hvala.

Re: No-code solution: Displaying the days since a SharePoint list item was last changed 10/11/2011 8:24 Bok Chris.odlično pronalaženje! I'm going to uzeti pogledati što te pošta izgledno kasnije na danas i vidjeti ako ja mogu izraditi ovaj rješenje nešto više robustan.Drago mi je da vam se sviđa post, i drago mi je da ste bili u mogućnosti pronaći rješenje za europski oblik datuma. :) -Justin

Rješenje za europske oblike datuma 10/11/2011 6:45 Bok opet Justin, Ako niste znali, pronašao sam rješenje za problem koji sam ranije spomenuo na ovoj stranici;https://sharepointbydummies.wordpress.com/2011/07/13/possible-work-around-to-date-format-issue-sharepoint-2010/

Europski oblici datuma 10/7/2011 3:59 Zdravo, Justin. Ovo je stvarno dobro rješenje hvala, i samo vrsta stvari sam proveo posljednja dva dana u potrazi za! No imam problem s tim i nadao sam se da mi možete pomoći.Malo sam izmijenio vaš kod da biste odredili broj dana dok se nešto ne dogodi, a ne od toga, promjenom varijabli u posljednjem retku funkcije "DateDiff"; <xsl:value-of select="$JulianToday - $JulianStartDate"></xsl:value-of> Ali ja sam samo u mogućnosti da bi ga kako bi se kaktus razlika ispravno pola vremena. Na primjer s ovim datumom (oblik dd/MM/yyyy); 12. 30. 2011. Izračunava se ispravno, ali s ovim datumom (u istom obliku) 10. 12. 2011. Izračunava se kao da je 10. prosinca 2011. umjesto 12. listopada 2011.Pokušao sam jednostavno prebacivanje pozicije dana i mjeseca vrijednosti u varijabli "JulianStartDate", ovako; <xsl:with-param name="Month" select="substring(ddwrt:FormatDateTime(string($StartDate), 1033, 'yyyyMMMdd'),7,2)"/> <xsl:with-param name="Day" select="substring(ddwrt:FormatDateTime(string($StartDate), 1033, 'yyyyMMMdd'),5,2)"/> I ovaj ispravljen problem sa drugi datum, pa ipak to je bio onda netočan za prvi datum! Pokušao sam i izmijeniti pozive FormatDateTime tako da koriste europske LCID-ove i različite promjene zadnjeg parametra FormatDateTime (npr. ddMMyyyy, MMddyyyy) s odgovarajućim prilagodbama parametara položaja podniza bez uspjeha.Cijenio bih svaki savjet koji možeš ponuditi.Hvala Chris

Bez koda 21.9.2011 4.27 Ne mislim da je XSL kvalifikuje kao "no-code" rješenje, kao razumijevanje XSL jezik nije za svakoga - no to ne uključuje programiranje. Osim toga: Lijepo rješenje, hvala!

Potrebna vam je dodatna pomoć?

Želite dodatne mogućnosti?

Istražite pogodnosti pretplate, pregledajte tečajeve za obuku, saznajte kako zaštititi uređaj i još mnogo toga.