Giải pháp không có mã: Hiển thị các ngày kể từ khi một mục danh sách đã được thay đổi lần cuối
Applies ToSharePoint trong Microsoft 365 SharePoint trong Microsoft 365 Small Business

bởi Justin Joyce, LANtek

Lưu ý: Bài viết này là một phần của một tập hợp các bài đăng từ bốn năm của phần nhận được blog cho người dùng cuối SharePoint.

Tổng quan: báo cáo lão hóa tùy chỉnh không có mã

Một trong các phần chức năng thường được yêu cầu của một site SharePoint là báo cáo lão hóa cho các tác vụ hoặc mục danh sách. Nói cách khác, có bao nhiêu ngày/tháng kể từ khi mục danh sách này được sửa đổi lần cuối?

Trên bề mặt, điều này có vẻ là một yêu cầu rất đơn giản. Sau khi tất cả, chúng tôi có ngày cho các mục được tạo và sửa đổi, chúng tôi có khả năng lưu trữ ngày tùy chỉnh khi các thay đổi nhất định cho các mục diễn ra thông qua bộ thu sự kiện. Chúng tôi đã tính toán các cột mà chúng tôi có thể bao gồm các công thức Excel để làm việc với thông tin của chúng tôi. Điều này có vẻ như một đề xuất về phía trước khá thẳng. Chúng tôi chọn một trường ngày, tạo một cột được tính toán, sau đó thực hiện một điều gì đó dọc theo dòng [DateField] – [hôm nay]. Ah, không phải như vậy nhanh, mặc dù! Khi bất kỳ ai đã cố gắng nhiệm vụ "đơn giản" này biết, bạn đang cố gắng sử dụng nội dung giống như [hôm nay] trong cột được tính nguyên nhân gây ra sự cố. Tìm cách chèn [hôm nay] vào hộp công thức của cột được tính của bạn sẽ cung cấp cho bạn một thông báo lỗi như thế này:

Thông báo lỗi

Tại sao lại như vậy? Vâng, nó phải làm với các cột được tính toán bằng cách được tính toán.

Chúng ta hãy dùng một công thức đơn giản như một ví dụ:

= If ( [cột1] <= [cột2], "OK", "not OK")

Tất cả điều này cho biết là nếu Cột1 nhỏ hơn hoặc bằng Cột2, sau đó hiển thị OK, nếu không thì Hiển thị không OK. Đây là công thức cơ bản khá điển hình cho một cột được tính toán và nó tạo một giả định cơ bản về mục danh sách có chứa các cột này: các giá trị cho Cột1 và Cột2 sẽ không bao giờ có thể thay đổi mà không có sự kiện Cập Nhật trên mục danh sách.

Phải, các cột được tính toán sẽ chỉ tính toán lại khi danh sách được Cập Nhật (hoặc được tạo) vì chúng giả định thông tin mà bạn đang tính toán được chứa trong chính mục đó. Điều này sẽ tạo ra sự cố khi bạn đang cố gắng sử dụng nội dung nào đó thay đổi độc lập với các trường của mục đó, chẳng hạn như ngày hôm nay.

Bây giờ tôi đã không ở trong cuộc họp mà họ quyết định rằng đây là cách mà các cột được tính toán sẽ hoạt động, Tuy nhiên, nếu tôi cần phải thực hiện một đoán giáo dục tôi cho rằng họ sẽ cho biết hàm Way này cho hiệu suất. Hãy tưởng tượng nếu bạn đã có một danh sách vài nghìn mục, mỗi số chứa một cột được tính là cần có một bản Cập Nhật "trực tiếp". Điều đó có nghĩa là một số cơ chế, có lẽ là một công việc bộ đếm thời gian, sẽ phải lặp lại qua từng mục chứa cột được tính toán thường xuyên và Cập Nhật giá trị của nó. Điều này có thể rất bổ nhiệm về hiệu suất vì với việc triển khai lớn hơn công việc này có thể liên tục hoạt động và thay đổi mọi thứ. Đó chỉ là đoán của tôi, nhưng nó làm cho khá một chút ý nghĩa nếu bạn nghĩ về điều đó.

