Sign in with Microsoft
Sign in or create an account.
Hello,
Select a different account.
You have multiple accounts
Choose the account you want to sign in with.
無程式碼解決方案:顯示自上次變更清單專案以來的天數

依 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 語言不適合所有人,但它不會涉及程式設計。 除了:好的解決方案,感謝您!

Need more help?

Want more options?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。

社群可協助您詢問並回答問題、提供意見反應,以及聆聽來自具有豐富知識的專家意見。

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?
By pressing submit, your feedback will be used to improve Microsoft products and services. Your IT admin will be able to collect this data. Privacy Statement.

Thank you for your feedback!

×