Bez koda risinājums: dienu parādīšana kopš pēdējās saraksta elementa izmaiņas

Džastins Džoiss, LANtek

Piezīme

Šis raksts ir daļa no ziņu kolekcijas no četru gadu emuāra Get the Point SharePoint lietotājiem.

Pārskats: pielāgotas novecošanas atskaites bez koda

Viena no bieži pieprasītajām SharePoint vietnes funkcionālajām daļām ir uzdevumu vai saraksta vienumu novecošanas atskaite. Citiem vārdiem sakot, cik dienas/mēneši ir pagājuši kopš šī saraksta elementa pēdējās modificēšanas?

Virspusēji tas šķiet ļoti vienkāršs lūgums. Galu galā, mums ir datumi vienumiem, kas tiek izveidoti un modificēti, mums ir iespēja saglabāt pielāgotus datumus, kad noteiktas izmaiņas vienumiem notiek ar notikumu saņēmēju starpniecību. Mums ir aprēķinātas kolonnas, kurās varam iekļaut Excel līdzīgas formulas, lai strādātu ar informāciju. Tas šķiet diezgan vienkāršs priekšlikums. Mēs izvēlamies datuma lauku, izveidojam aprēķināto kolonnu un pēc tam sagatavojam formulu, kas ir līdzīga [DateField] – [Šodien]. Ak, ne tik ātri! Kā zina ikviens, kurš ir mēģinājis veikt šo "vienkāršo" uzdevumu, mēģinājums aprēķinātā kolonnā izmantot kaut ko līdzīgu [Šodien] rada problēmas. Mēģiniet aprēķinātās kolonnas formulas lodziņā ievietot [Šodien], un tiks parādīts kļūdas ziņojums, kas līdzīgs šim:

Kļūdas ziņojums

Kāpēc tas ir? Tas ir saistīts ar aprēķināto kolonnu aprēķināšanas veidu.

Kā piemēru aplūkosim vienkāršu formulu:

= IF( [Kolonna1]<=[Kolonna2], "Labi", "Nav labi")

Tas viss saka, ka, ja Kolonna1 ir mazāka vai vienāda ar Kolonna2, tad parādīt Labi, pretējā gadījumā parādīt Nav labi. Šī ir diezgan tipiska aprēķinātās kolonnas pamatformula, kas veido pamata pieņēmumu par saraksta elementu, kurā ir šīs kolonnas: Kolonna1 un Kolonna2 vērtības nekad nevarēs mainīties bez atjaunināšanas notikuma saraksta elementā.

Tieši tā, aprēķinātās kolonnas tiks pārrēķinātas tikai pēc saraksta atjaunināšanas (vai izveides), jo tās pieņem, ka informācija, kuru jūs aprēķinam, ir iekļauta pašā vienumā. Tas rada problēmas, ja mēģināt lietot kaut ko, kas mainās neatkarīgi no vienuma laukiem, piemēram, šodienas datumu.

Tagad es nebiju sapulcē, kur viņi nolēma, ka šādi darbosies aprēķinātās kolonnas, tomēr, ja man būtu jāizdara izglītots minējums, es pieņemtu, ka tās darbojas šādi veiktspējas nodrošināšanai. Iedomājieties, ja jums būtu vairāku tūkstošu vienumu saraksts, un katrā no tiem būtu aprēķināta kolonna, kam nepieciešama "tiešraide" atjaunināšana. Tas nozīmētu, ka kādam mehānismam, iespējams, taimera darbam, ik pēc tik bieži būtu jāatkārto katrs vienums, kas satur šo aprēķināto kolonnu, un jāatjaunina tā vērtība. Tas varētu būt ārkārtīgi apgrūtinoši veiktspējas ziņā, jo ar lielākiem izvietojumiem šis darbs var pastāvīgi darboties un mainīt lietas. Tas ir tikai mans minējums, bet tam ir diezgan liela jēga, ja jūs par to domājat.

Ir pieejami daži ieteikumi līdzīgiem risinājumiem, kas ietver to, ka SharePoint tiek maldināts, lai tas akceptētu vērtību Šodien, vispirms izveidojot kolonnu ar nosaukumu Šodien, pēc tam pievienojot to formulai un pēc tam izdzēšot. Tie visi ir labi un labi, bet atcerieties, ko es teicu par, kad aprēķinātās kolonnas tiek atjauninātas. Šī vērtība mainīsies tikai tad, kad vienums tiek atjaunināts, kas nozīmē, ka vērtības drīz vien būs nepareizas, it īpaši, ja tiek aprēķināta diena.

Esmu redzējis, kā citi izmanto gudru JavaScript, lai rakstītu vērtības lapā. Tas arī darbotos, bet es esmu diezgan kategoriski pret klienta skriptu, kad no tā var izvairīties.