Có một số gợi ý cho các giải pháp tương tự trôi nổi quanh đó, có liên quan đến việc thu nhỏ SharePoint để chấp nhận giá trị hôm nay bằng cách tạo một cột có tên là ngày hôm nay, sau đó thêm nó vào công thức của bạn, sau đó xóa nó. Đây là tất cả tốt và tốt, nhưng hãy nhớ những gì tôi đã nói về khi các cột được tính toán được Cập Nhật. Giá trị này sẽ chỉ thay đổi khi mục được Cập Nhật có nghĩa là giá trị của bạn sẽ sớm không chính xác, đặc biệt là trong trường hợp tính toán ngày.

Tôi đã nhìn thấy những người khác bằng cách sử dụng thông minh JavaScript để viết các giá trị cho trang. Thao tác này cũng sẽ hoạt động, nhưng tôi khá nhiều thông số đối với script máy khách khi có thể tránh được.

Bổ

Vậy nên làm gì? Các cột được tính ra khỏi câu hỏi về các hàm "dễ bay hơi" như hôm nay. Có thể chúng tôi có thể phát triển một số mã tùy chỉnh để chăm sóc cho chúng tôi như một cột được tính toán, công việc hẹn giờ hoặc quy trình được lên lịch để đi cùng và cập nhật tất cả các mục duy nhất cần tính toán này. Điều đó mang đến cho chúng tôi trở lại vấn đề về hiệu suất tôi đã đề cập trong đoạn cuối, mặc dù, và thêm vào đó là một giải pháp giòn sẽ được đánh giá cao cụ thể cho site/danh sách/cột trong câu hỏi. Ở phía trên cùng hai mối quan tâm, bạn cũng sẽ phải đi tìm một guy Nerdy, chẳng hạn như bản thân mình, mà biết cách mã và thuyết phục ông ấy để phát triển giải pháp này cho bạn. Nhưng có một cách dễ dàng hơn!

Nếu bạn có quyền tạo trường và sửa các trang trên trang của bạn và có một chút kiến thức về XSLT và tạo dạng xem, bạn có thể đặt cùng một mẫu XSL có thể được đưa vào dạng xem danh sách và sẽ tính toán giá trị của bạn mỗi khi trang được yêu cầu. Tình huống này loại bỏ mối quan tâm của chúng tôi trên hiệu suất và không yêu cầu mã tùy chỉnh được phát triển và triển khai thông qua một giải pháp.

Vời. Vậy làm thế nào để chúng tôi làm điều đó?

  1. Tạo hoặc chọn trường sẽ hoạt động như nguồn của chúng tôi. Nó phải là một kiểu ngày.

  2. Tạo trường của chúng tôi sẽ hoạt động như chỗ dành sẵn cho giá trị được tính toán.

  3. Thêm cả hai trường này vào một kiểu nội dung và thêm loại nội dung đó vào danh sách.

  4. Tạo dạng xem của danh sách có chứa cả cột nguồn và chỗ dành sẵn.

  5. Tải mẫu XSL lên thư viện kiểu.

  6. Đặt thuộc tính "liên kết XSL" cho phần web dạng xem danh sách thông qua giao diện người dùng.

  7. Công!

Hãy tìm hiểu một ví dụ về việc sử dụng trường hợp và đi ngang qua việc thực hiện. Khách hàng của chúng tôi muốn có một dạng xem danh sách chính của họ mà sẽ cho họ biết có bao lâu một mục danh sách cụ thể đã được ngồi ở trạng thái của nó. Danh sách này chứa một kiểu nội dung site tùy chỉnh được lấy từ kiểu mục và được thêm vào danh sách. Đã có một bộ tiếp nhận sự kiện tại vị trí bắt đầu mỗi khi trường trạng thái đó trên mục danh sách đã được thay đổi và lưu ngày đó vào cột có tên là "date Status đã thay đổi". Tất cả các dây này không bắt buộc và có thể được thực hiện với bất kỳ trường ngày nào (nó chỉ xảy ra như vậy là việc thực hiện của chúng tôi nhưng cảm thấy tự do để thử nghiệm). Tối thiểu trống, bạn sẽ cần là trường ngày nguồn và chỗ dành sẵn của bạn để giữ tính toán của bạn (thêm chi tiết về điều này trong đoạn văn tiếp theo) được thêm vào danh sách của bạn, mặc dù tôi khuyên bạn nên sử dụng các cột site và kiểu nội dung trang trong trường hợp bạn muốn dùng lại giải pháp này ở những nơi khác trên site của bạn.

