Løsning uten kode: viser dager etter at et SharePoint-listeelement sist ble endret

Løsning uten kode: viser dager etter at et SharePoint-listeelement sist ble endret

Viktig: Denne artikkelen er maskinoversatt, se ansvarsfraskrivelsen. Du finner den engelske versjonen av artikkelen her som referanse.

20/9/2011 3:01 PM

ved Jakob Joyce, LANtek

Merknad: Denne artikkelen er en del av en samling av innlegg fra fire år i få punktet bloggen for sluttbrukere for SharePoint.

Oversikt: Egendefinert aldersfordelt rapporter uten kode

En av de ofte forespurte funksjonelle delene i et SharePoint-område er aldersfordelt saldoliste for aktiviteter eller listeelementer. Hvor mange dager/måneder har med andre ord det er fordi dette listeelementet sist ble endret?

Dette virker en veldig enkel forespørsel på overflaten. Når alle har vi datoer for elementer som blir opprettet og endret, har vi muligheten til å lagre egendefinert datoer når utføres bestemte endringer i elementer gjennom hendelsesmottakere. Vi har beregnede kolonner der vi kan ta med Excel-lignende formler for å arbeide med våre informasjon. Dette kan virke som en ganske ordinær løsning. Vi velger du et datofelt, opprette en beregnet kolonne, og gjør deretter en formel noe langs linjene i DateField – [i dag]. AH, ikke så raskt gjennom! Som alle som har prøvd denne "enkel" oppgaven vet, prøver å bruke omtrent slik [i dag] i en beregnet kolonne årsaker til problemer. Prøv å sette inn [i dag] i den beregnede kolonnen formelboksen gir deg en feilmelding om omtrent som dette:

Feilmelding

Hvorfor er dette? Vel, den har å gjøre med måten det beregnede kolonner er.

La oss ta en enkel formel som eksempel:

= IF ( [Column1] < = [Column2], "OK", "Ikke OK")

Vise ellers ikke OK alt dette sier er som Hvis Kolonne1 er mindre enn eller lik Column2, Vis deretter OK. Dette er en vanlig ganske enkelt formel for en beregnet kolonne og det er en antas det grunnleggende om listeelementet som inneholder disse kolonnene: verdiene for Kolonne1 og Column2, aldri skal kunne endre uten en oppdatering hendelse på listeelementet.

Det er riktig, beregnede kolonner blir bare omberegne når listen er oppdatert (eller opprettet) etter at de forutsetter at informasjonen du beregner lagres i selve elementet. Dette oppretter et problem når du prøver å bruke noe som endrer uavhengig av elementets felt, for eksempel dagens dato.

Nå jeg ikke er i møtet der de kommet frem til at dette er hvordan beregnede kolonner fungerer, men hvis jeg måtte foreta en noen kvalifiserte antatt jeg vil forutsetter at de fungerer på denne måten for ytelse. Tenk deg hvis du hadde en liste over flere tusen elementer, som inneholdt en beregnet kolonne som trengs "live"-oppdatering. Det betyr at som noen metode, kanskje måtte en tidtakerjobb gå gjennom hvert element som inneholdt den beregnede kolonnen every så ofte og oppdatere verdien. Dette kan være svært taxing med hensyn til ytelsen fordi med større distribusjoner denne jobben kan kontinuerlig kjører og endre ting. Det er bare Mine antatt, men det er ganske mye mening Hvis du synes om den.

Det finnes noen forslag til lignende løsninger flytende det som involverer å lure SharePoint i til å godta en i dag-verdi ved først å opprette en kolonne kalt i dag, og deretter legge det til i formelen, og deretter slette den. Dette er alle bra, men husk det jeg sagt om ved oppdatering av beregnede kolonner. Denne verdien endres bare når elementet er oppdatert noe som betyr at verdiene vil snart være feil, spesielt når det gjelder en dag beregning.

Jeg har sett andre ved hjelp av smarte JavaScript skrive verdiene til siden. Dette fungerer også, men jeg er ganske mye categorically mot klientskript når den kan unngås.

Implementering:

Så hva du må gjøre? Beregnede kolonner er borte spørsmål for såkalt "flyktige" funksjoner som i dag. Er det mulig at vi kan utvikle noen egendefinert kode for å ta seg av dette for oss for eksempel en beregnet kolonne, tidtakerjobben, eller planlagt prosessen kommer og oppdatere hver enkelt element som må denne beregningen som er gjort. Som gir oss tilbake til problemet med ytelsen jeg nevnt i det siste avsnittet gjennom, og i tillegg er det en brittle løsning som kan være svært spesifikke for området / / listekolonnen aktuelle. Oppå disse to hensyn må du også gå til å finne en nerdy guy, for eksempel selv, som vet hvordan du kode og lure ham til å utvikle denne løsningen for deg. Men det finnes en enklere måte!

Hvis du har tillatelse til å opprette felt og redigere sider på nettstedet, og har litt kunnskap om XSLT og oppretting av visninger, kan du sette sammen en XSL-mal som kan være med i en listevisning og vil beregne hilsen din verdi hver gang siden kreves. Dette scenarioet fjerner våre problematisk over ytelsen, og kreve ikke egendefinert kode utviklet og distribueres via en løsning.

Perfekte. Så hvordan gjør vi det?

  1. Opprett eller Velg feltet som skal fungere som våre kilde. Det må være en datotypen.

  2. Opprette vår felt som skal fungere som en plassholder for verdien som blir beregnet.

  3. Legge til begge disse feltene i en innholdstype, og legge til denne innholdstypen i en liste.

  4. Opprette en visning av listen som inneholder både kilde- og plassholder kolonner.

  5. Last opp XSL-mal i stiler-biblioteket.

  6. Angi egenskapen "XSL-kobling" for webdelen for listevisning i brukergrensesnittet.

  7. Vellykket!

La oss utforske brukstilfelle et eksempel, og gå gjennom implementeringen. Vår kunde ønsket en visning av deres hovedlisten som vil fortelle dem hvor lenge et bestemt element hadde blitt sitter på statusen. Denne listen finnes en egendefinert områdeinnholdstype type avledet fra elementtypen og lagt til i listen. Det var allerede en hendelsesmottaker i stedet registrerer hver gang dette statusfeltet i listeelementet ble endret og lagret denne datoen i en kolonne kalt "Datoen Status endres". Denne kabel kreves ikke og kan utføres med en hvilken som helst datofeltet (den bare så skjer dette er vår implementering, men eksperimentere gjerne). Du trenger bare minimum er kilde datofelt og plassholder feltet skal inneholde beregningen (mer informasjon om dette i neste avsnitt) lagt til i listen, selv om jeg foreslår at du bruker områdekolonner og områdeinnholdstyper i tilfelle du vil bruke denne løsningen andre steder på området.

Så har vi vår kilde datoen som vi kan bruke i vår beregning mot dagens dato. Nå kan vi opprette en egendefinert områdekolonne skal brukes som en beholder for våre beregnet verdi. I dette tilfellet velger jeg å bruke en beregnet kolonne, fordi det ikke vil kunne endres på den nye eller redigere element skjemaer, men kan velges for visning i visningene fordi vi ikke vil at brukere å angi vilkårlig verdiene i denne kolonnen. Det kan være forvirrende om hvorfor det ikke vises i visninger og så videre.

Nå som vi har vår områdekolonne, kan vi legge den til vår innholdstyper for områder som skal brukes i listen. Deretter må vi opprette vår visning senere tilpasses med våre XSLT. Kontroller at du har opprettet en standardvisning som inneholder kilde dato-kolonnen og den nye beregnede kolonnen som skal fungere som en plassholder for beregnet verdi.

Vi har nå alt på plass som vi krever til å støtte våre egendefinerte aldersfordelt saldoliste. Alle denne forblir oppretter våre XSL-mal, opplasting til områdets stilbibliotek, og koble den til vår listevisning. XSL-mal skal vi bruke skal inneholde noen vanlige SharePoint genererte markering for å generere visningen i tillegg til vår egen egendefinert kode som brukes til å overstyre bestemte deler av dette og beregne våre ønsket verdi for oss.

Gir kredit der kredit forfaller, XSL-maler for å gjøre de faktiske beregningene som jeg bruker for denne løsningen graciously fikk av "swirch" i MSDN-forum:
http://social.msdn.microsoft.com/Forums/en-US/sharepointcustomization/thread/aeda905b-9bc6-40c4-bd22-21306c5cb0d2/