Ieviešana:

Tātad, ko darīt? Aprēķinātās kolonnas nav piemērotas tā dēvētajām "gaistošajām" funkcijām, piemēram, Šodien. Ir iespējams, ka mēs varētu izstrādāt kādu pielāgotu kodu, lai parūpētos par to mūsu vietā, piemēram, aprēķināta kolonna, taimera darbs vai plānots process, lai nāktu līdzi un atjauninātu katru vienumu, kam nepieciešams šis aprēķins. Tas mūs atgriež pie veiktspējas problēmas, ko es pieminēju pēdējā rindkopā, un turklāt tas ir trausls risinājums, kas būtu ļoti specifisks attiecīgajai vietnei / sarakstam / kolonnai. Papildus šīm divām bažām, jums būtu arī jādodas atrast nerdy puisis, piemēram, es, kurš zina, kā kodēt un pārliecināt viņu izstrādāt šo risinājumu jums. Bet ir vienkāršāks veids!

Ja jums ir tiesības savā vietnē veidot laukus un rediģēt lapas, kā arī ja jums ir nelielas zināšanas par XSLT un skatu izveidi, varat izveidot XSL veidni, kuru var iekļaut saraksta skatā un kura precīzi aprēķinās jūsu vērtību ikreiz, kad tiek pieprasīta lapa. Šis scenārijs novērš mūsu bažas par veiktspēju un nepieprasa pielāgota koda izstrādi un izvietošanu, izmantojot risinājumu.

Ideāli. Kā mēs to darām?

  1. Izveidojiet vai atlasiet lauku, kas darbosies kā avots. Tam ir jābūt datuma tipam.
  2. Izveidojiet mūsu lauku, kas darbosies kā rēķināmās vērtības vietturis.
  3. Pievienojiet abus šos laukus satura tipam un pievienojiet šo satura tipu sarakstam.
  4. Izveidojiet šī saraksta skatu, kurā ir gan avota, gan viettura kolonna.
  5. Augšupielādējiet XSL veidni stilu bibliotēkā.
  6. Iestatiet saraksta skata tīmekļa daļas rekvizītu "XSL saite", izmantojot UI.
  7. Izdevās!

Izpētīsim lietošanas gadījuma piemēru un izstaigāsim ieviešanu. Mūsu klients vēlējās galvenā saraksta skatu, kurā būtu redzams, cik ilgi konkrēts saraksta elements atradās tā statusā. Šajā sarakstā bija pielāgots vietnes satura tips, kas atvasināts no vienuma tipa un pievienots sarakstam. Jau ir izvietots notikumu uztvērējs, kas tver katru reizi, kad statusa lauks saraksta elementā tika mainīts, un saglabā šo datumu kolonnā ar nosaukumu "Datuma statusa maiņa". Visa šī elektroinstalācija nav nepieciešama, un to var izdarīt ar JEBKURU datuma lauku (tas vienkārši tā notiek, tā ir mūsu ieviešana, bet nekautrējieties eksperimentēt). Minimums, kas jums būs nepieciešams, ir avota datuma lauks un viettura lauks, lai glabātu sarakstam pievienotos aprēķinus (vairāk par to nākamajā rindkopā), lai gan es iesaku izmantot vietnes kolonnas un vietnes satura tipus, ja vēlaties šo risinājumu atkārtoti izmantot citās vietnes vietās.

Tātad mums ir avota datums, ko varam izmantot savos aprēķinos, salīdzinot ar šodienas datumu. Tagad varam izveidot pielāgotu vietnes kolonnu, ko izmantot kā aprēķinātās vērtības konteineru. Šajā gadījumā es izvēlējos izmantot aprēķināto kolonnu, jo to nevarēs mainīt jaunu vai rediģētu vienumu veidlapās, bet to var atlasīt parādīšanai skatos, jo mēs nevēlamies, lai lietotāji šajā kolonnā ievadītu patvaļīgas vērtības. Varētu būt mulsinoši, kāpēc tas netiek parādīts skatos utt.

Tagad, kad mums ir mūsu vietnes kolonna, mēs varam to pievienot mūsu satura tipiem, kas tiks izmantoti mūsu sarakstā. Tālāk mums ir jāizveido skats, kas vēlāk tiks pielāgots ar mūsu XSLT. Pārliecinieties, vai esat izveidojis standarta skatu, kurā ir avota datuma kolonna un jaunā aprēķinātā kolonna, kas darbosies kā aprēķinātās vērtības vietturis.

