Rešenje bez koda: prikazivanje dana od kada je stavka liste poslednji put promenjena
Applies ToSharePoint u sistemu Microsoft 365 SharePoint u programu Microsoft 365 Small Business

Justin Joyce, LANtek

Napomena: Ovaj članak je deo kolekcije objava iz četiri godine od objavljivanja bloga Pointa za SharePoint krajnji korisnike.

Pregled: prilagođeni izveštaji o dospevanje bez koda

Jedan od najčešće zahtevanih delova SharePoint lokacije je izveštaj o dospevanje za zadatke ili stavke na listi. Drugim rečima, koliko je dana/mjeseci prošlo od kada je ova stavka liste poslednji put izmenjena?

Na površini se čini da je to jednostavan zahtev. Na kraju krajeva, imamo datume za stavke koje se kreiraju i menjaju, imamo sposobnost da skladište prilagođene datume kada se stavke promene na stavkama pomoću prijemnika događaja. Imamo izračunate kolone u kojima možete da uključujete Excel-formule za rad sa našim informacijama. Ovo izgleda kao priliиno direktna ponuda. Izaberemo polje za datum, kreiramo izračunatu kolonu, a zatim uradimo formulu nešto duž linija [DateField] – [danas]. Ah, ne tako brzo! Kao svako ko je pokušao ovaj "Jednostavan" zadatak zna, pokušava da koristi nešto kao [Today] u izračunatoj koloni izaziva probleme. Pokušajte da umetnete [danas] u polje za formulu izračunate kolone će vam pružiti poruku o grešci:

Poruka o grešci

Zašto je to tako? Pa, to mora da se obračunava sa izračunatim kolonama.

Uzmimo jednostavnu formulu kao primer:

= IF ( [Kolona1] <= [Kolona2], "u redu", "nije u redu")

Sve što se govori jeste da ako je Kolona1 manja ili jednaka Kolona2, zatim prikaz u redu, u suprotnom prikaz nije u redu. Ovo je prilično tipična osnovna formula za izračunatu kolonu i čini osnovnu pretpostavku o stavci liste koja sadrži ove kolone: vrednosti za Kolona1 i Kolona2 nikada neće moći da se promene bez događaja ažuriranja na stavci liste.

Tačno, izračunate kolone će se ponovo obračunavati kada se lista ažurira (ili kreira) pošto oni preuzmu informacije koje izračunavate se nalaze u samoj stavki. To stvara problem kada pokušavate da koristite nešto što se menja nezavisno od polja stavke, kao što je današnji datum.

Sada nisam bio na sastanku gde su odlučili da će u tom slučaju funkcionisati te kolone, ako moram da se učim kao da sam pretpostavio da funkcionišu na ovaj način za performanse. Zamislite da imate listu od nekoliko hiljada stavki, od kojih svaka sadrži izračunatu kolonu kojoj je potrebna ispravka "uživo". To znači da bi neki mehanizam, možda posao tajmera, morao da se ponavlja kroz svaku stavku koja je često sadržala izračunatu kolonu i ažurira njenu vrednost. To može biti izuzetno naporno u smislu performansi zato što uz veća primena ovaj posao možda konstantno pokreće i menja stvari. To je samo moja pretpostavka, ali ima smisla ako razmislite o tome.

Postoje neki predlozi za slična rešenja koja plove tamo napolju, što obuhvata da bi se SharePoint funkcija prihvatala danas tako što ćete prvo kreirati kolonu nazvanu danas, a zatim je dodati u formulu, a zatim je izbrisati. Sve su to dobro i dobro, ali Upamtite šta sam rekla kada se ažuriraju izračunate kolone. Ova vrednost će se promeniti samo kada se stavka ažurira što znači da će vrednosti uskoro biti netačne, naročito u slučajevima izračunavanja dana.

Video sam druge koji koriste pametne JavaScript za pisanje vrednosti na stranici. Ovo će takođe funkcionisati, ali sam prilično kategorično od scenarija klijenta kada se može izbeći.

Ostvarivanje

