Primenjuje se na
SharePoint u sistemu Microsoft 365 SharePoint u programu Microsoft 365 Small Business

Dћastin Dћojs, LANtek

Napomena: Ovaj članak je deo kolekcije objava iz četiri godine bloga "Preuzmi poen" za krajnje korisnike sistema SharePoint.

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

Jedan od često traženih funkcionalnih delova SharePoint lokacije je izveštaj o dodeljaju za zadatke ili stavke liste. Drugim rečima, koliko dana/meseci je bilo od kada je ova stavka liste poslednji put izmenjena?

Izgleda da je na površini ovo veoma jednostavan zahtev. Uglavnom imamo datume za stavke koje se kreiraju i izmene, možemo da uskladištimo prilagođene datume kada se određene promene stavki oduzmu putem prijemnika događaja. Izračunali smo kolone u koje možemo da uključimo formule poput programa Excel za rad sa našim informacijama. Izgleda kao priliиno strejt predlog. Izaberite polje za datum, napravite izračunatu kolonu, a zatim formulom uradite nešto duž redova [Polje datuma] – [Danas]. Mada, ne tako brzo! Kao što zna svako ko je pokušao ovaj "jednostavan" zadatak, pokušaj korišćenja nečega kao što je [Danas] u izračunatoj koloni uzrokuje probleme. Pokušajte da umetnete [Danas] u polje za formulu izračunate kolone daće vam poruku o grešci ovako:

Poruka o grešci

Zašto je ovo? To ima veze sa načinom izračunavanja izračunatih kolona.

Hajde da kao primer uzmemo jednostavnu formulu:

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

Sve ovo govori da ako je Kolona1 manja ili jednaka koloni2, prikaži U redu, u suprotnom prikaži Nije u redu. Ovo je prilično tipična osnovna formula za izračunatu kolonu i daje osnovnu pretpostavku o stavci liste koja sadrži ove kolone: Vrednosti za kolone1 i Kolona2 nikada neće moći da se promene bez događaja Update u stavci liste.

Tako je, izračunate kolone će se ponovo izračunati samo kada se lista ažurira (ili kreira) jer pretpostavljaju da se informacije koje izračunavate nalaze u samoj stavki. To pravi 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 je to način na koji će izračunate kolone funkcionisati, međutim, ako moram da napravim obrazovanu procenu pretpostavio bih da oni tako funkcionisaju za performanse. Zamislite da imate listu od nekoliko hiljada stavki od kojih je svaka sadržala izračunatu kolonu kojoj je bila potrebna "živa" ispravka. To bi značilo da neki mehanizam, možda zadatak tajmera, mora da ponavlja kroz svaku stavku koja je sadržala tu izračunatu kolonu tako često i ažurira njenu vrednost. To može biti izuzetno opolaćeno u vezi sa performansama jer sa većim primenama ovaj zadatak može konstantno da se pokreće i menja stvari. To je samo moja pretpostavka, ali ima smisla ako razmisliљ o tome.

Postoje neki predlozi za slična rešenja koja plutaju okolo i uključuju prevaru sistema SharePoint da prihvati vrednost Danas tako što ćete prvo kreirati kolonu pod imenom "Danas", a zatim je dodati u formulu, a zatim je izbrisati. Sve je dobro, ali zapamtite šta sam rekao kada se izračunate kolone ažuriraju. 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čaju izračunavanja dana.

Video sam druge koji koriste pametni JavaScript za pisanje vrednosti na stranicu. Ovo bi isto funkcionisalo, ali sam prilično kategoriиno protiv klijentske skripte kada se to moћe izbeжi.

Implementaciju:

Pa šta da uradim? Izračunate kolone ne postavljaju se u pitanje za "nepostojane" funkcije kao što je "Danas". Moguće je da bismo mogli da razvijemo neki prilagođeni kôd da bismo to uradili za nas kao što je proces Izračunata kolona, zadatak tajmera ili planirani proces koji treba da se izvrši i ažuriramo svaku stavku koja je potrebna ovom izračunavanju. To nas vraća na problem performansi koje sam pomenuo u poslednjem pasusu, a pored toga to je brzo rešenje koje bi bilo veoma specifično za lokaciju/listu/kolonu u pitanju. Pored ove dve stvari, moraжeљ da naрeљ i љtrebera, kao љto sam ja, koji zna kako da kodiљe i ubedi ga da razvije ovo reљenje za tebe. Ali postoji lakљi naиin!

Ako imate prava da kreirate polja i uređujete stranice na lokaciji i steknite malo znanja o XSLT-u i kreiranju prikaza, možete da sastavite XSL predložak koji se može uključiti u prikaz liste i koji će sa pravom izračunati vrednost svaki put kada se zatraži stranica. Ovaj scenario uklanja našu zabrinutost u vezi sa performansama i ne zahteva da prilagođeni kôd bude razvijen i primenjen putem rešenja.

