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

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

Quan trọng:  Bài viết này là dịch máy, hãy xem tuyên bố miễn trừ trách nhiệm. Bạn hãy tìm phiên bản tiếng Anh của bài viết này tại đây để tham khảo.

9/20/2011 3:01 CH

bằng Justin Joyce, LANtek

Ghi chú: 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 blog lấy điểm cho người dùng cuối của SharePoint.

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

Một trong các phần thường được yêu cầu chức năng của trang SharePoint là một báo cáo cũ cho nhiệm vụ hoặc mục danh sách. Nói cách khác, số lượng ngày/tháng có vì 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ẻ yêu cầu rất đơn giản. Sau khi tất cả, chúng tôi có ngày tháng cho các mục được tạo và sửa đổi, chúng tôi có thể lưu trữ ngày tùy chỉnh khi các thay đổi đối với mục diễn ra qua bộ nhận sự kiện. Chúng tôi có tính toán cột mà chúng tôi có thể bao gồm Excel giống như công thức để làm việc với chúng tôi thông tin. Điều này có vẻ như một đề xuất khá thẳng chuyển tiếp. Chúng tôi chọn trường ngày, tạo cột được tính toán, và sau đó làm một công thức điều gì dọc theo đường [DateField]-[hôm nay]. A! giờ thì không vậy nhanh mặc dù! Dưới dạng bất kỳ ai đã thực hiện nhiệm vụ này "đơn giản" biết, cố gắng sử dụng như [hôm nay] trong một cột được tính toán nguyên nhân gây ra sự cố. Hãy thử chèn [hôm nay] vào của bạn được tính toán hộp công thức của cột sẽ cung cấp cho bạn thông báo lỗi điều gì đó như thế này:

Thông báo lỗi

Tại sao là này? Nó có để thực hiện với cách tính toán cột được tính toán.

Hãy cùng một công thức đơn giản là một ví dụ:

= IF ( [Column1] < = [Column2], "OK", "Không OK")

Tất cả điều này cho biết là nếu Column1 nhỏ hơn hoặc bằng 2, sau đó hiển thị OK, nếu không hiển thị không OK. Đây là một công thức cơ bản khá điển hình cho một cột được tính toán và giả định cơ bản về mục danh sách có chứa những cột nào thì: các giá trị cho Column1 và Column2 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.

Đó là bên phải, 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 đã tạo) kể từ khi họ xem như thông tin mà bạn tính toán được chứa trong chính mục đó. Thao tác này tạo vấn đề khi bạn đang cố gắng sử dụng thông tin 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 tính toán cột nào chức năng, Tuy nhiên, nếu tôi đã thực hiện một lần đoán học tôi giả định rằng chúng hoạt động theo cách này cho hiệu suất. Giả sử nếu bạn đã có một danh sách của một số mục hàng nghìn, mỗi tình chứa một cột được tính toán cần Cập Nhật "trực tiếp". Đó có nghĩa là có một số cơ chế, có thể là một bộ hẹn giờ công việc, cần phải lặp đi lặp lại qua mỗi mục có chứa cột được tính toán đó mỗi vậy thường và Cập Nhật giá trị của nó. Điều này có thể rất thuế 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 được chạy và thay đổi điều. Đó là chỉ tôi đoán, nhưng nó làm khá một chút nghĩa nếu bạn có nghĩ về nó.

Không có một số gợi ý cho các giải pháp tương tự như trôi nổi xung quanh ra có liên quan đến lừa SharePoint trong để chấp nhận một giá trị ngày hôm nay bằng cách trước tiên tạo một cột có tên là hôm nay, sau đó thêm nó vào công thức của bạn, rồi xóa nó. Đây là tất cả và cũng tốt, nhưng hãy nhớ những gì tôi nói về khi 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 được không chính xác, đặc biệt là trong trường hợp một phép tính ngày.

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

Thực hiện:

Vậy làm gì? Cột được tính toán xuất khỏi câu hỏi để gọi là hàm "biến đổi" như hôm nay. Bạn có thể mà chúng tôi có thể phát triển mã tùy chỉnh để xử lý các này cho chúng tôi như một cột tính cho chúng, bấm giờ công việc, hoặc theo lịch trình quy trình đi và cập nhật tất cả các mục duy nhất cần này tính toán được thực hiện. Chúng tôi mang trở về vấn đề về hiệu năng nào đề cập trong cuối đoạn văn mặc dù và ngoài ra nó là một giải pháp giòn sẽ cao cụ thể đến trang web/danh sách/cột trong câu hỏi. Ở phía trên cùng những vấn đề hai, bạn cũng cần phải đi tìm nerdy người, chẳng hạn như bản thân mình, biết làm thế nào để mã và thuyết phục ảnh con chó phát triển các giải pháp này cho bạn. Nhưng không có một cách dễ dàng hơn!