Šta da radim? Izračunate kolone ne idu u obzir za takozvanu funkciju "nepristupačnije" kao što je danas. Moguće je da možemo da razvijemo neki prilagođeni kôd koji će se pobrinuti za to za nas kao što je izračunate kolona, posao tajmera ili planirani proces da biste došli uz svaku stavku koja je potrebna za izračunavanje. To nas vraća na problem performansi koje sam pomenuo u poslednjem pasusu, a pored toga to je krhko rešenje koje bi bilo veoma specifično za sajt/listu/kolonu. Povrh dve zabrinutosti, i vi bi trebalo da odete da pronađete љtrebera, kao što sam ja, koji zna kako da ga pribavi i ubedi da razvije ovo rešenje za vas. Ali postoji i lakši način!

Ako imate prava da kreirate polja i uredite stranice na svojoj sajtu i da imate malo znanja o XSLT i kreiranju prikaza, možete da sastavite XSL predložak koji može da se uključi u prikaz liste i verno izračunava vrednost svaki put kada se zatraži stranica. Ovaj scenario uklanja našu zabrinutost za performanse i ne zahteva da se prilagođeni kôd razvije i rasporedi putem rešenja.

Ena. Kako to da uradimo?

  1. Kreirajte ili izaberite polje koje će delovati kao naš izvor. To mora biti tip datuma.

  2. Kreirajte naše polje koje će delovati kao čuvar mesta za vrednost koja se izračunava.

  3. Dodajte oba ova polja u tip sadržaja i dodajte taj tip sadržaja na listu.

  4. Kreirajte prikaz liste koja sadrži kolone izvor i čuvara mesta.

  5. Otpremite XSL predložak u biblioteku stilova.

  6. Postavljanje polja "XSL karika" za Veb segment prikaza liste preko korisničkog interfejsa.

  7. Uspele!

Hajde da istražimo primer koristite slučaj i da prošetate kroz implementaciju. Naša muљterija je želela prikaz glavne liste koji će im reći koliko dugo je određena stavka liste sedela na njenom statusu. Na ovoj listi je sadržana prilagođena vrsta sadržaja lokacije izvedena iz tipa stavke i dodata na listu. Već je bio prijemnik za događaje na mestu koje se nalazi svaki put kada se promeni polje "status" na stavci liste i sačuvate taj datum u koloni pod imenom "Datum datuma". Sve ove instalacije nisu neophodne i mogu se izvršiti sa bilo kojim poljem datuma (upravo se dešava da je to naša implementacija, ali neka bude slobodna za eksperimente). Potrebna vam je minimalna minimalna opcija "izvorna polja za datum i čuvar mesta" da biste zadržali izračunavanje (više na ovome u sledećem pasusu) dodato na listu, iako vam predlažem da koristite kolone lokacije i tipove sadržaja lokacije u slučaju da želite da ponovo koristite ovo rešenje na drugim mestima na sajtu.

Tako da imamo izvorni datum koji možemo da koristimo u odnosu na današnji datum. Sada možemo da kreiramo prilagođenu kolonu sajta koja će se koristiti kao kontejner za izračunatu vrednost. U ovom slučaju sam odlučio da koristim izračunatu kolonu zato što neće moći da se promeni u novim ili uređivanju obrazaca stavki, ali može da se izabere za prikaz u prikazima pošto ne želimo da korisnici unose proizvoljno vrednosti u ovu kolonu. Može da se zbuni zbog čega se ne prikazuje u prikazima itd.

Sada kada imamo kolonu sajta, možemo da je dodamo našim tipovima sadržaja koji će se koristiti na listi. Zatim treba da stvorimo prikaz koji će se kasnije prilagoditi sa našim XSLT-om. Uverite se da ste kreirali standardni prikaz koji sadrži izvornu kolonu datum i novu izračunatu kolonu koja će delovati kao čuvar mesta za izračunatu vrednost.

Sada imamo sve na mestu koje ćemo zahtevati da pružimo podršku za naš prilagođeni izveštaj o starenja. Sve što je ostalo je kreiranje XSL predloška, otpremanja u biblioteku stilova na sajtu i povezivanje sa prikazom liste. XSL predložak koji ćemo koristiti će sadržati neke normalne naznake za SharePoint generisane naznake za generisanje prikaza, kao i sopstvena prilagođena naznaka koja se koristi za zamenu određenih delova ovog i izračunavanje željene vrednosti.