Vì vậy, chúng tôi đã có ngày nguồn mà chúng ta có thể sử dụng trong tính toán của chúng ta đối với ngày hôm nay. Bây giờ chúng ta có thể tạo một cột site tùy chỉnh để sử dụng làm bộ chứa cho giá trị tính toán của chúng tôi. Trong trường hợp này, tôi đã chọn sử dụng một cột được tính toán vì nó sẽ không thể thay đổi trên biểu mẫu mới hoặc sửa các mục, nhưng có thể được chọn để hiển thị trong dạng xem kể từ khi chúng tôi không muốn người dùng nhập các giá trị tùy ý vào cột này. Nó có thể là khó hiểu tại sao nó không được hiển thị trong dạng xem, v.v.

Bây giờ chúng ta có cột site của chúng tôi, chúng tôi có thể thêm nó vào các kiểu nội dung của chúng tôi sẽ được sử dụng trong danh sách của chúng tôi. Tiếp theo, chúng ta cần tạo dạng xem sau này sẽ được tùy chỉnh với XSLT của chúng tôi. Hãy đảm bảo bạn tạo dạng xem chuẩn có chứa cột ngày nguồn và cột được tính mới của bạn sẽ hoạt động như chỗ dành sẵn cho giá trị được tính toán.

Bây giờ chúng ta có tất cả mọi thứ tại chỗ mà chúng tôi sẽ yêu cầu hỗ trợ báo cáo lão hóa tùy chỉnh của chúng tôi. Tất cả vẫn là tạo mẫu XSL của chúng tôi, hãy tải lên thư viện kiểu của site và nối kết nó với dạng xem danh sách của chúng tôi. Mẫu XSL chúng tôi sẽ sử dụng sẽ chứa một số đánh dấu được tạo SharePoint bình thường để tạo dạng xem cũng như đánh dấu tùy chỉnh riêng của chúng tôi được sử dụng để ghi đè các phần nhất định này và tính toán giá trị mong muốn của chúng tôi cho chúng tôi.

Cung cấp tín dụng cho đến khi tín dụng là do, các mẫu XSL để thực hiện các phép tính thực tế tôi đang sử dụng cho giải pháp này đã được cung cấp bởi "swirch" trên diễn đàn MSDN: http://Social.MSDN.Microsoft.com/forums/en-US/sharepointcustomization/thread/aeda905b-9bc6-40c4-BD22-21306c5cb0d2/

Tải xuống XSL stylesheet (aging.zip) tôi đã đặt cùng nhau ở đây: https://OneDrive.Live.com/?Cid=c262e8e2d59a86d9&permissionsChanged = 1&ID = c262e8e2d59a86d9! 104

Mở điều này trong trình soạn thảo văn bản yêu thích của bạn, bạn sẽ thấy rất nhiều thông thường của SharePoint XSL được đánh dấu để rendering các dạng xem, nếu bạn tiếp tục cuộn xuống đến đường 357, bạn sẽ thấy phần bắt đầu của các mẫu tùy chỉnh mà tôi đã thêm vào mục đánh dấu, một trong những "FieldRef_printTableCell_EcbAllowed. Days_x0020_At_x0020_Status". Đây là ba mẫu của chúng tôi sẽ thực hiện và hiển thị các phép tính của chúng tôi trong dạng xem. Nếu bạn đang dùng các tên trường khác nhau hơn đã được xác định trước đó trong bài viết này, bạn sẽ cần phải thực hiện các mẫu này và thay thế bất kỳ tham chiếu nào cho các tên khác. Hãy nhớ rằng bạn sẽ muốn sử dụng tên nội bộ của trường không phải tên hiển thị.