Last ned XSL-stilarket (aging.zip) jeg har satt sammen plassert her:
https://OneDrive.live.com/?cid=c262e8e2d59a86d9&permissionsChanged=1&id=C262E8E2D59A86D9! 104

Åpne dette i favoritt tekstredigeringsprogrammet du vil se mye normal SharePoint XSL-kode for gjengivelse visninger, hvis du Bla ned til linjen du vil se starten av de egendefinerte malene jeg har lagt til markeringen 357, den første som blir malen «DateDiff» etterfulgt av "beregne juliansk-dagers" og "FieldRef_printTableCell_EcbAllowed.Days_x0020_At_x0020_Status". Dette er vår tre maler som du vil opprette og vise våre beregninger i vår visninger. Hvis du har tenkt å bruke ulike feltnavn enn det som ble angitt tidligere i denne artikkelen, må du gå gjennom disse malene og erstatt eventuelle referanser til de andre navnene. Husk at for dette vil du bruke interne navnet på feltet ikke visningsnavnet.

Når du er fornøyd at malen er klar til å gå, gå til biblioteket for stil og laste den opp under mappen "XSL-stilark" deretter kopiere ned koblingen til filen. Dette vil gjør at vi kan enkelt endre det senere, eller legge den til ulike deler av området som vi ønsker.

Gå til listen, og Velg visningen du opprettet tidligere i denne artikkelen. Fra "Områdehandlinger-menyen klikker du på"Rediger side".

Rediger side-kommando på Nettstedshandlinger-menyen

Finn din webdel for listevisning på siden, og åpne webdel-menyen ved å klikke den lille pilen vendt nedover øverst i høyre hjørne. Velg "Rediger webdel" fra denne menyen.

Kommandoen Rediger nettstedsdel på menyen Nettstedsdel

Dette åpner opp webdel-menyen på høyre side i nettleservinduet.

Nettdel-meny

Klikk + for "Diverse-delen, og finner du egenskapen"XSL-kobling".

Egenskaper for XSL-kobling på Nettstedsdel-menyen

Lim inn koblingen i XSL-filen i stiler-biblioteket som du kopierte ned tidligere (kan være en relativ eller absolutt kobling).

Innlimt XSL-filkobling

Klikk "OK" for å lagre endringene og deretter klikker du knappen "Stopp redigering" på «Side» båndet øverst på siden.

Stopp redigering-knapp på Side-fanen

Hvis alt er riktig konfigurert skal du nå se tall i din "" kolonne.

Kolonne for statusdager som viser tall

Og til slutt kan du her se hvordan den vil se ut med noe testdata med ulike datoer:

Aldersfordelt saldoliste viser testdata

Sammendrag:

Det er det: en flott formatert, robust og bedre ytelse måten å opprette en aldersfordelt saldoliste i SharePoint. fullføre med en enkel uten kode implementering. Dette er helt noen potensielle programmer bortsett fra den brukstilfelle vi utforsket her. En annen vanlig scenario for denne typen rapport er legge dem til i en aktivitetsliste slik at du kan se hvor lenge det er etter at en aktivitet ble opprettet med et øyekast.

Nyt!

--Jakob

Jakob Joyce, LANtek

Kommentarer

Trinn manglende
10/8/2012 3:51 AM
ok jeg fulgte fremgangsmåten, men det må være noe manglende – hvordan XSL vet hvilke datoen som skal brukes, eller som feltet for å legge dager siden til? liker når trinnene er tapt.

Uten kode, godtatt!
8/30/2012 12:12 PM
jeg godtar – jeg tror ikke at dette virkelig teller som "ingen kode".
Interestingly, gjennom noen screwup av SharePoint, jeg har en beregnet kolonne for arbeid med IDAG... ikke er sikker på hvordan og hvorfor fordi jeg ikke få det til å gjøre det på nytt, men det er fortsatt der og fungerer.

Formelen for «Dager på statusen» beregnet kolonne?
5/2/2012 7:39 AM
Jakob - Hva er formelen du brukte for din "" beregnet områdekolonne (plassholderkolonne)? Ble det "= i dag"?