Davanje kredita gde se dospeva kredit, XSL predlošci za obavljanje stvarnih izračunavanja koja koristim za ovo rešenje velikoduљno su pružali "vrth" na MSDN forumima: http://Social.MSDN.Microsoft.com/Forums/En-US/sharepointcustomization/thread/aeda905b-9bc6-40c4-bd22-21306c5cb0d2/

Preuzmite XSL opis stila (aging.zip) koje sam sastavila ovde: https://OneDrive.live.com/?CID=c262e8e2d59a86d9&nedozvoljena = 1&ID = c262e8e2d59a86d9! 104

Otvaranjem ove stavke u omiljenom tekstualnom programu videćete puno normalnih SharePoint XSL naznaka za prikazivanje prikaza, ako nastavite da pomerate nagore do reda 357 videćete početak prilagođenih predložaka koje sam dodala u naznake, a prva je predložak "DateDiff" koji prati "Izračunaj-Julian-Day" i "FieldRef_printTableCell_EcbAllowed. Days_x0020_At_x0020_Status". Ovo su tri predloška koji će napraviti i prikazivaće naša izračunavanja u našim prikazima. Ako ćete koristiti drugačija imena polja od navedenih u ovom članku, moraćete da pređete kroz ove predloške i zamenite sve reference na druga imena. Upamtite da želite da koristite INTERNO ime polja, a ne ime za prikaz.

Kada budete uvereni da je predložak spreman za prelazak, idite u biblioteku stilova i otpremite ga ispod fascikle "XSL stil stilova", a zatim kopirajte povezivanje sa datotekom. To će nam omogućiti da kasnije lako napravimo promene ili da ga dodamo na drugi deo sajta koliko želimo.

Zatim idite na listu i izaberite prikaz koji ste kreirali u prethodnom delu ovog članka. Iz menija "radnje lokacije" kliknite na "Uredi stranicu".

Edit Page command on Site Actions menu

Pronađite Veb segment za prikaz liste na stranici i otvorite meni Veb segmenta tako što ćete kliknuti na strelicu nadole u gornjem desnom uglu. Iz menija izaberite stavku "Uredi Veb segment".

Edit Web Part command on Web Part menu

Otvoriće se meni sa Veb segmentom na desnoj strani prozora pregledača.

Meni Veb segmenta

Kliknite na + za "dodatnu opciju" i pronađite vlasništvo "XSL karika".

XSL Link property on Web Part menu

Nalepite povezivanje sa XSL datotekom u biblioteci stilova koju ste ranije kopirali (to može biti relativna ili apsolutna karika).

XSL file link pasted in

Kliknite na dugme "u redu" da biste sačuvali promene, a zatim kliknite na dugme "Zaustavi Uređivanje" na traci "stranica" na vrhu stranice.

Stop Editing button on Page tab

Ako je sve ispravno podešeno, sada bi trebalo da vidite brojeve u koloni "dani u statusu".

Days At Status column displaying number

I na kraju, evo kako bi izgledalo sa nekoliko testova na različitim datumima:

Aging Report displaying test data

Rezime:

Evo je: dobar oblikovani, robustan i bolji način za kreiranje izveštaja o dospevanju u sistemu SharePoint. Ovo ima prilično potencijalne aplikacije, pored onog što smo istražili. Drugi uobičajeni scenario za ovaj tip izveštaja prilažete ga na listu zadataka tako da možete da vidite koliko vremena je prošlo od trenutka kada je zadatak kreiran na prvi pogled.

Uživajte!

-Justin

Justin Joyce, LANtek

Komentari

Koraci nedostaju 10/8/2012 3:51 u redu, sledio sam korake, ali mora da nešto nedostaje – kako će XSL znati koji datum treba da se koristi ili u koje polje da doda dane? Mrzim kada se koraci promašuju.

Bez koda, slaћem se! 8/30/2012 12:12 PM Slažem se-mislim da se ovo ne računa kao "bez koda".Interesantno, kroz neki zajeb sistema SharePoint, imam funkcionalan radni red koji koristi danas... Nije sigurno kako i zašto zato što ne mogu da ga nabavim ponovo, ali ona je i dalje tamo i radi.