Sau khi bạn đã hài lòng rằng mẫu đã sẵn sàng để thực hiện, hãy dẫn hướng đến thư viện kiểu của bạn và tải lên trong thư mục "kiểu XSL Style" rồi sao chép nối kết đến tệp. Điều này sẽ cho phép chúng tôi dễ dàng thực hiện các thay đổi sau này hoặc thêm nó vào các phần khác nhau của trang đó như chúng tôi xin vui lòng.

Tiếp theo, hãy đi đến danh sách của bạn, rồi chọn dạng xem bạn đã tạo trước đó trong bài viết này. Từ menu "hành động site", bấm vào "sửa trang".

Lệnh Sửa Trang trên menu Hành động Site

Tìm phần web dạng xem danh sách của bạn trên trang và mở menu phần web bằng cách bấm vào mũi tên hướng xuống nhỏ ở góc trên bên phải. Từ menu này, hãy chọn "sửa phần web".

Lệnh Sửa Phần Web trên menu Phần Web

Điều này sẽ mở menu của phần web ở bên phải cửa sổ trình duyệt của bạn.

Menu Phần Web

Bấm vào + cho phần "linh tinh" và định vị thuộc tính "liên kết XSL".

Thuộc tính Nối kết XSL trên menu Phần Web

Dán liên kết đến tệp XSL của bạn trong thư viện kiểu mà bạn đã sao chép xuống trước đó (điều này có thể là liên kết tương đối hoặc tuyệt đối).

nối kết tệp XSL được dán vào

Bấm "OK" để lưu các thay đổi của bạn, rồi bấm vào nút "dừng sửa" trên Ribbon "trang" ở phía trên cùng của trang.

Nút Ngừng Sửa trên tab Trang

Nếu mọi thứ đã được cấu hình đúng, giờ đây, bạn có thể xem các số trong cột "ngày ở trạng thái" của mình.

Cột Số Ngày Tại Trạng thái hiển thị số

Và cuối cùng, đây là những gì nó sẽ trông như thế nào với một số dữ liệu kiểm tra của các ngày khác nhau:

Báo cáo Tuổi hiển thị dữ liệu thử nghiệm

Tóm tắt:

Nó là: một cách thức hiệu quả, hiệu quả, mạnh mẽ và tốt hơn để tạo báo cáo lão hóa trong SharePoint., hoàn thành với việc thực hiện không có mã đơn giản. Điều này có khá một vài ứng dụng tiềm ẩn ngoài một trường hợp sử dụng mà chúng tôi khám phá ở đây. Một kịch bản phổ biến khác đối với kiểu báo cáo này sẽ đính kèm nó vào danh sách nhiệm vụ để bạn có thể thấy thời gian đã được tạo ra trong khi một tác vụ.

Xem vui nhé!

--Justin

Justin Joyce, LANtek

Chú thích

Các bước bị thiếu 10/8/2012 3:51 AM ok tôi đã làm theo các bước này, nhưng phải có gì đó bị thiếu-làm thế nào sẽ là XSL biết ngày nào để sử dụng, hoặc trường nào để thêm ngày kể từ đó? ghét nó khi các bước bị nhỡ.

Không có mã, đã đồng ý! 8/30/2012 12:12 ch Tôi đồng ý-tôi không nghĩ rằng điều này thực sự đếm là "không có mã".Điều thú vị, thông qua một số vít lên của SharePoint, tôi đã có một cột được tính toán làm việc bằng cách sử dụng hôm nay... bạn không chắc chắn làm thế nào hoặc tại sao vì tôi không thể lấy lại nó để làm điều đó một lần nữa, nhưng vẫn ở đó và đang làm việc.

Công thức cho "ngày ở trạng thái được tính toán"? 5/2/2012 7:39 AM Justin-công thức mà bạn đã sử dụng cho "Days at status" (cột chỗ dành sẵn) được tính toán là gì? Đã là "= Today"?

SharePoint 2007 12/2/2011 11:29 AM Hiện tại tôi không tìm cách áp dụng giải pháp này cho SharePoint 2007, Tuy nhiên tôi đang tìm kiếm trong đó. Rất tiếc, không có bất động sản XslLink nào được tính trên phần web thông qua giao diện người dùng.