SharePoint 2007
12/2/2011 11:29 AM
for øyeblikket jeg har ikke forsøkt å bruke denne løsningen på SharePoint 2007, men jeg leter i til den. Det finnes dessverre ingen XslLink egenskap hentet frem i webdelen i brukergrensesnittet.

Flott innlegg
11/30/2011 9:53 AM
Hallo,
flott innlegg.
jeg bruker SharePoint 2007.
jeg ikke har en diverse-inndeling som nevnt ovenfor.
Har du trinnene for SP2007 konfigurasjon?
Takk.

SV: Uten kode løsning: viser dager siden et SharePoint-listeelement sist ble endret
10/11/2011 8:24 AM
Hi Chris.
gode søk!
i skal ta en titt på hva du la for senere i dag og finne ut om i kan denne løsningen litt mer robust.
jeg glad du liker innlegget, og jeg svært glad kunne du finne en løsning til europeiske datoformat. :)
-Jakob

Løsning for europeiske datoformater
10/11/2011 06:45:00
Hi igjen Jakob
FYI, finner jeg en løsning på problemet jeg nevnt tidligere på denne siden.
https://sharepointbydummies.wordpress.com/2011/07/13/possible-work-around-to-date-format-issue-sharepoint-2010/

Europeisk datoformater
10/7/2011 3:59 AM
Hi Jakob
dette er en veldig god løsning Takk, og bare typen ting jeg har brukt de to siste dagene som er på jakt etter! Men jeg har litt av et problem med den, og jeg ble håper du kan hjelpe meg.
jeg har endret koden litt til calcultate antall dager til noe skjer, i stedet for siden, ved å bytte variablene i den siste linjen i «DateDiff-funksjonen.

< xsl: value-for Merk = "$JulianToday - $JulianStartDate" >< / xsl: value-av >

imidlertid jeg bare er mulig å få det til caclulate forskjellen på riktig måte halvparten av tiden. Så for eksempel med denne datoen (formatet dd/MM/ÅÅÅÅ);

30/12/2011

beregnes riktig, men med denne datoen (samme format)

10/12/2011

beregnes som hvis Hvis 10-DES-2011 i stedet for 12-oktober 2011.
jeg forsøkte bytte ganske enkelt plasseringene dag og måned verdiene i "JulianStartDate"-variabel, som dette.

< xsl: med parameteren name = "Måned" select="substring(ddwrt:FormatDateTime(string($StartDate), 1033,"ååååmmdd"), 7, 2)" / >
< xsl: med parameteren navn = "Dag" select="substring(ddwrt:FormatDateTime(string($StartDate), 1033,"ååååmmdd"), 5, 2)" / >

og dette korrigert problemet med den andre datoen, men den var deretter feil for den første datoen!
jeg også har prøvd å endre FormatDateTime-anrop til å bruke europeiske LCID-verdier og ulike endringer i den siste parameteren av FormatDateTime (for eksempel ddMMyyyy, MMddyyyy) med de riktige justeringene delstrengen posisjonelt parameterne uten å lykkes.
jeg setter pris på en hvilken som helst råd du kan tilby stor grad.
Takk,
Chris

Uten kode
21/9/2011 4:27 AM
jeg tror ikke at XSL kvalifiserer som en løsning for "uten kode", som forstå XSL-språk ikke er for alle – men ikke den informasjon om programmering. I tillegg som: snill løsning, Takk!

Merknad: Ansvarsfraskrivelse for maskinoversettelse: Denne artikkelen er oversatt av et datasystem i stedet for en oversetter. Microsoft tilbyr disse maskinoversettelsene slik at brukere som ikke snakker engelsk, får tilgang til innhold om Microsoft-produkter, -tjenester og –teknologier. Ettersom artikkelen er maskinoversatt, kan den inneholde feil i vokabular, syntaks eller grammatikk.

Utvid ferdighetene dine
Utforsk opplæring
Vær først ute med de nye funksjonene
Bli med i Office Insiders

Var denne informasjonen nyttig?

Takk for tilbakemeldingen!

Takk for tilbakemeldingen! Det høres ut som det kan være lurt å sette deg i kontakt med én av våre Office-kundestøtteagenter.

×