Ne kodo sprendimas: dienų rodymas po paskutinio sąrašo elemento pakeitimo
Applies To
„SharePoint“, esantis „Microsoft 365“ „SharePoint“, esantis „Microsoft 365 Small Business“Justin Joyce, LANtek
Pastaba: Šis straipsnis yra įrašų rinkinio dalis nuo ketverių metų " get Point " interneto dienoraščio, skirto "SharePoint" galutiniams vartotojams.
Apžvalga: pasirinktinio senėjimo ataskaitos be kodo
Vienas iš dažnai reikalaujamos "SharePoint" svetainės funkcinių dalių – tai užduočių arba sąrašo elementų senėjimo ataskaita. Kitaip tariant, kiek dienų/mėnesių jis buvo, nes šis sąrašo elementas buvo paskutinį kartą modifikuotas?
Ant paviršiaus atrodo labai paprasta užklausa. Juk turime datų, kurios yra kuriamos ir modifikuojamos, mes turime galimybę išsaugoti pasirinktinę datą, kai tam tikri elementų pasikeitimai vyksta per įvykių imtuvus. Turime apskaičiuotus stulpelius, į kuriuos galime įtraukti "Excel" panašias formules, kad galėtume dirbti su mūsų informacija. Tai atrodo gana tiesiai į priekį pasiūlymas. Renkamės datos lauką, sukuriate apskaičiuojamąjį stulpelį, o tada atlikite formulę, kai ji eina [DateField] (šiandien). AK, ne taip greitai, nors! Jei kas nors, kas bandė šį "paprastą" užduotį, žino, bando naudoti kažką panašaus [šiandien] apskaičiuojamame stulpelyje sukelia problemų. Pabandykite įterpti [šiandien] į apskaičiuojamojo stulpelio formulės lauką, kad būtų rodomas klaidos pranešimas, panašus į šį:
Kodėl tai yra? Na, ji turi daryti su apskaičiuojamaisiais stulpeliais apskaičiuojamuosius stulpelius.
Kaip pavyzdį paimkime paprastą formulę:
= IF ( [stulpelis1] <= [Column2], "gerai", "not OK")
Visa tai sako, jei Stulpelis1 yra mažesnė arba lygi Column2, tada Rodyti gerai, kitu atveju Rodyti ne gerai. Tai yra gana tipiška bazinė apskaičiuojamojo stulpelio formulė ir ji daro pagrindinę prielaidą apie sąrašo elementą, kuriame yra šie stulpeliai: "Stulpelis1" ir "Column2" reikšmės niekada negalės keisti be sąrašo elemento naujinimo įvykio.
That ' s right, apskaičiuojamieji stulpeliai bus perskaičiuoti tik tada, kai sąrašas atnaujinamas (arba sukuriamas), nes jie prisiima informaciją, kurią apskaičiuojate, yra pačiame elemente. Tai sukuria problemą, kai bandote naudoti ką nors, kas keičiasi nepriklausomai nuo elemento laukų, pvz., šiandienos data.
Dabar aš buvau ne susitikime, kur jie nusprendė, kad tai yra būdas, kad Apskaičiuotieji stulpeliai veiks, tačiau jei turėjau atlikti išsilavinę spėjimą, manyčiau, kad jie veikia šiuo veikimo būdu. Įsivaizduokite, kad turite kelių tūkstančių elementų sąrašą, kuriame yra apskaičiuojamasis stulpelis, reikalingas "gyvai" naujinimui. Tai reikštų, kad tam tikras mechanizmas, galbūt laikmačio užduotis, turėtų iterinti kiekvieną elementą, kuris buvo tas apskaičiuojamasis stulpelis kas taip dažnai ir atnaujinti jo reikšmę. Tai gali būti itin apmokestinamas našumo atžvilgiu, nes naudojant didesnius diegimus Ši užduotis gali būti nuolatos vykdoma ir keičiami dalykai. Tai tik mano spėlioti, bet gana prasminga, jei apie tai manote.
Čia pateikiami keli panašūs sprendimai, kurie yra susiję su tracking "SharePoint", kad priimtumėte šiandienos reikšmę, pirmiausia sukurdami stulpelį, pavadintą šiandien, tada įtraukite jį į formulę, tada ją panaikindami. Tai gerai ir gerai, tačiau Prisiminkite, ką pasakiau apie tai, kada yra atnaujinami apskaičiuojamieji stulpeliai. Ši reikšmė bus pakeista tik atnaujinus elementą, o tai reiškia, kad jūsų reikšmės netrukus bus neteisingos, ypač atliekant dienos skaičiavimą.
Aš mačiau kitų, naudodami išmanų "JavaScript", kad parašote reikšmes į puslapį. Tai taip pat veiks, bet aš esu labai kategoriškai prieš kliento scenarijų, kai jį galima išvengti.
Diegimas
Ką daryti? Apskaičiuojamieji stulpeliai yra iš klausimų, vadinamų "lakiomis" funkcijomis, pvz., šiandien. Gali būti, kad galėtume sukurti tam tikrą kodą, kad tai būtų naudinga mums, pvz., apskaičiuotąsias stulpelis, laikmačio užduotis arba suplanuotas procesas ir būtų galima atnaujinti kiekvieną atskirą elementą, kurį reikia apskaičiuoti. Tai atneša mums atgal į veikimo problema minėjau paskutinę pastraipą, nors ir papildomai tai yra trapus sprendimas, kuris būtų labai specifinis į svetainę/sąrašą/stulpelį klausimas. Ant šių dviejų rūpesčių taip pat turėsite surasti Nerdy vaikiną, pvz., save, kas žino, kaip kodą ir įtikinti jį sukurti šį sprendimą. Tačiau yra paprasčiausias būdas!
Jei turite teisių kurti laukus ir redaguoti puslapius savo svetainėje ir turite šiek tiek žinių apie XSLT ir rodinių kūrimą, galite sujungti XSL šabloną, kurį galima įtraukti į sąrašo rodinį, ir tiksliai apskaičiuoti jūsų reikšmę kiekvieną kartą, kai bus prašoma puslapio. Šiame scenarijuje pašalinamas mūsų susirūpinimas dėl našumo ir nereikia sukurti ir įdiegti pasirinktinio kodo naudojant sprendimą.
Tinkamiausio. Kaip tai padaryti?
-
Sukurkite arba pasirinkite lauką, kuris veiks kaip šaltinis. Jis turi būti datos tipas.
-
Sukurkite savo lauką, kuris veiks kaip vietos rezervavimo ženklas, kuriame skaičiuojama reikšmė.
-
Abiejų šių laukų įtraukimas į turinio tipą ir turinio tipo įtraukimas į sąrašą.
-
Sukurkite šio sąrašo rodinį, kuriame yra ir šaltinio, ir vietos rezervavimo ženklų stulpeliai.
-
Nusiųskite XSL šabloną į stilių biblioteką.
-
Nustatykite sąrašo rodinio puslapio dalių ypatybę "XSL saitas" per vartotojo sąsają.
-
Sėkmės!
Išnagrinėkime naudojimo atvejį ir Įgyvendinkite ją. Mūsų klientas norėjo peržiūrėti savo pagrindinį sąrašą, kuris nurodys, kiek laiko į jo būseną buvo įtrauktas konkretus sąrašo elementas. Šiame sąraše pateiktas pasirinktinio svetainės turinio tipas, išvestas iš elemento tipo ir įtrauktas į sąrašą. Jau buvo įvykio imtuvas, kuris fiksuoja kiekvieną kartą, kai sąrašo elemente esantis laukas būsena buvo pakeistas ir įrašė tą datą į stulpelį, vadinamą "datos būsena pakeista". Visa ši laidų sistema nereikalinga ir gali būti atlikta su bet kuriuo datos lauku (taip nutinka tik mūsų įgyvendinimui, tačiau Nesivaržykite eksperimentuoti). Mažiausias, kurį reikės naudoti, yra jūsų šaltinio datos laukas ir vietos rezervavimo ženklo laukas, kad būtų galima atlikti skaičiavimą (daugiau apie šią kitą pastraipą), įtrauktą į jūsų sąrašą, nors siūlyčiau naudoti svetainės stulpelius ir svetainės turinio tipus tuo atveju, jei norite naudoti šį sprendimą kitose svetainės vietose.
Taigi turime mūsų šaltinio datą, kurią galime panaudoti skaičiuodami šiandienos datą. Dabar galime sukurti pasirinktinę svetainės stulpelį, skirtą naudoti kaip konteinerio apskaičiuotąjį reikšmę. Šiuo atveju aš pasirinkau naudoti apskaičiuojamąjį stulpelį, nes jis negalės būti pakeistas į naują arba redaguoti elemento formas, tačiau jį galima pasirinkti Rodyti rodinyje, nes nenorite, kad vartotojai galėtų įvesti pasirinktines reikšmes šiame stulpelyje. Tai gali būti painu, kodėl jis nerodomas rodiniuose ir kt.
Dabar, kai turime mūsų svetainės stulpelį, galime įtraukti jį į mūsų turinio tipus, kurie bus naudojami mūsų sąraše. Toliau reikia sukurti mūsų rodinį, kuris vėliau bus pritaikytas mūsų XSLT. Įsitikinkite, kad kuriate standartinį rodinį, kuriame yra jūsų šaltinio datos stulpelis, ir naują apskaičiuojamąjį stulpelį, kuris veiks kaip vietos rezervavimo ženklas apskaičiuotajai reikšmei.
Dabar turime viską, ko reikia, kad galėtume palaikyti mūsų pasirinktinę senėjimo ataskaitą. Visi lieka sukurti mūsų XSL šabloną, nusiųsti jį į svetainės stilių biblioteką ir susieti jį su mūsų sąrašo rodiniu. XSL šablonas, kurį naudosite, ketina pateikti tam tikrą įprastą "SharePoint" sugeneruotą žymėjimą, kad būtų rodomas rodinys, taip pat mūsų pasirinktiniame antkainyje, kuris naudojamas norint nepaisyti tam tikrų šios dalies dalių, ir apskaičiuoti mums norimą reikšmę.
Kredito, kur yra kreditas, XSL šablonai, kaip atlikti faktinius skaičiavimus, kurių aš naudoju šiam sprendimui, buvo maloningai pateikti "swirch" MSDN forumuose: http://Social.MSDN.Microsoft.com/forums/en-us/sharepointcustomization/Thread/aeda905b-9bc6-40c4-BD22-21306c5cb0d2/
Atsisiųsti XSL stilių aprašą (aging.zip) aš kartu padėjau čia: https://OneDrive.Live.com/?Cid=c262e8e2d59a86d9&permissionsChanged = 1&ID = c262e8e2d59a86d9! 104
Atidarydami šią funkciją savo mėgstamiausioje teksto rengyklėje matysite daug įprastų "SharePoint" XSL žymėjimo, skirto atvaizduoti rodinius, jei slinksite žemyn iki linijos 357 matysite pasirinktinio šablonų, kuriuos įtraukiau į žymėjimą, pradžią, pirmasis yra "Datedifs" šablonas, o po to – "skaičiuoti – Julian – diena" ir "FieldRef_printTableCell_EcbAllowed. Days_x0020_At_x0020_Status". Čia yra trys mūsų šablonai, kurie padės atlikti mūsų skaičiavimus ir parodys mūsų skaičiavimus. Jei ketinate naudoti kitus laukų pavadinimus, nei buvo nurodyta anksčiau šiame straipsnyje, turėsite atlikti šiuos šablonus ir pakeisti visas nuorodas į kitus vardus. Atminkite, kad jūs norite naudoti lauko vidinį pavadinimą, o ne rodomą vardą.
Įsitikinusi, kad šablonas parengtas naudoti, eikite į savo stilių biblioteką ir įkelkite jį į aplanką "XSL stiliaus lapai", tada nukopijuokite saitą į failą. Tai leis mums lengvai keisti jo versiją arba įtraukti ją į skirtingas svetainės dalis, kaip mes prašom.
Tada eikite į savo sąrašą ir pasirinkite rodinį, kurį sukūrėte anksčiau šiame straipsnyje. Meniu "svetainės veiksmai" spustelėkite "redaguoti puslapį".
Raskite savo sąrašo rodinio puslapio dalį puslapyje ir atidarykite puslapio dalies meniu spustelėdami mažą žemyn nukreiptą rodyklę viršutiniame dešiniajame kampe. Šiame meniu pasirinkite "redaguoti puslapio dalį".
Bus atidarytas puslapio dalies meniu dešinėje naršyklės lango pusėje.
Spustelėkite "+", esančią sekcijoje "įvairūs" ir raskite ypatybę "XSL link".
Įklijuokite į "XSL" failo saitą savo stilių bibliotekoje, kurį nukopijavote anksčiau (tai gali būti santykinis arba absoliutus saitas).
Spustelėkite gerai, kad įrašytumėte savo pokyčius, tada spustelėkite mygtuką "baigti redagavimą" puslapio viršuje esančioje juostelėje "puslapis".
Jei viskas buvo tinkamai sukonfigūruota, dabar turėtumėte matyti skaičius stulpelyje "dienos būsena".
Ir pagaliau Štai kaip tai atrodys su kai kuriais įvairių datų bandymų duomenimis:
Suvestinė:
Čia yra: gražiai suformatuotas, tvirtas ir geresnis būdas sukurti senėjimo ataskaitą "SharePoint"., atlikta su paprastu ne kodo įgyvendinimu. Tai yra gana kelios galimos programos, išskyrus vieną naudojimo atvejį, kurį čia tyrinėjome. Kitas įprastas šio tipo ataskaitos scenarijus prijungiate jį prie užduočių sąrašo, kad galėtumėte matyti, kiek laiko yra užduotis buvo sukurta iš pirmo žvilgsnio.
Smagaus žiūrėjimo!
--Justin
Justin Joyce, LANtek
Komentarai
Trūksta
veiksmų 10/8/2012 3:51 AM gerai aš stebinu veiksmus, tačiau turi būti kažko trūksta – kaip XSL žinos, kurią datą naudoti, arba kurį lauką įtraukti į dienas? nekenčiu jo, kai žingsniai praleisti.Be kodo, susitarta!
8/30/2012 12:12 PM Aš sutinku – nemanau, kad tai tikrai laikoma "be kodo". Įdomu tai, kad kai kurios "SharePoint" sukdami turite darbo apskaičiuojamąjį stulpelį, naudodami šiandien... nežinote, kaip arba kodėl, nes negaliu jo gauti, bet vis dar yra ir veikia."Dienų būsena" apskaičiuojamojo stulpelio formulė?
5/2/2012 7:39 AM Justin – kokią formulę naudojote apskaičiuojamoje svetainės stulpelyje (vietos rezervavimo ženklas)? Buvo "= Today"?"SharePoint 2007
" 12/2/2011 11:29 AM Šiuo metu aš nebandžiau taikyti šio sprendimo "SharePoint" 2007, tačiau aš ieškau į jį. Deja, "XslLink" ypatybė nėra įtraukta į puslapio dalį per vartotojo sąsają.Great post
11/30/2011 9:53 AM Sveiki, Didžiosios paštu. Naudoju "SharePoint 2007". Aš neturiu papildomos sekcijos, kaip pažymėta aukščiau. Ar turite veiksmus, skirtus SP2007 konfigūracijai? ačiū.Re: ne kodo sprendimas: dienų rodymas, nes "SharePoint" sąrašo elementas paskutinį kartą buvo pakeistas
10/11/2011 8:24 AM Labas Chris. Didžiosios Find! Aš ruošiuosi pažvelgti į tai, ką paskelbėte tikimės šiandien ir pažiūrėkite, ar galiu šį sprendimą padaryti šiek tiek tvirtesnį. Džiaugiuosi, kad jums patiko skelbimas, ir man labai džiugu, kad jums pavyko rasti sprendimą dėl Europos datos formato. :) -JustinEuropos datos formatų https://sharepointbydummies.WordPress.com/2011/07/13/possible-Work-around-to-date-Format-Issue-SharePoint-2010/
sprendimas 10/11/2011 6:45 AM Labas dar kartą Justin, FYI, radau sprendimo problemą, kurią minėjau anksčiau šiame puslapyje;Europos datų formatai
10/7/2011 3:59 AM Sveiki, Justin Tai tikrai geras sprendimas, ačiū ir tiesiog tokio dalyko aš praleido paskutines dvi dienas ieškote! Tačiau aš turiu šiek tiek problemų su ja ir tikėjausi, kad galėtumėte man padėti. Aš šiek tiek pakeičiau kodą, kad skaičiuotumėte dienų skaičių iki kažko nutiktų, o ne, nes perjungtumėte kintamuosius paskutinėje eilutėje "DateDiff" funkcija; <XSL: Value-of Select = "$JulianToday-$JulianStartDate" ></XSL: Value-of> Tačiau aš galėjau tik ją gauti, kad būtų galima teisingai pakeisti skirtumą per pusę laiko. Pavyzdžiui, su šia data (formatas DD/MM/MMMM); 30/12/2011 Jis apskaičiuojamas tinkamai, bet su šia data (tuo pačiu formatu) 12/10/2011 Ji apskaičiuoja, jei yra 10-Dec-2011, o ne 12-spl-2011. Aš stengiausi tiesiog pakeisti dienos ir mėnesio reikšmių pozicijas "JulianStartDate" kintamajame, panašiai kaip šis; <XSL: with-param name = "mėnuo" pasirinkite = "Tarpinė eilutė (ddwrt: FormatDateTime (eilutė ($StartDate), 1033," yyyyMMdd "), 7, 2)"/> <XSL: with-param name = "diena" Select = "antrinė eilutė (ddwrt: FormatDateTime (eilutė ($StartDate), 1033," yyyyMMdd "), 5, 2)"/> Taip pataisėte problemą su antrąja data, tačiau ji buvo neteisinga pirmą kartą! Aš taip pat Mėginau pakeisti FormatDateTime pokalbius naudoti Europos LCIDs ir įvairius pakeitimus į paskutinį parametrą FormatDateTime (pvz., ddMMyyyy, MMddyyyy) su reikiamais koregavimais į dalinių eilučių pozicinius parametrus be sėkmės. Aš labai vertinu bet kokius patarimus, kuriuos galite pasiūlyti. Ačiū, ChrisBe kodo
9/21/2011 4:27 AM Nemanau, kad XSL atitinka "No-Code" sprendimą, nes XSL kalba nėra skirta visiems, tačiau nėra programavimo. Be to: Nice sprendimas, ačiū!