Berlaku Untuk
SharePoint dalam Microsoft 365 SharePoint dalam Microsoft 365 Small Business

oleh Justin Joyce, LANtek

Catatan: Artikel ini merupakan bagian dari kumpulan postingan dari empat tahun blog Dapatkan Poin untuk pengguna akhir SharePoint.

Gambaran Umum: Laporan Penuaan Kustom Tanpa Kode

Salah satu bagian fungsional yang sering diminta dari situs SharePoint adalah laporan penuaan untuk tugas atau item daftar. Dengan kata lain, sudah berapa hari/bulan sejak item daftar ini terakhir diubah?

Di permukaan ini tampaknya permintaan yang sangat sederhana. Bagaimanapun, kami memiliki tanggal untuk item yang dibuat dan dimodifikasi, kami memiliki kemampuan untuk menyimpan tanggal kustom ketika perubahan tertentu pada item dilakukan melalui penerima acara. Kami telah menghitung kolom di mana kami dapat menyertakan rumus seperti Excel untuk bekerja dengan informasi kami. Ini sepertinya proposisi yang cukup lurus ke depan. Kami memilih bidang tanggal, membuat kolom terhitung, lalu melakukan rumus di sepanjang baris [DateField] – [Hari ini]. Ah, tidak begitu cepat sekalipun! Seperti yang diketahui siapa pun yang telah mencoba tugas "sederhana" ini, mencoba menggunakan sesuatu seperti [Hari Ini] dalam kolom terhitung menyebabkan masalah. Cobalah untuk menyisipkan [Hari Ini] ke dalam kotak rumus kolom terhitung akan memberi Anda pesan kesalahan seperti ini:

Pesan kesalahan

Mengapa ini? Nah, itu ada hubungannya dengan cara menghitung kolom dihitung.

Mari kita ambil rumus sederhana sebagai contoh:

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

Semua ini mengatakan bahwa jika Kolom1 kurang dari atau sama dengan Kolom2, maka tampilkan OK, jika tidak tampilkan Tidak OK. Ini adalah rumus dasar yang cukup umum untuk kolom terhitung dan membuat asumsi dasar tentang item daftar yang berisi kolom ini: Nilai untuk Kolom1 dan Kolom2 tidak akan pernah bisa berubah tanpa acara Perbarui pada item daftar.

Itu benar, kolom terhitung hanya akan dihitung ulang ketika daftar diperbarui (atau dibuat) karena mereka menganggap informasi yang Anda hitung terdapat dalam item itu sendiri. Ini membuat masalah ketika Anda mencoba menggunakan sesuatu yang berubah terpisah dari bidang item, seperti tanggal hari ini.

Sekarang saya tidak berada dalam rapat di mana mereka memutuskan bahwa ini adalah cara kolom terhitung akan berfungsi, namun, jika saya harus membuat tebakan terdidik saya akan menganggap bahwa mereka berfungsi dengan cara ini untuk kinerja. Bayangkan jika Anda memiliki daftar beberapa ribu item, masing-masing berisi kolom terhitung yang memerlukan pembaruan "langsung". Itu berarti bahwa beberapa mekanisme, mungkin pekerjaan timer, harus berulang melalui setiap item yang berisi kolom terhitung begitu sering dan memperbarui nilainya. Ini bisa sangat dikenakan pajak dalam hal kinerja karena dengan penyebaran yang lebih besar, pekerjaan ini mungkin terus berjalan dan mengubah berbagai hal. Itu hanya perkiraan saya, tapi itu membuat cukup masuk akal jika Anda berpikir tentang hal itu.

Ada beberapa saran untuk solusi serupa yang mengambang di luar sana yang melibatkan menipu SharePoint untuk menerima nilai Hari Ini dengan terlebih dahulu membuat kolom bernama Hari Ini, lalu menambahkannya ke rumus Anda, lalu menghapusnya. Ini semua baik dan bagus, tetapi ingat apa yang saya katakan ketika kolom terhitung diperbarui. Nilai ini hanya akan berubah ketika item diperbarui yang berarti nilai Anda akan segera salah, terutama dalam kasus perhitungan hari.

Saya telah melihat orang lain menggunakan JavaScript cerdas untuk menulis nilai ke halaman. Ini juga berfungsi, tetapi saya cukup banyak kategoris terhadap skrip klien ketika dapat dihindari.

Pelaksanaan:

Jadi apa yang harus dilakukan? Kolom terhitung berada di luar pertanyaan untuk fungsi yang disebut "volatile" seperti Hari Ini. Ada kemungkinan bahwa kita bisa mengembangkan beberapa kode kustom untuk mengurus ini bagi kita seperti Kolom Terkomputasi, pekerjaan timer, atau proses terjadwal untuk datang dan memperbarui setiap item yang membutuhkan penghitungan ini dibuat. Itu membawa kita kembali ke masalah kinerja yang saya sebutkan dalam paragraf terakhir, dan selain itu itu adalah solusi rapuh yang akan sangat spesifik untuk situs / daftar / kolom yang bersangkutan. Di atas dua kekhawatiran itu, Anda juga harus pergi menemukan seorang pria kutu buku, seperti saya sendiri, yang tahu cara membuat kode dan membujuknya untuk mengembangkan solusi ini untuk Anda. Tapi ada cara yang lebih mudah!

Jika Anda memiliki hak untuk membuat bidang dan mengedit halaman di situs Anda, dan memiliki sedikit pengetahuan tentang XSLT dan membuat tampilan, Anda bisa menyusun templat XSL yang bisa disertakan dalam tampilan daftar dan akan dengan setia menghitung nilai Anda setiap kali halaman diminta. Skenario ini menghapus kekhawatiran kami atas kinerja, dan tidak memerlukan kode kustom untuk dikembangkan dan disebarkan melalui solusi.

Sempurna. Jadi bagaimana kita melakukannya?

  1. Buat atau pilih bidang yang akan bertindak sebagai sumber kami. Ini harus berupa tipe tanggal.

  2. Buat bidang kami yang akan bertindak sebagai tempat penampung untuk nilai yang sedang dihitung.

  3. Tambahkan kedua bidang ini ke tipe konten dan tambahkan tipe konten tersebut ke daftar.

  4. Buat tampilan daftar yang berisi kolom sumber dan tempat penampung.

  5. Unggah templat XSL ke Pustaka Gaya.

  6. Atur properti "Tautan XSL" untuk Komponen Web Tampilan Daftar melalui UI.

  7. Berhasil!

Mari kita telusuri contoh kasus penggunaan dan telusuri implementasinya. Pelanggan kami menginginkan tampilan daftar utama mereka yang akan memberi tahu mereka berapa lama item daftar tertentu telah duduk di statusnya. Daftar ini berisi tipe konten situs kustom yang berasal dari tipe Item dan ditambahkan ke daftar. Sudah ada penerima acara di tempat yang merekam setiap kali bidang status di item daftar diubah dan disimpan tanggal itu ke kolom yang disebut "Status Tanggal Diubah". Semua kabel ini tidak diperlukan, dan dapat dilakukan dengan bidang tanggal ANY (kebetulan ini adalah implementasi kami tetapi jangan ragu untuk bereksperimen). Minimum kosong yang akan Anda perlukan adalah bidang tanggal sumber dan bidang placeholder untuk menahan penghitungan Anda (selengkapnya tentang ini di paragraf berikutnya) ditambahkan ke daftar Anda, meskipun saya sarankan Anda menggunakan kolom situs dan tipe konten situs seandainya Anda ingin menggunakan kembali solusi ini di tempat lain di situs Anda.

Jadi kami memiliki tanggal sumber kami yang dapat digunakan dalam perhitungan kami terhadap tanggal hari ini. Sekarang kita bisa membuat kolom situs kustom untuk digunakan sebagai wadah untuk nilai terhitung kami. Dalam hal ini saya memilih untuk menggunakan kolom terhitung karena tidak akan dapat diubah pada formulir item baru atau edit, tetapi dapat dipilih untuk ditampilkan dalam tampilan karena kami tidak ingin pengguna memasukkan nilai arbitrer ke kolom ini. Mungkin membingungkan mengapa tidak ditampilkan dalam tampilan, dll.

Setelah memiliki kolom situs, kami dapat menambahkannya ke tipe konten yang akan digunakan dalam daftar kami. Selanjutnya, kami perlu membuat tampilan kami yang nantinya akan disesuaikan dengan XSLT kami. Pastikan Anda membuat tampilan standar yang berisi kolom tanggal sumber dan kolom terhitung baru yang akan bertindak sebagai tempat penampung untuk nilai terhitung.

