無程式碼解決方案:顯示自上次變更清單專案以來的天數

無程式碼解決方案:顯示自上次變更清單專案以來的天數

依 Justin Joyce、LANtek

附註: 本文是四年的文章集合的一部分,可取得 SharePoint 最終使用者 的要點 博客。

概覽:不含程式碼的自訂老化報告

SharePoint 網站其中一個常見的功能元件是任務或清單專案的帳齡報告。 換句話說,自上次修改此清單專案以來,有多少天/幾個月已完成?

在表面上,這似乎是一個非常簡單的要求。 畢竟,我們有建立及修改專案的日期,我們可以在事件接收器進行特定變更時,儲存自訂日期的功能。 我們有匯出的資料行,我們可以在其中加入 Excel 等公式,以與我們的資訊搭配使用。 這看起來就像是相當直接的直向式投影。 我們會挑選一個日期欄位、建立計算結果欄,然後沿著 [DateField] 行的 []-[Today]] 來執行公式操作。 噢,不過太快了! 如果有人嘗試「簡單」工作,但嘗試在計算結果欄中使用諸如 [Today] 之類的內容,會導致問題。 嘗試將 [Today] 插入您的計算結果欄的公式方塊中,會出現如下所示的錯誤訊息:

錯誤訊息

為什麼這麼做? 因此,它必須以計算計算結果欄的方式進行。

我們以簡單的公式做為範例:

= IF ( [欄 1] <= [欄2等],"確定","Not OK" )

這表示如果欄1小於或等於欄2等,則顯示 [確定],否則顯示 [不正常]。 這是相當典型的計算結果欄基本公式,並針對包含這些資料行的清單專案進行基本假設:欄1和欄2等的值永遠無法在清單專案上變更,而不需要更新事件。

那就是,計算結果欄只會在清單更新時重新計算 (或建立) ,因為它們會假設您要計算的資訊包含在專案本身中。 當您嘗試使用與專案欄位無關的內容(例如今天的日期)時,就會產生問題。

現在我不在會議中,他們決定計算欄將起作用的方式,不過,如果我必須讓他們以這種方式發揮效能。 假設您有幾千個專案的清單,每個專案都包含需要「即時」更新的計算結果欄。 這表示某些機制(可能是計時器作業)必須逐一遍歷每個包含該計算結果欄的專案,並更新其值。 這個作業可能會持續執行並變更專案,因此在效能方面可能會有極大的負擔。 這只是我的猜測,但如果您想知道它,這會相當有意義。

我們有一些針對浮動的解決方案所提供的相關建議,其中包括欺騙 SharePoint,只要建立名為 Today 的欄,然後再將它新增到您的公式,然後將它刪除。 這些全都不錯,但請記住在計算結果欄更新時所說的資訊。 這個值只會在專案更新時變更,這表示您的值很快就會不正確,尤其是在日期計算的情況下。

我已看到其他人使用聰明 JavaScript 將值寫入頁面。 這也能正常運作,但是當您可以避免使用用戶端腳本時,我會有很大的 categorically。

部署

該怎麼辦? 計算結果欄的問題就是所謂的「可變」函數,就像今天這樣。 我們可以開發一些自訂程式碼來處理此問題,例如計算結果欄、計時器作業或排程的程式,並更新每一個需要此計算的專案。 這會讓我們回到最後一段中提到的效能問題,此外,也是一種 brittle 解決方案,該方案對於問題中的網站/清單/資料行來說是非常特殊的。 在這兩個擔心的情況下,您也必須找到自己的 nerdy 專家(例如自己),瞭解如何程式碼,並誘使他為您開發這個方案。 但有更簡單的方法!

如果您有許可權在您的網站上建立欄位和編輯頁面,並對 XSLT 及建立視圖有一些瞭解,您可以將 XSL 範本放在清單視圖中,並在每次要求頁面時,以切實計算您的值。 這個案例會將我們的問題排除在效能上,而且不需要透過方案來開發及部署自訂程式碼。

理想. 那我們該怎麼做呢?

  1. 建立或選取將充當我們來源的欄位。 它必須是日期類型。

  2. 建立將充當所計算之值的預留位置的欄位。

  3. 將這兩個欄位新增至內容類型,並將該內容類型新增至清單。

  4. 建立包含 [來源] 和 [預留位置] 欄的清單視圖。

  5. 將 XSL 範本上傳到樣式庫。

  6. 透過 UI 設定清單視圖網頁元件的 [XSL 連結] 屬性。

  7. 成功!