Savrљeno. Kako жemo to da uradimo?

  1. Kreirajte ili izaberite polje koje će se ponašati kao naš izvor. Mora biti tip datuma.

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

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

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

  5. Otpremite XSL predložak u biblioteku stilova.

  6. Postavite svojstvo "XSL veza" za veb segment za prikaz liste putem korisničkog interfejsa.

  7. Uspeh!

Hajde da istražimo primer upotrebe slučaja i prođimo kroz primenu. Naš klijent je želeo prikaz glavne liste koja će mu reći koliko dugo određena stavka liste sedi u statusu. Ova lista je sadržala prilagođeni tip sadržaja lokacije izveden iz tipa stavke i dodat na listu. Na licu mesta već je bio primalac događaja koji snima svaki put kada se to polje statusa stavke liste promeni i sačuva taj datum u koloni pod imenom "Status datuma je promenjen". Sva ova instalacija nije neophodna i može da se uradi sa BILO kojim poljem za datum (dešava se upravo ovo je naša primena, ali slobodno eksperimentišite). Minimalna vrednost koja će vam biti potrebna jeste polje izvornog datuma i polje čuvara mesta da biste zadržali izračunavanje (više o ovome u sledećem pasusu) dodati na listu, iako predlažem da koristite kolone lokacije i tipove sadržaja lokacije u slučaju da želite ponovo da koristite ovo rešenje na drugim mestima na lokaciji.

Zato imamo izvorni datum koji možemo da koristimo u izračunavanju u odnosu na današnji datum. Sada možemo da kreiramo prilagođenu kolonu lokacije koju ćemo koristiti kao kontejner za izračunatu vrednost. U ovom slučaju biram da koristim izračunatu kolonu jer ona neće moći da se menja u obrascima novih ili uređivanja stavki, ali može biti izabrana za prikaz u prikazima jer ne želimo da korisnici unose proizvoljne vrednosti u ovu kolonu. To može da bude zbunjujuće u zavisnosti od toga zašto se ne prikazuje u prikazima itd.

Sada kada imamo kolonu lokacije, možemo da je dodamo u tipove sadržaja koji će se koristiti na listi. Zatim treba da kreiramo prikaz koji će se kasnije prilagoditi uz XSLT. Uverite se da ste kreirali standardni prikaz koji sadrži kolonu sa izvornim datumom i novu izračunatu kolonu koja će se ponašati kao čuvar mesta za izračunatu vrednost.

Sada imamo sve što je potrebno da bismo podržali naš prilagođeni izveštaj o dodetaku. Ostalo je samo da kreirate naš XSL predložak, otpremite ga u biblioteku stilova lokacije i povežete ga sa prikazom liste. XSL predložak koji ćemo koristiti sadržaće neke normalne naznake generisane u sistemu SharePoint za generisanje prikaza, kao i našu prilagođenu naznaku koja se koristi za izmenu određenih delova ovoga i izračunavanje željene vrednosti za nas.

Dajući kredit tamo gde dospeće kredit, XSL predlošci za obavljanje stvarnih izračunavanja koja koristim za ovo rešenje nagrađivali su se "brzo prevlačenje" na MSDN forumima:http://social.msdn.microsoft.com/Forums/en-US/sharepointcustomization/thread/aeda905b-9bc6-40c4-bd22-21306c5cb0d2/

Preuzmite XSL opis stila (aging.zip) koji sam sabrao ovde:https://OneDrive.live.com/?cid=c262e8e2d59a86d9&permissionsChanged=1&id=C262E8E2D59A86D9!104

Ako ovo otvorite u omiljenom uređivaču teksta, videćete mnogo normalnih SharePoint XSL naznaka za prikazivanje prikaza, ako nastavite da se pomerate nadole do reda 357, videćete početak prilagođenih predložaka koje sam dodao naznaci, prvi je predložak "DateDiff" iza kojeg slede "calculate-julian-day" i "FieldRef_printTableCell_EcbAllowed.Days_x0020_At_x0020_Status". Ovo su naša tri predloška koja će napraviti i prikazati naša izračunavanja u našim prikazima. Ako ćete koristiti različita imena polja nego što je navedeno ranije u ovom članku, moraćete da prođete kroz ove predloške i zamenite sve reference na druga imena. Ne zaboravite, za ovo ćete želeti da koristite INTERNO ime polja, a ne ime za prikaz.

Kada budete zadovoljni da je predložak spreman za rad, idite u biblioteku stilova i otpremite ga u okviru fascikle "XSL opisi stilova", a zatim kopirajte vezu do datoteke. To će nam omogućiti da kasnije lako izvršimo promene u njemu ili da je dodamo u različite delove lokacije kako to želimo.

Zatim idite na listu i izaberite prikaz koji ste kreirali ranije u ovom članku. U meniju "Radnje na lokaciji" izaberite stavku "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 malu strelicu nadole u gornjem desnom uglu. U ovom meniju izaberite stavku "Uredi veb segment".

Edit Web Part command on Web Part menu

Tako ćete otvoriti meni veb segmenta sa desne strane prozora pregledača.

Meni Veb segmenta