Kami sekarang memiliki segala sesuatu di tempat yang akan kami perlukan untuk mendukung laporan penuaan kustom kami. Yang tersisa hanyalah membuat templat XSL kami, mengunggahnya ke Pustaka Gaya situs, dan menautkannya ke tampilan daftar kami. Templat XSL yang akan kami gunakan akan berisi beberapa markup normal yang dihasilkan SharePoint untuk menghasilkan tampilan serta markup kustom kami sendiri yang digunakan untuk menimpa bagian tertentu dari ini dan menghitung nilai yang kami inginkan untuk kami.

Memberikan kredit ketika kredit jatuh tempo, templat XSL untuk melakukan penghitungan aktual yang saya gunakan untuk solusi ini secara ramah disediakan oleh "swirch" di forum MSDN:http://social.msdn.microsoft.com/Forums/en-US/sharepointcustomization/thread/aeda905b-9bc6-40c4-bd22-21306c5cb0d2/

Unduh lembar gaya XSL (aging.zip) yang telah saya satukan di sini:https://OneDrive.live.com/?cid=c262e8e2d59a86d9&permissionsChanged=1&id=C262E8E2D59A86D9!104

Membuka ini di editor teks favorit Anda, Anda akan melihat banyak markup XSL SharePoint normal untuk menyajikan tampilan, jika Anda terus menggulir ke baris 357 Anda akan melihat awal templat kustom yang saya tambahkan ke markup, yang pertama adalah templat "DateDiff" diikuti dengan "calculate-julian-day" dan "FieldRef_printTableCell_EcbAllowed.Days_x0020_At_x0020_Status". Ini adalah tiga templat kami yang akan membuat dan menampilkan perhitungan kami dalam tampilan kami. Jika Anda akan menggunakan nama bidang yang berbeda dari yang ditentukan sebelumnya dalam artikel ini, Anda harus menelusuri templat ini dan mengganti referensi apa pun ke nama lain. Ingat, untuk ini, Anda akan ingin menggunakan nama INTERNAL bidang bukan nama tampilan.

Setelah anda puas bahwa template sudah siap untuk pergi, navigasikan ke Pustaka Gaya Anda dan unggah di bawah folder "Lembar Gaya XSL" lalu salin tautan ke file. Ini akan memungkinkan kami untuk dengan mudah membuat perubahan pada situs tersebut nanti, atau menambahkannya ke berbagai bagian situs sesering yang kami harapkan.

Berikutnya, masuk ke daftar Anda dan pilih tampilan yang Anda buat sebelumnya dalam artikel ini. Dari menu "Tindakan Situs" klik "Edit Halaman".

Perintah Edit Halaman pada menu Tindakan Situs

Temukan Komponen Web Tampilan Daftar Anda di halaman dan buka menu Komponen Web dengan mengklik panah kecil yang menghadap ke bawah di sudut kanan atas. Dari menu ini pilih "Edit Komponen Web".

Perintah Edit Komponen Web pada menu Komponen Web

Ini akan membuka menu Komponen Web di sisi kanan jendela browser Anda.

Menu Komponen Web

Klik pada bagian + untuk "Lain-lain" dan temukan properti "Tautan XSL".

Properti Link XSL pada menu Komponen Web

Tempelkan di tautan ke file XSL anda di Pustaka Gaya yang Anda salin sebelumnya (ini bisa berupa tautan relatif atau mutlak).

Link file XSL ditempelkan di

Klik "OK" untuk menyimpan perubahan Anda lalu klik tombol "Hentikan Pengeditan" di pita "Halaman" di bagian atas halaman.

Tombol Hentikan Pengeditan pada tab Halaman

Jika semuanya dikonfigurasi dengan benar, sekarang Anda akan melihat angka dalam kolom "Hari Pada Status".

Kolom Hari Pada Status menampilkan angka

Dan akhirnya, inilah tampilannya dengan beberapa data uji dari berbagai tanggal:

Laporan Umur menampilkan data uji

Ringkasan:

Ada: cara yang diformat dengan baik, kuat, dan lebih baik untuk membuat laporan penuaan di SharePoint., lengkap dengan implementasi tanpa kode sederhana. Ini memiliki beberapa aplikasi potensial selain dari satu kasus penggunaan yang kami jelajahi di sini. Skenario umum lain untuk tipe laporan ini adalah melampirkannya ke daftar tugas sehingga Anda bisa melihat berapa lama sudah sejak tugas dibuat secara sekilas.

Silakan dinikmati!

--Justin

Justin Joyce, LANtek

Komentar