讓我們來探索範例使用案例,並逐步完成實現。 我們的客戶想要查看其主要清單,告訴他們特定清單專案在其狀態中的時間。 此清單包含從專案類型衍生的自訂網站內容類型,並新增至清單中。 已有一個事件收件者,其中會捕獲清單專案上的狀態欄位已變更,並將日期儲存到名為「日期狀態已變更」的欄。 所有這種佈線都不是必要的,而且您可以使用任何日期欄位來完成 (它就是我們的實現,但在這種情況下,您可以免費實驗) 。 您最少需要的是 [來源日期] 欄位和 [預留位置) ] 欄位來保留您的 (計算,但如果您想要在您的網站上的其他位置重複使用此方案,您可以使用網站欄和網站內容類型。

所以我們有我們的來源日期,我們可以在我們的計算結果中使用今天的日期。 現在,我們可以建立自訂網站欄,以做為計算值的容器。 在這種情況下,我選擇使用計算結果欄,因為它無法在新的或編輯專案表單上變更,但您可以選取在 [視圖] 中顯示,因為我們不希望使用者在此欄中輸入任意值。 這可能會令人混淆,原因是它不會顯示在 [視圖] 中等等。

現在我們有了 [網站] 欄,我們可以將它新增至將在清單中使用的內容類型。 接下來,我們需要建立會在稍後使用 XSLT 進行自訂的視圖。 請確定您已建立一個標準視圖,其中包含 [來源日期] 資料行,以及將充當計算結果之預留位置的新計算結果欄。

我們現在已將我們所需的一切放在一起,以提供自訂的過時報告。 剩下的全部工作就是建立 XSL 範本、將其上傳至網站的樣式庫,以及將其連結至我們的清單視圖。 我們將使用的 XSL 範本會包含一些標準的 SharePoint 產生標記,用於產生視圖,以及我們自己的自訂標記,用來覆寫這部分的特定部分,並計算我們想要的值。

在信用到期的點數中,您可以在 MSDN 論壇上 graciously 「swirch」提供的用來執行此方案之實際計算的 XSL 範本:
HTTP://social.msdn.microsoft.com/Forums/en-US/sharepointcustomization/thread/aeda905b-9bc6-40c4-bd22-21306c5cb0d2/

下載 XSL 樣式表 ( # A0) 我已將它放在以下位置:
Https://OneDrive.live.com/?cid=c262e8e2d59a86d9&permissionsChanged = 1&ID = c262e8e2d59a86d9! 104

在您最愛的文字編輯器中開啟此功能。如果您繼續向下滾動至 [行 357],您會看到我新增至標記的自訂範本開始,第一個是 "DateDiff" 範本,後面接著是 "計算-julian-日" 和 "FieldRef_printTableCell_EcbAllowed. Days_x0020_At_x0020_Status"。 以下是我們的三個範本,可在我們的 [視圖] 中進行及顯示計算。 如果您要使用的功能變數名稱與本文先前所指定的名稱不同,您將需要流覽這些範本,並取代其他名稱的參照。 請記住,您會想要使用欄位的內部名稱,不是顯示名稱。

當您認為範本已準備就緒,請流覽至您的樣式庫,然後將其上傳到 [XSL 樣式表單] 資料夾底下,然後複製到檔案的連結。 這可讓我們稍後輕鬆地對其進行變更,或將它新增到網站的不同部分。

接著,移至您的清單,然後選取您先前在本文中建立的視圖。 在 [網站動作] 功能表上,按一下 [編輯頁面]。

[網站動作] 功能表上的 [編輯頁面] 命令

在頁面上尋找您的清單視圖網頁元件,然後按一下右上角的小型向下箭號,開啟 [網頁元件] 功能表。 從這個功能表中,選取 [編輯網頁元件]。

在 [網頁組件] 功能表上編輯 [網頁組件] 命令

這將會開啟瀏覽器視窗右側的 [網頁元件] 功能表。

[網頁組件] 功能表

按一下 [其他] 區段的 +,找出 [XSL 連結] 屬性。

[網頁組件] 功能表上的 XSL 連結屬性

將連結貼到您先前複製的樣式庫中的 XSL 檔案連結中 (這可以是相對或絕對連結) 。

貼入的 XSL 檔案連結

按一下 [確定] 以儲存變更,然後在頁面頂端的 [頁面] 功能區上,按一下 [停止編輯] 按鈕。

[頁面] 索引標籤上的 [停止編輯] 按鈕

如果所有設定都正確無誤,您現在應該會在 [您的日期的狀態] 欄中看到數位。

顯示數量的 [狀態天數] 欄

最後,以下是不同日期的一些測試資料所看起來的樣子:

顯示測試資料的年限報表

摘要:

就是:在 SharePoint 中建立老化報告的格式良好、穩健且更好的執行方式。,請完成簡單的無程式碼實現。 在這裡我們探索的一個使用案例旁邊,您有幾個可能的應用程式。 此報表類型的另一個常見案例是將它附加到 [工作] 清單,讓您可以看到自工作開始產生所需的時間。

盡情享受!

--Justin

Justin Joyce, LANtek

註解

缺少
的步驟 10/8/2012 3:51 AM
[確定] 按照這些步驟操作,但必須遺漏一些問題: XSL 如何知道要使用哪個日期,或是要在哪一個欄位加上天數? 如果沒有步驟,就不會這麼做。

書面程式碼!
8/30/2012 12:12 PM
我同意-我不認為這個實際會算作 "無代碼"。
有趣的是,透過一些 SharePoint screwup,我有一個使用今天的工作匯出資料行 .。。不確定原因或原因,因為我無法再次執行該作業,但仍然有,但仍可正常運作。

[狀態] 計算結果欄
的公式 5/2/2012 7:39 AM
Justin-您在「狀態」的 [日期] 欄位中,您所用的公式是什麼 (預留位置欄) ? 是「= 今天」嗎?

SharePoint 2007
12/2/2011 11:29 AM
我們目前未嘗試將此方案套用至 SharePoint 2007,但我正在尋找它。 遺憾的是,沒有透過 UI 在網頁元件上呈現 XslLink 屬性。

精彩文章
11/30/2011 9:53 AM
你好,
精彩文章。
我使用的是 SharePoint 2007。
我沒有如上所述的其他章節。
您是否有 SP2007 設定的步驟?
謝謝。

Re:無程式碼解決方案:顯示 SharePoint 清單專案上次變更
後的天數 10/11/2011 8:24 AM
麗麗。
不錯的尋找!
現在,我要看看您在今天要張貼的內容,並查看是否可以讓這個方案變得更穩定。
我很高興您喜歡這篇文章,所以我非常樂意找到歐洲日期格式的方案。 : )
-Justin

歐洲日期格式
的方案 10/11/2011 6:45 AM
你好 Justin,
僅供參考:我找到先前在此頁面
上提到之問題的解決方案,HTTPs://sharepointbydummies.wordpress.com/2011/07/13/possible-work-around-to-date-format-issue-sharepoint-2010/

歐洲日期格式
10/7/2011 3:59 AM
你好 Justin,
這是一個很好的解決方案,只是感謝您在過去兩天所花費的時間。 不過我對 it 有一些問題,希望您能提供協助。
我已將您的程式碼變更成輕微 calcultate,直到您在 [DateDiff "函數的最後一行中切換變數,而不是從 [到] 為止。

<xsl: value = "$JulianToday-$JulianStartDate" ></xsl:值為>

不過,我只能取得正確的 caclulate 半次差異。 如此一來, (格式 dd/MM/yyyy) ;

30/12/2011

它會正確計算,但在這個日期 (相同的格式)

12/10/2011

它會計算出10月2011(而不是 12-10 月12日)2011時的情況。
我嘗試只是在 "JulianStartDate" 變數中切換日和月份值的位置,如下所示;

<xsl: with param 名稱 = 「Month」 select = "substring (ddwrt: FormatDateTime (字串 ($StartDate) 、1033、" yyyyMMdd ") 、7、2) "/>
<xsl: with param 名稱 = "Day" 選取 = "substring (ddwrt: FormatDateTime (字串 ($StartDate) 、1033、" yyyyMMdd ") 、5、2) "/>

如此一來修正第二個日期的問題,不過第一個日期卻不正確!
我也嘗試將 FormatDateTime 通話變更為使用歐洲的 Lcid 和各種變更來 FormatDateTime ((例如 ddMMyyyy)) MMddyyyy 使用子字串位置參數的適當調整,而不會成功。
我非常感謝您提供的任何建議。
多謝,
分別

無程式碼
9/21/2011 4:27 AM
我認為 XSL 不符合「不是程式碼」的解決方案,因為瞭解 XSL 語言不適合所有人,但它不會涉及程式設計。 除了:好的解決方案,感謝您!

附註:  本頁面是經由自動翻譯而成,因此文中可能有文法錯誤或不準確之處。 讓這些內容對您有所幫助是我們的目的。 告訴我們這項資訊是否有幫助? 這裡是供您參考的英文文章

需要更多協助?

增進您的 Office 技巧
探索訓練
優先取得新功能
加入 Office 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與我們的其中一個 Office 支援專員連絡以深入了解您的意見。

×