Nếu bạn có quyền để tạo các trường và sửa trang trên trang web 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ạnh nhau một mẫu XSL mà có thể được bao gồm trong dạng xem danh sách và sẽ thực tính toán giá trị của bạn mỗi khi trang được yêu cầu. Kịch bản này sẽ loại bỏ mối quan tâm của chúng tôi qua 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.

Hoàn hảo. Chúng tôi có thể làm điều đó vậy làm thế nào?

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

  2. Tạo của chúng tôi trường vốn sẽ hoạt động như một 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 nội dung gõ và thêm loại nội dung đó vào danh sách.

  4. Tạo dạng xem của danh sách đó chứa 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 "nối kết XSL" cho phần Web dạng xem danh sách thông qua giao diện người dùng.

  7. Thành công!

Hãy cùng khám phá một trường hợp sử dụng ví dụ và hướng dẫn thực hiện. Khách hàng của chúng tôi muốn một dạng xem của danh sách chính của họ sẽ thông báo cho họ lâu một mục cụ thể danh sách đã ngồi ở trạng thái của nó. Danh sách này chứa một site tùy chỉnh nội dung kiểu phái sinh từ kiểu mục và được thêm vào danh sách. Đã có một sự kiện người nhận trong các vị trí có bao gồm thời gian mỗi trường trạng thái đó trên mục danh sách đã được thay đổi và lưu ngày đó vào một cột được gọi là "Ngày trạng thái thay đổi". Tất cả các dây này không bắt buộc và có thể làm với bất kỳ trường ngày (chỉ vậy nó sẽ xảy ra này là triển khai nhưng hãy thử nghiệm của chúng tôi). Tối thiểu bạn sẽ cần là trường ngày nguồn của bạn và chỗ dành sẵn trường để giữ các phép tính của bạn (Thêm đ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 đề nghị bạn sử dụng cột trang và kiểu nội dung trang trong trường hợp bạn muốn dùng lại các giải pháp này ở những nơi khác trên trang web của bạn.

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

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

Chúng tôi hiện có mọi thứ trong vị trí mà chúng tôi sẽ yêu cầu để hỗ trợ báo cáo tùy chỉnh cũ của chúng tôi. Tất cả đó vẫn tạo mẫu XSL của chúng tôi, tải lên thư viện kiểu của trang, và nối kết đến 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ố tạo SharePoint thường đánh dấu để tạo dạng xem cũng như riêng của chúng tôi đánh dấu tùy chỉnh được dùng để ghi đè lên các phần này và tính toán giá trị của chúng tôi mong muốn cho chúng tôi.

Bằng cách cho tín dụng tín dụng nằm ở đâu đến hạn, mẫu XSL cho cách thực hiện các phép tính thực tế mà tôi đang sử dụng cho giải pháp này được từ bi đượ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 biểu định kiểu (aging.zip) tôi đã có để cùng nhau nằm ở đây:
https://OneDrive.live.com/?cid=c262e8e2d59a86d9&permissionsChanged=1&id=C262E8E2D59A86D9! 104

Mở 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 nhiều thường SharePoint XSL đánh dấu để kết xuất các dạng xem, nếu bạn tiếp tục cuộn xuống tới đường 357 bạn sẽ nhìn thấy bắt đầu của các mẫu tùy chỉnh mà tôi đã thêm vào đánh dấu, đoạn đầu tiên là mẫu "DateDiff" tiếp theo là "tính julian-ngày" và "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 của chúng tôi. Nếu bạn sẽ sử dụng 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 đi qua các mẫu và thay thế bất kỳ tham chiếu đến tên khác. Hãy nhớ, này bạn sẽ muốn sử dụng tên nội bộ của trường không có tên hiển thị.

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

Tiếp theo, đi đến danh sách của bạn và chọn dạng xem bạn đã tạo trước trong bài viết này. Từ "Hành động trang" menu bấm "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 xuống nhỏ mặt ở góc trên bên phải. Từ menu nà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 phần Web ở phía tay phải của cửa sổ trình duyệt của bạn.

Menu Phần Web

Bấm vào phần các + cho "Khác" và xác định thuộc tính "nối kết XSL".

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

Dán nối kết tệp XSL của bạn trong thư viện kiểu mà bạn đã sao chép xuống phiên bản cũ hơn (điều này có thể là nối 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, sau đó bấm vào nút "Ngừng sửa" trên ruy-băng "Trang" ở đầu trang.

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

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

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

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

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

Tóm tắt:

Có thật: một cách độc đáo được định dạng, mạnh mẽ và thực hiện tốt hơn để tạo báo cáo cũ trong SharePoint, hoàn thành với một thực hiện không có mã đơn giản. Điều này có khá một vài tiềm năng ứng dụng ngoài một trường hợp khám phá chúng tôi sử dụng dưới đây. Kịch bản phổ biến khác cho loại báo cáo này đính kèm nó vào danh sách nhiệm vụ sao cho bạn có thể thấy khoảng thời gian đã qua vì một nhiệm vụ được tạo ra một cách nhanh chóng.

Tận hưởng!

--Justin

Justin Joyce, LANtek

Chú thích

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

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

Công thức cho "Ngày tại trạng thái" tính toán cột không?
5/2/2012 7:39 sa
Justin - công thức mà bạn dùng cho cột được tính toán trang "Ngày tại trạng thái" của bạn (chỗ dành sẵn cho cột) là gì? Là nó "= hôm nay"?

SharePoint 2007
12/2/2011 11:29 sa
hiện tôi đã không cố gắng giải pháp này áp dụng cho SharePoint 2007, Tuy nhiên tôi đang tìm trong để nó. Rất tiếc, bạn sẽ không thuộc tính XslLink bề mặt trên phần web thông qua giao diện người dùng.

Bài đăng tuyệt vời
30/11 năm 2011 9:53 sa
Xin chào,
tuyệt vời bài đăng.
tôi đang sử dụng SharePoint 2007.
tôi không có một phần linh tinh như nêu trên.
Bạn có các bước để cấu hình SP2007?
Cám ơn.

Tái: Không có mã giải pháp: Hiển thị những ngày kể từ khi mục trong danh sách SharePoint là cuối cùng đã thay đổi
10/11/2011 8:24 sa
Hi Chris.
tuyệt vời tìm!
tôi sẽ hãy xem những gì bạn đăng hopefully lên trên hôm nay và nhìn thấy nếu tôi có thể thực hiện giải pháp này hơi vững.
tôi mừng rằng bạn đã thích bài đăng, và tôi mừng rất bạn đã có thể tìm giải pháp để định dạng ngày Châu Âu. :)
-Justin

Giải pháp cho định dạng ngày Châu Âu
10/11/2011 6:45 sa
Hi lại Justin,
FYI, tôi tìm thấy giải pháp cho vấn đề mà tôi đã nói ở Trang này;
https://sharepointbydummies.wordpress.com/2011/07/13/possible-work-around-to-date-format-issue-sharepoint-2010/

Định dạng ngày Châu Âu
7/10 năm 2011 3:59 sa
Hi Justin,
đây là một cảm ơn thực sự tốt giải pháp và loại điều tôi đã dành cuối hai ngày qua tìm kiếm! Tuy nhiên tôi đang gặp một chút vấn đề với nó và tôi mong bạn có thể giúp tôi.
tôi đã thay đổi của bạn mã hơi để calcultate số ngày cho đến khi đ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-chọn = "$JulianToday - $JulianStartDate" >< / xsl:value-của >

Tuy nhiên tôi chỉ có thể để nó đến caclulate sự khác biệt chính xác một nửa thời gian. Để ví dụ với dữ liệu này (định dạng dd/MM/yyyy);

30/12/2011

nó tính chính xác, nhưng với dữ liệu này (cùng một định dạng)

12/10/2011

tính như nếu 10 tháng 12 năm 2011 chứ không phải là 12 tháng 10 2011.
tôi tìm cách 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: với param tên = "Tháng" select="substring(ddwrt:FormatDateTime(string($StartDate), 1033, 'yyyyMMdd'), 7, 2)" / >
< xsl: với param tên = "Ngày" select="substring(ddwrt:FormatDateTime(string($StartDate), 1033, 'yyyyMMdd'), 5, 2)" / >

và này sửa vấn đề với ngày thứ hai, Tuy nhiên nó rồi không chính xác cho ngày đầu tiên!
tôi cũng đã tìm cách thay đổi cuộc gọi FormatDateTime sử dụng châu Âu LCIDs và thay đổi khác nhau để tham số cuối cùng của FormatDateTime (ví dụ như ddMMyyyy, MMddyyyy) với các điều chỉnh phù hợp cho các tham số chuỗi con vị trí mà không thành công.
Đáng kể sẽ rất trân trọng bất kỳ lời khuyên bạn có thể cung cấp dịch vụ.
Cảm ơn,
Chris

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

Ghi chú: Tuyên bố miễn trừ trách nhiệm Dịch Máy: Bài viết này do một hệ thống máy tính dịch mà không có sự can thiệp của con người. Microsoft cung cấp những bản dịch máy này để giúp người dùng không nói tiếng Anh hiểu nội dung về các sản phẩm, dịch vụ và công nghệ của Microsoft. Do bài viết này được dịch máy nên có thể có các lỗi về từ vựng, cú pháp hoặc ngữ pháp.

Phát triển các kỹ năng của bạn
Khám phá nội dung đào tạo
Sở hữu tính năng mới đầu tiên
Tham gia Người dùng nội bộ Office

Thông tin này có hữu ích không?

Cảm ơn phản hồi của bạn!

Cảm ơn bạn đã phản hồi! Để trợ giúp tốt hơn, có lẽ chúng tôi sẽ kết nối bạn với một trong những nhân viên hỗ trợ Office của chúng tôi.

×