Tagad mums ir viss, kas mums būs nepieciešams, lai atbalstītu mūsu pielāgoto novecošanās ziņojumu. Atliek tikai izveidot mūsu XSL veidni, augšupielādēt to vietnes stilu bibliotēkā un saistīt to ar mūsu saraksta skatu. XSL veidnē, ko izmantosim, būs standarta SharePoint ģenerēta atzīme skata ģenerēšanai, kā arī mūsu pašu pielāgotais marķējums, kas tiek izmantots, lai ignorētu noteiktas tā daļas un aprēķinātu vēlamo vērtību.

Piešķirot kredītu, kur pienākas kredīts, XSL veidnes faktisko aprēķinu veikšanai, ko es izmantoju šim risinājumam, laipni nodrošināja "swirch" MSDN forumos:
http://social.msdn.microsoft.com/Forums/en-US/sharepointcustomization/thread/aeda905b-9bc6-40c4-bd22-21306c5cb0d2/

Lejupielādējiet XSL stila lapu (aging.zip), ko esmu apkopojis, kas atrodas šeit:
https://OneDrive.live.com/?cid=c262e8e2d59a86d9&permissionsChanged=1&id=C262E8E2D59A86D9!104

Atverot to savā iecienītākajā teksta redaktorā, jūs redzēsiet daudz parasto SharePoint XSL atzīmju skatu atveidošanai, ja turpināsiet ritināt uz leju līdz 357. rindai, jūs redzēsiet pielāgoto veidņu sākumu, kuras es pievienoju atzīmēm, pirmā ir "DateDiff" veidne, kam seko "aprēķināt-julian-day" un "FieldRef_printTableCell_EcbAllowed.Days_x0020_At_x0020_Status". Šīs ir mūsu trīs veidnes, kas veiks un parādīs mūsu aprēķinus mūsu skatos. Ja izmantosit citus lauku nosaukumus, nekā norādīts iepriekš šajā rakstā, jums būs jāizskata šīs veidnes un jāaizstāj jebkādas atsauces uz citiem nosaukumiem. Ņemiet vērā, ka šim nolūkam jāizmanto lauka IEKŠĒJAIS nosaukums, nevis parādāmais vārds.

Kad esat pārliecinājies, ka veidne ir gatava darbam, naviģējiet uz savu stila bibliotēku un augšupielādējiet to mapē "XSL stila lapas", pēc tam nokopējiet saiti uz failu. Tas ļaus mums vēlāk viegli veikt izmaiņas vai pievienot to dažādām vietnes daļām, kā mēs vēlamies.

Pēc tam dodieties uz sarakstu un atlasiet skatu, ko izveidojāt iepriekš šajā rakstā. Izvēlnē "Vietnes darbības" noklikšķiniet uz "Rediģēt lapu".

Lapas rediģēšanas komanda izvēlnē Vietnes darbības

Atrodiet lapā savu saraksta skata tīmekļa daļu un atveriet tīmekļa daļas izvēlni, noklikšķinot uz mazās lejupvērstās bultiņas augšējā labajā stūrī. Šajā izvēlnē atlasiet "Rediģēt tīmekļa daļu".

Tīmekļa daļas komandas rediģēšana tīmekļa daļas izvēlnē

Tādējādi pārlūkprogrammas loga labajā pusē tiks atvērta tīmekļa daļas izvēlne.

Tīmekļa daļas izvēlne

Noklikšķiniet uz + sadaļai "Dažādi" un atrodiet rekvizītu "XSL saite".

XSL saites rekvizīts tīmekļa daļas izvēlnē

Stilu bibliotēkā ielīmējiet saiti uz XSL failu, ko nokopējāt iepriekš (relatīvā vai absolūtā saite).

Ielīmēta XSL faila saite

Noklikšķiniet uz "Labi", lai saglabātu izmaiņas, pēc tam noklikšķiniet uz pogas "Pārtraukt rediģēšanu" lentē "Lapa" lapas augšpusē.

Poga Apturēt rediģēšanu cilnē Lapas

Ja viss ir konfigurēts pareizi, tagad kolonnā "Statusa dienas ir jābūt redzamiem" skaitļiem.

Kolonna ar dienu skaitu statusā, kurā tiek rādīts cipars

Un visbeidzot, šeit ir tas, kā tas izskatītos ar dažiem testa datiem dažādos datos:

Vecuma pārskats, kurā attēloti testa dati

Kopsavilkums.

Lūk, tā: labi formatēts, stabils un efektīvāk veiktspējīgs veids, kā izveidot novecošanas atskaiti pakalpojumā SharePoint., komplektā ar vienkāršu ieviešanu bez koda. Tam ir diezgan daudz potenciālo pielietojumu, izņemot vienu lietošanas gadījumu, kuru mēs šeit izpētījām. Cits bieži sastopams šāda veida atskaišu scenārijs ir to pievienošana uzdevumu sarakstam, lai jūs varētu uzreiz redzēt, cik ilgs laiks ir pagājis kopš uzdevuma izveides.