Langkah-langkah yang hilang 8/10/2012 03:51 AM ok saya mengikuti langkah-langkah, tetapi harus ada sesuatu yang hilang - bagaimana XSL akan tahu tanggal mana yang akan digunakan, atau bidang mana yang ditambahkan hari sejak itu? membencinya ketika langkah-langkah terlewat.

No-Code, setuju! 30/8/2012 12:12 PM Saya setuju - Saya tidak berpikir ini benar-benar dihitung sebagai "tanpa kode".Menariknya, melalui beberapa sekrup SharePoint, saya memiliki kolom terhitung yang berfungsi menggunakan Hari Ini... tidak yakin bagaimana atau mengapa karena saya tidak bisa mendapatkannya untuk melakukannya lagi, tetapi yang masih ada dan bekerja.

Rumus untuk Kolom Terhitung "Hari Pada Status"? 5/2/2012 07:39 AM Justin - Apa rumus yang Anda gunakan untuk kolom situs terhitung "Hari Pada Status" (kolom tempat penampung)? Apakah "=hari ini"?

SharePoint 2007 12/2/2011 11:29 AM Saat ini saya belum mencoba menerapkan solusi ini ke SharePoint 2007, namun saya sedang mencarinya. Sayangnya tidak ada properti XslLink yang dimunculkan di komponen web melalui UI.

Postingan Hebat 30/11/2011 09:53 AM Halo Posting besar.Saya menggunakan SharePoint 2007.Saya tidak memiliki bagian Misc seperti yang disebutkan di atas.Apakah Anda memiliki langkah-langkah untuk konfigurasi SP2007? Terima kasih.

Re: Solusi tanpa kode: Menampilkan hari sejak item daftar SharePoint terakhir diubah 10/11/2011 8:24 AM Hai Chris.temuan yang bagus! Saya akan melihat apa yang Anda posting mudah-mudahan nanti pada hari ini dan melihat apakah saya bisa membuat solusi ini sedikit lebih kuat.Saya senang Anda menyukai posting, dan saya sangat senang Anda dapat menemukan solusi untuk format tanggal Eropa. :) -Justin

Solusi untuk Format Tanggal Eropa 10/11/2011 06:45 AM Hai lagi Justin, FYI, saya menemukan solusi untuk masalah yang saya sebutkan sebelumnya di halaman ini;https://sharepointbydummies.wordpress.com/2011/07/13/possible-work-around-to-date-format-issue-sharepoint-2010/

Format Tanggal Eropa 10/7/2011 03:59 AM Hai Justin, Ini adalah solusi yang sangat baik terima kasih, dan hanya hal semacam yang saya habiskan dua hari terakhir mencari! Namun saya mengalami sedikit masalah dengan itu dan saya berharap Anda bisa membantu saya.Saya telah mengubah kode Anda sedikit untuk menghitung jumlah hari sampai sesuatu terjadi, bukan karena itu, dengan mengalihkan variabel di baris terakhir fungsi "DateDiff"; <xsl:value-of select="$JulianToday - $JulianStartDate"></xsl:value-of> Namun saya hanya bisa mendapatkannya untuk menghitung perbedaan setengah waktu dengan benar. Jadi misalnya dengan tanggal ini (format dd/MM/yyyy); 30/12/2011 Ini menghitung dengan benar, tetapi dengan tanggal ini (format yang sama) 10/12/2011 Ini menghitung seolah-olah 10-Des-2011 bukan 12-Okt-2011.Saya hanya mencoba mengalihkan posisi nilai hari dan bulan dalam variabel "JulianStartDate", seperti ini; <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)"/> Dan ini memperbaiki masalah dengan tanggal kedua, namun kemudian tidak benar untuk tanggal pertama! Saya juga telah mencoba mengubah panggilan FormatDateTime untuk menggunakan LCID Eropa dan berbagai perubahan ke parameter terakhir FormatDateTime (misalnya ddMMyyyy, MMddyyyy) dengan penyesuaian yang sesuai untuk parameter posisi substring tanpa keberhasilan.Aku sangat menghargai saran yang bisa kau tawarkan.Terima kasih Chris

Tanpa Kode 21/9/2011 04:27 AM Saya tidak berpikir bahwa XSL memenuhi syarat sebagai solusi "tanpa kode", karena memahami bahasa XSL bukan untuk semua orang - namun tidak melibatkan pemrograman. Selain itu: Solusi yang bagus, terima kasih!

Perlu bantuan lainnya?

Ingin opsi lainnya?

Jelajahi manfaat langganan, telusuri kursus pelatihan, pelajari cara mengamankan perangkat Anda, dan banyak lagi.