Đăng bài tuyệt vời 11/30/2011 9:53 AM Xin chào, Great post.Tôi đang sử dụng SharePoint 2007.Tôi không có phần Misc như đã nêu trên đây.Bạn có các bước cho cấu hình SP2007 không? Cảm ơn bạn.

Re: không có giải pháp mã: Hiển thị các ngày kể từ khi mục danh sách SharePoint đã được thay đổi lần cuối 10/11/2011 8:24 AM Xin chào Chris.Tìm tuyệt vời! Tôi sẽ xem những gì bạn đã đăng hy vọng sau này vào hôm nay và xem liệu tôi có thể thực hiện giải pháp này một chút mạnh mẽ hơn.Tôi rất vui vì bạn thích bài đăng, và tôi rất vui vì bạn đã có thể tìm thấy một giải pháp cho định dạng ngày của châu Âu. :) -Justin

Giải pháp cho định dạng ngày của châu Âu 10/11/2011 6:45 AM Xin chào một lần nữa Justin, FYI, tôi tìm thấy giải pháp cho sự cố mà tôi đã đề cập trước đó trên Trang này; https://sharepointbydummies.wordpress.com/2011/07/13/possible-work-around-to-date-Format-Issue-SharePoint-2010/

Định dạng ngày của châu Âu 10/7/2011 3:59 AM Xin chào Justin, Đây là một giải pháp cảm ơn rất tốt và chỉ sắp xếp điều tôi đã trải qua hai ngày qua! Tuy nhiên tôi đang gặp phải vấn đề với điều đó và tôi hy vọng bạn có thể giúp tôi.Tôi đã thay đổi mã của mình một chút để calcultate số ngày cho đến khi có điều gì đó xảy ra, chứ không phải là từ, bằng cách chuyển các biến trong dòng cuối cùng của hàm "DateDiff"; <xsl: value-of Select = "$JulianToday-$JulianStartDate" ></xsl: value-of> Tuy nhiên tôi chỉ có thể làm cho nó đến caclulate sự khác biệt chính xác một nửa thời gian. Vì vậy, ví dụ với ngày này (định dạng dd/MM/YYYY); 30/12/2011 Tính toán chính xác, nhưng với ngày này (cùng một định dạng) 12/10/2011 Nó tính toán như thể nếu 10-tháng mười hai-2011 chứ không phải 12 tháng mười-2011.Tôi đã thử chỉ cần chuyển đổi vị trí của các giá trị ngày và tháng trong biến "JulianStartDate", như thế này; <xsl: with-param name = "month" select = "Sub string (ddwrt: FormatDateTime (string ($StartDate), 1033, ' yyyyMMdd '), 7, 2)"/> <xsl: with-param name = "Day" select = "substring (ddwrt: FormatDateTime (string ($StartDate), 1033, ' yyyyMMdd '), 5, 2)"/> Và điều này đã sửa vấn đề này với ngày thứ hai, Tuy nhiên sau đó nó không đúng trong ngày đầu tiên! Tôi cũng đã thử thay đổi các cuộc gọi định dạng thời gian để dùng các phép tính Châu Âu và các thay đổi khác nhau cho tham số cuối cùng của formatdatetime (ví dụ ddmmyyyy, mmddyyyy) với các điều chỉnh phù hợp với các tham số vị trí phụ không thành công.Tôi rất muốn đánh giá rất nhiều lời khuyên mà bạn có thể cung cấp.Cảm ơn, Chris

không có 9/21/2011 4:27 AM Tôi không nghĩ rằng XSL đủ điều kiện là giải pháp "không có mã", như sự hiểu biết về ngôn ngữ XSL không phải là đối với mọi người-Tuy nhiên nó không liên quan đến lập trình. Bên cạnh đó: giải pháp tốt đẹp, cảm ơn bạn!

Bạn cần thêm trợ giúp?

Bạn muốn xem các tùy chọn khác?

Khám phá các lợi ích của gói đăng ký, xem qua các khóa đào tạo, tìm hiểu cách bảo mật thiết bị của bạn và hơn thế nữa.

Cộng đồng giúp bạn đặt và trả lời các câu hỏi, cung cấp phản hồi và lắng nghe ý kiến từ các chuyên gia có kiến thức phong phú.