Izbaudiet!

- Džastins

Džastins Džoiss, LANtek

Komentāri

Trūkst darbību
08.10.2012. 03:51
labi, es izpildīju soļus, bet kaut kas trūkst - kā XSL zinās, kuru datumu izmantot, vai kuru lauku pievienot dienas? ienīst, ja soļi tiek nokavēti.

Bez koda, piekrītu!
30.08.2012. 12:12
Es piekrītu - es nedomāju, ka tas tiešām skaitās kā "bez koda".
Interesanti, ka, izmantojot kādu SharePoint skrūvi, man ir strādājoša aprēķinātā kolonna, izmantojot Šodien ... nezinu, kā un kāpēc, jo es nevaru to darīt vēlreiz, bet viens joprojām ir tur un darbojas.

Aprēķinātās kolonnas "Statusa dienas diena" formula?
02.05.2012. 07:39
Justin - Kāda ir formula, ko izmantojāt aprēķinātajai vietnes kolonnai (viettura kolonnai)? Vai tas bija "=šodien"?

SharePoint 2007
12/2/2011 11:29
Pašlaik es neesmu mēģinājis piemērot šo risinājumu SharePoint 2007, tomēr es skatos uz to. Diemžēl, izmantojot lietotāja interfeisu, tīmekļa daļā nav XslLink rekvizītu.

Lieliska ziņa
11/30/2011 9:53
Sveiki!
Lieliska ziņa.
Es izmantoju SharePoint 2007.
Man nav sadaļas Dažādi, kā minēts iepriekš.
Vai jums ir SP2007 konfigurācijas darbības?
Paldies!

Re: Bez koda risinājums: dienu parādīšana, kopš SharePoint saraksta elements pēdējo reizi tika mainīts
10/11/2011 8:24
Sveiks, Kriss.
Lielisks atradums!
Es apskatīšu to, ko jūs šodien publicējāt, cerams, un redzēšu, vai es varu padarīt šo risinājumu nedaudz spēcīgāku.
Es priecājos, ka jums patika ziņa, un es ļoti priecājos, ka jums izdevās atrast risinājumu Eiropas datuma formātam. :)
- Džastins

Eiropas datumu formātu risinājums
10/11/2011 6:45
Sveiki vēlreiz, Džastins,
FYI, es atradu risinājumu jautājumam, ko iepriekš pieminēju šajā lapā;
https://sharepointbydummies.wordpress.com/2011/07/13/possible-work-around-to-date-format-issue-sharepoint-2010/

Eiropas datumu formāti
10/7/2011 3:59
Labdien, Džastina!
Tas ir patiešām labs risinājums, paldies, un tieši tāda lieta, ko esmu pavadījis pēdējās divas dienas, meklējot! Tomēr man ar to ir mazliet problēmas, un es cerēju, ka jūs varētu man palīdzēt.
Esmu nedaudz mainījis jūsu kodu, lai aprēķinātu dienu skaitu, līdz kaut kas notiek, nevis kopš tā laika, pārslēdzot mainīgos funkcijas "DateDiff" pēdējā rindā;

<xsl:value-of select="$JulianToday - $JulianStartDate"></xsl:value-of>

Tomēr es varu panākt, lai atšķirība tiktu pareizi aprēķināta tikai pusi laika. Tātad, piemēram, ar šo datumu (formāts dd/MM/gggg);

30/12/2011

Aprēķins ir pareizs, bet ar šādu datumu (tas pats formāts)

12/10/2011

Aprēķins tiek aprēķināts tā, it kā tas būtu 2011. gada 10. decembris, nevis 2011. gada 12. oktobris.
Es mēģināju vienkārši pārslēgt dienas un mēneša vērtību pozīcijas mainīgajā "JulianStartDate", šādi;

<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)"/>

Un tas izlaboja problēmu ar otro randiņu, tomēr tas bija nepareizs pirmajam randiņam!
Esmu arī mēģinājis mainīt FormatDateTime zvanus, lai izmantotu Eiropas LCID un dažādas izmaiņas pēdējā FormatDateTime parametrā (piemēram, ddMMyyyy, MMddyyyy) ar atbilstošām apakšvirknes pozicionālo parametru korekcijām bez panākumiem.
Es ļoti novērtētu jebkuru padomu, ko varat piedāvāt.
Paldies!
Kriss

No-Code
21.09.2011. 04:27
Es nedomāju, ka XSL kvalificējas kā "no-code" risinājums, jo XSL valodas izpratne nav paredzēta visiem - tomēr tas nav saistīts ar programmēšanu. Bez tam: Jauks risinājums, paldies!