Kliknite na znak + za odeljak "Razno" i pronađite svojstvo "XSL veza".

XSL Link property on Web Part menu

Nalepite vezu ka XSL datoteci u biblioteci stilova koju ste kopirali ranije (to može biti relativna ili apsolutna veza).

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 konfigurisano, sada bi trebalo da vidite brojeve u koloni "Dani po statusu".

Days At Status column displaying number

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

Aging Report displaying test data

Rezime:

Evo ga: lepo oblikovan, robusan i bolji način za kreiranje izveštaja o dodeljanju u sistemu SharePoint. Ovo ima dosta potencijalnih aplikacija osim slučaja koji smo ovde istražili. Još jedan uobičajen scenario za ovaj tip izveštaja jeste da ga priložite listi zadataka tako da možete da vidite koliko dugo je trajao od kada je zadatak kreiran na prvi pogled.

Uživajte!

--Dћastin

Justin Joyce, LANtek

Komentari

Nedostaju koraci 08.08.2012. 03:51 u redu Pratio sam korake, ali mora da nedostaje nešto – kako će XSL znati koji datum da koristi ili u koje polje da doda dane? mrzeti kada promašite korake.

Bez koda, dogovoreno! 30.08.2012. 12:12 Slaћem se. Ne mislim da se ovo baљ smatra "bez koda".Zanimljivo, kroz neke sramoćenje sistema SharePoint, imam izračunatu kolonu koja koristi "Danas"... nisam siguran kako ili zašto zato što ne mogu da ga dobijem da to ponovo uradi, ali ovaj je i dalje tu i radi.

Formula za izračunatu kolonu "Dani po statusu"? 02.05.2012. 07:39 Justin – Koja je formula koju ste koristili za izračunatu kolonu lokacije "Dani po"(kolona čuvara mesta)? Da li je bilo "=today"?

SharePoint 2007 02.01.2011. 11:29 Trenutno nisam pokušao da primenim ovo rešenje na SharePoint 2007, ali ga tražim. Nažalost, ne postoji XslLink svojstvo u veb segmentu putem korisničkog interfejsa.

Odlična objava 11/30/2011 09:53 AM Zdravo Odliиna objava.Koristim SharePoint 2007.Nemam odeljak sa mikrofonom kao što je navedeno iznad.Da li imate korake za konfiguraciju sp2007? Hvala.

Re: Rešenje bez koda: Prikazivanje dana od poslednjeg menjanja stavke SharePoint liste 10/11/2011 08:24 AM Zdravo Krise.sjajno pronalaženje! Pogledaću ono što ste objavili kasnije i da ću videti mogu li ovo rešenje da napravim još robusnijim.Drago mi je da vam se ova objava dopala i veoma mi je drago što ste pronašli rešenje za evropski format datuma. :) -Dћastin

Rešenje za evropske formate datuma 10/11/2011 06:45 AM Zdravo, Justin. FYI, našao sam reš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/

Evropski formati datuma 07.07.2011. 03:59 Zdravo, Justin. Ovo je stvarno dobro rešenje, hvala, i upravo sam provela poslednja dva dana tražeci! Kako god da imam problem sa tim i nadao sam se da mi moћeљ pomoжi.Neznatno sam izmenio kôd da bih izračunao broj dana dok se nešto ne dogodi, a ne od tada, tako što sam prebacio promenljive u poslednjem redu funkcije "DateDiff"; <xsl:value-of select="$JulianToday - $JulianStartDate"></xsl:value-of> Međutim, uspeo sam da je iskoristim samo da bi pravilno uklonio razliku u ispravnom poluvremenu. Dakle, na primer sa ovim datumom (format dd/MM/yyyy); 12.30.2011. On se ispravno izračunava, ali sa ovim datumom (istim formatom) 12.10.2011. Izračunava se kao da je 10. dec.2011. umesto 12-okt-2011.Pokušao sam jednostavno da zamenim pozicije vrednosti dana i meseca u promenljivoj "DžulijanStartDate", ovako; <xsl:with-param name="Month" select="substring(ddwrt:FormatDateTime(string($StartDate), 1033, 'yyyyMMdd'),7,2)"/> <xsl:with-param name="Day" select="substring(ddwrt:FormatDateTime(string($StartDate), 1033, 'yyyyMMdd'),5,2)"/> Ovo je ispravilo problem sa drugim datumom, ali je zatim bio netačan za prvi datum! Pokušao sam i da promenim FormatDateTime pozive da bih koristio evropske LCID-ove i različite promene u poslednjem parametru FormatDateTime (npr. ddMmyyyy, MMddyyyy) sa odgovarajućim prilagođavanjima poziciona parametra podniske bez uspeha.Bila bih vam zahvalna na savetu koji mi ponudite.Hvala Kris

Bez koda 21.09.2011. 04:27 Mislim da se XSL ne kvalifikuje kao rešenje "bez kodova", jer razumevanje XSL jezika nije za svakoga – ali ne uključuje programiranje. Pored toga: lepo rešenje, hvala!

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.