Formula za izračunatu kolonu "dani u statusu"? 5/2/2012 7:39 Justin – koja je formula koju ste koristili za "dani u statusu" izračunatu kolonu lokacija (kolona čuvara mesta)? Da li je "= Today"?

SharePoint 2007 12/2/2011 11:29 Trenutno nisam pokušao da primenim ovo rešenje na SharePoint 2007, ali ga tražim. Nažalost, ne postoji polje Xslveze koje se nalazi na Veb segmentu preko korisničkog interfejsa.

Velika objava 11/30/2011 9:53 Zdravo, Odliиna objava.Koristim SharePoint 2007.Nemam ni odeljak "pogrešno napisano".Da li imate korake za konfiguraciju SP2007? Hvala ti.

Re: Nekôd rešenje: prikazivanje dana od kada je stavka SharePoint liste poslednji put promenjena 10/11/2011 8:24 Zdravo, Krise.Dobro pronalaženje! Moraжu da pogledam ono љto vam kaћem, nadam se kasnije i videжu da li mogu da napravim ovo reљenje malo robuљnijim.Drago mi je što vam se svideo post i drago mi je što ste pronašli rešenje za Evropski format datuma. :) -Justin

Rešenje za formate za Evropski datum 10/11/2011 6:45 Zdravo, Justin, FYI, pronašao sam rešenje za problem koji sam prethodno pomenuo na ovoj stranici; https://sharepointbydummies.WordPress.com/2011/07/13/possible-Work-around-to-date-format-issue-SharePoint-2010/

Formati za Evropski datum 10/7/2011 3:59 Zdravo, Justin, Ovo je zaista dobro rešenje Hvala, i samo ono što sam provela prethodna dva dana u potrazi! Meрutim, imam problem sa tim i nadao sam se da mi vi moћete pomoжi.Izmenio/ao sam kôd da biste mogli da numerišete broj dana dok se nešto ne desi, umesto da tako što ćete promeniti promenljive u poslednjem redu funkcije "DateDiff"; <XSL: VALUE – od izbora = "$JulianToday-$JulianStartDate" ></XSL: Value-of> Međutim, u mogućnosti sam da ga dobijem da mogu da ga nabavim kako bi pravilno razlikusao razliku. Tako da na primer sa ovim datumom (format dd/MM/yyyy); 30/12/2011 Ispravno se izračunava, ali sa ovim datumom (istim oblikovanjem) 12/10/2011 Izračunava se kao da ako je 10-Dec-2011 umesto 12-OCT-2011.Pokušao sam da jednostavno menjam stavove vrednosti dana i mjeseca u promenljivoj "Juliandatumu", ovako; <XSL: sa-param name = "month" izaberite = "podniska (ddwrt: FormatDateTime (niska ($StartDate), 1033, ' yyyyMMdd '), 7, 2)"/> <XSL: sa-param name = "Day" izaberite = "podniska (ddwrt: FormatDateTime (niska ($StartDate), 1033, ' yyyyMMdd '), 5, 2)"/> Ovo je ispravilo problem sa drugim datumom, ali je bilo pogrešno za prvi datum! Takođe sam pokušao da izmenim promene u programu FormatDateTime da biste koristili Evropske LCIDs i razne promene na poslednjem parametru FormatDateTime (npr. ddMMyyyy, Mmddyggy) sa odgovarajućim korekcijama na parametre pozicioniranja potniski bez uspeha.Cenio bih bilo koji savet.Hvala, Su

Bez koda 9/21/2011 4:27 Ne verujem da se XSL kvalifikuje kao "nekôd" rešenje, kao razumevanje XSL jezika nije za sve, ali ne uključuje programiranje. Pored toga: lepo rešenje, hvala vam!

Da li vam je potrebna dodatna pomoć?

Želite još opcija?

Istražite pogodnosti pretplate, pregledajte kurseve za obuku, saznajte kako da obezbedite uređaj i još mnogo toga.

Zajednice vam pomažu da postavljate pitanja i odgovarate na pitanja, dajete povratne informacije i čujete mišljenje od stručnjaka sa bogatim znanjem.