lưu trữ hàng tháng: Tháng mười hai 2007

Tạo đồ thị thanh trong SharePoint

Tổng quan:

(CẬP NHẬT 12/04/07: Thêm một nguồn tài nguyên thú vị vào cuối liên kết đến một blog địa chỉ này thông qua một phần web rất thú vị)

Blog entry này mô tả làm thế nào để tạo ra một biểu đồ thanh trong SharePoint. Điều này hoạt động trong môi trường WSS và RÊU như nó chỉ phụ thuộc vào phần web xem dữ liệu.

Cách tiếp cận tổng thể là như sau:

  1. Tạo một danh sách hoặc thư viện tài liệu có chứa dữ liệu bạn muốn lập đồ thị.
  2. Đặt thư viện tài liệu liên quan / tuỳ chỉnh danh sách vào một trang và chuyển nó đến một phần dữ liệu xem web (DVWP).
  3. Sửa đổi XSL của DVWP để tạo ra HTML mà thể hiện như là một đồ thị.

Kinh doanh kịch bản / Thiết lập:

Tôi đã tạo ra một danh sách tùy chỉnh với cột tiêu đề tiêu chuẩn và một cột bổ sung, "Trạng thái". Mô hình này (rất simplistically) sự "cho phép cho chi phí" kịch bản đại diện nơi tiêu đề cho dự án và vị thế một giá trị từ danh sách:

  • Đề xuất
  • Trong quá trình
  • Bị ngừng

Mục tiêu là để sản xuất một biểu đồ thanh ngang tương tác cho thấy các mã trạng thái.

Tôi có dân cư trong danh sách và nó trông như thế này:

hình ảnh

Tạo dữ liệu xem Web phần:

Tạo ra DVWP bằng cách thêm danh sách tùy chỉnh cho một trang (Trang web trang trong trường hợp của tôi) và thực hiện theo các hướng dẫn Ở đây (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!395.entry).

Ngoài chỉ đơn giản là việc tạo ra DVWP, chúng tôi cũng cần phải thiết lập các tài sản phân trang để hiển thị tất cả các hàng có sẵn. Đối với tôi, Điều này có vẻ như thế này:

hình ảnh

Tại thời điểm này, Tôi luôn luôn đóng SPD và trình duyệt. Tôi sau đó tái mở trang bằng cách sử dụng trình duyệt. Điều này tránh vô tình mucking lên giao diện phần web trên trang.

Sửa đổi XSLT:

Nó bây giờ là thời gian để sửa đổi XSLT.

Tôi luôn luôn sử dụng visual studio cho điều này. (Xem Ở đây cho một lưu ý quan trọng về intellisense mà sẽ giúp bạn rất nhiều).

Tôi tạo ra một dự án trống thêm bốn tập tin mới (thay thế các từ "bản gốc" và "New" phù hợp):

  • Original.XSLT
  • New.XSLT
  • Bản gốc Params.xml
  • Mới Params.xml

Trong trường hợp của tôi, nó trông như thế này:

hình ảnh

Sửa đổi phần web và sao chép chủ và XSL "bản gốc" Phiên bản trong Visual Studio.

Mục tiêu ở đây là để gây ra XSL để biến đổi kết quả mà chúng tôi nhận được trở lại từ các truy vấn DVWP vào HTML mà ám là một đồ thị.

Để kết thúc này, nó giúp đầu tiên xem xét những gì HTML nên trông giống như trước khi chúng tôi bị lẫn lộn bởi insanity được gọi là "XSL". (Để được rõ ràng, sau đây là chỉ đơn giản là một ví dụ; không gõ nó hoặc sao chép/dán vào phòng thu trực quan. Tôi cung cấp một cú đánh đầy đủ điểm khởi đầu cho rằng sau này trong ghi-up). Đồ thị mẫu sau đây trả lại theo HTML ngay lập tức sau:

Mẫu Bar Graph

HTML tương ứng:

<HTML>
<cơ thể>
<Trung tâm>
<bàn chiều rộng = 80%>
<tr><TD><Trung tâm>Biểu đồ thanh ngang</TD></tr>
<tr>
<TD align = "Trung tâm">
<biên giới bảng = "1" chiều rộng = 80%>
<tr>
<chiều rộng TD = 10%>Mở</TD>
<TD><bảng cellpadding ="0" cellspacing ="0" biên giới = 0 width = 50%><tr bgcolor = đỏ><TD>&nbsp;</TD></tr></Bàn></TD>
</tr>
<tr>
<chiều rộng TD = 10%>Đóng cửa</TD>
<TD><bảng cellpadding ="0" cellspacing ="0" biên giới = 0 width = 25%><tr bgcolor = đỏ><TD>&nbsp;</TD></tr></Bàn></TD>
</tr>
<tr>
<chiều rộng TD = 10%>Bị ngừng</TD>
<TD><bảng cellpadding ="0" cellspacing ="0" biên giới = 0 width = 25%><tr bgcolor = đỏ><TD>&nbsp;</TD></tr></Bàn></TD>
</tr>
</Bàn>
</TD>
</tr>
</Bàn>
</cơ thể>
</HTML>

Tôi đã sử dụng một cách tiếp cận chết đơn giản để tạo ra quán bar của tôi bằng cách thiết lập màu nền của một hàng để "đỏ".

Take-away đây là điều này: Cuối cùng, Tất cả chúng tôi đang làm là tạo ra HTML với các hàng và cột.

Mẫu XSLT:

Tôi đã sao chép XSLT mà tạo ra một biểu đồ thanh ngang. Nó là khá tốt nhận xét vì vậy tôi sẽ không thêm nhiều ở đây ngoại trừ những ghi chú:

  • Tôi bắt đầu với mặc định XSL SharePoint Designer đã cho tôi khi tôi lần đầu tiên tạo ra DVWP.
  • Tôi đã có thể cắt giảm từ của SPD 657 dòng để 166 dây chuyền.
  • Tôi không lộn xộn xung quanh với các tập tin XML tham số (đó là riêng biệt từ XSL và bạn sẽ biết những gì tôi có nghĩa là khi bạn đi để sửa đổi DVWP chính nó; có hai tập tin bạn có thể sửa đổi). Tuy nhiên, để đơn giản hóa nó, Tôi đã loại bỏ gần như tất cả chúng từ XSL. Điều này có nghĩa rằng nếu bạn muốn làm cho việc sử dụng những tham số, bạn chỉ cần thêm định nghĩa biến của họ trở lại vào XSL. Đó sẽ là dễ dàng kể từ khi bạn sẽ có các định nghĩa biến XSL ban đầu trong dự án phòng thu trực quan của bạn.
  • Bạn nên có thể sao chép và dán này trực tiếp vào dự án phòng thu trực quan của bạn. Sau đó, loại bỏ các cuộc gọi của tôi và chèn của riêng bạn cuộc gọi đến "ShowBar".
  • Khoan xuống hoạt động bằng cách tạo ra một <a href> Thích cái này: http://server/List?FilterField1=fieldname&FilterValue1=actualFilterValue. Kỹ thuật này có thể giá trị trong ngôn ngữ này. Ban đầu, Tôi nghĩ rằng tôi sẽ cần phải phù hợp với một định dạng phức tạp hơn: http://server/List/AllItems.aspx?View={guid}&FilterField1=blah&FilterValue1=blah, nhưng trong môi trường của tôi đó là không cần thiết. Danh sách URL được thông qua cho chúng tôi bởi SharePoint vì vậy đây là khá dễ dàng để khái quát.

Ở đây nó là:

<XSL:stylesheet Phiên bản="1.0" loại trừ kết quả tiền tố="RS z o s ddwrt dt msxsl" 
xmlns:msxsl="urn:lược đồ-microsoft-com:XSLT" xmlns:XSL="http://www.w3.org/ 1999/XSL/chuyển đổi"
xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer"
xmlns:ASP="http://schemas.microsoft.com/ASPNET/20" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
xmlns:o="urn:lược đồ-microsoft-com:văn phòng" xmlns:s="UUID:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:DT="UUID:C2F41010-65B3 - 11d 1-A29F-00AA00C14882" xmlns:RS="urn:lược đồ-microsoft-com:rowset" xmlns:z="#RowsetSchema"
xmlns:ddwrt2="urn:frontpage:nội bộ"
> <XSL:đầu ra phương pháp="HTML" thụt lề="Không" /> <XSL:định dạng số thập phân NaN="" /> <XSL:param Tên="ListUrlDir"></XSL:param> <!-- Tôi cần điều này để hỗ trợ khoan xuống. --> <XSL:tiêu bản phù hợp với="/" xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:__designer=http://schemas.microsoft.com/WebParts/v2/DataView/designer xmlns:ASP="http://schemas.microsoft.com/ASPNET/20"
> <XSL:biến Tên="dvt_StyleName">Bảng</XSL:biến> <XSL:biến Tên="Hàng" chọn="/dsQueryResponse/hàng/hàng" /> <XSL:biến Tên="dvt_RowCount" chọn="Bá tước($Hàng)" /> <XSL:biến Tên="IsEmpty" chọn="$dvt_RowCount = 0" /> <XSL:biến Tên="dvt_IsEmpty" chọn="$dvt_RowCount = 0" /> <XSL:chọn> <XSL:Khi kiểm tra="$dvt_IsEmpty"> Không có dữ liệu để biểu đồ!<BR/> </XSL:Khi> <XSL:Nếu không> <!-- Các công cụ thú vị bắt đầu ở đây. Chúng ta cần phải xác định một cặp biến cho mỗi hàng trong biểu đồ: Tổng số mục và phần trăm của tổng số. --> <XSL:biến Tên="totalProposed" chọn="Bá tước(/dsQueryResponse/hàng/hàng[bình thường hóa không gian(@Status) = 'Đề nghị'])" /> <XSL:biến Tên="percentProposed" chọn="$totalProposed div $dvt_RowCount" /> <XSL:biến Tên="totalInProcess" chọn="Bá tước(/dsQueryResponse/hàng/hàng[bình thường hóa không gian(@Status) = 'Trong quá trình'])" /> <XSL:biến Tên="percentInProcess" chọn="$totalInProcess div $dvt_RowCount" /> <XSL:biến Tên="totalStalled" chọn="Bá tước(/dsQueryResponse/hàng/hàng[bình thường hóa không gian(@Status) = 'Bị ngừng'])" /> <XSL:biến Tên="percentStalled" chọn="$totalStalled div $dvt_RowCount" /> <!-- Chúng ta định nghĩa HTML bàn của chúng tôi ở đây. Tôi vay mượn từ một số tiêu chuẩn SharePoint phong cách ở đây để làm cho nó phù hợp. Tôi nghĩ rằng nó sẽ tôn vinh các thay đổi vào tập tin css toàn cầu cũng như chủ đề ghi đè. --> <Bàn chiều rộng="100%" cellspacing="0" cellpadding="2" phong cách="biên giới bên phải: 1 rắn #C0C0C0; biên giới-bottom: 1 rắn #C0C0C0; phong cách biên giới-trái: rắn; biên giới trái chiều rộng: 1; biên giới đầu phong cách: rắn; chiều rộng biên giới-top: 1;"> <tr> <TD sắp xếp="Trung tâm"> <Bàn biên giới="1" chiều rộng="100%"> <!-- Đối với mỗi trạng thái mà chúng tôi muốn vẽ đồ thị, chúng ta gọi là "ShowBar" tiêu bản. Chúng tôi vượt qua nó: 1. Một nhãn cho dòng. Điều này được chuyển thành một siêu liên kết. 2. Phần trăm (Tây-Tây Bắc và từ phía trên). 3. Tên trường thực tế của mã từ danh sách cơ bản. Điều này không cần phải phù hợp với nhãn Hiển thị. 4. Lĩnh vực giá trị phù hợp nhất #3. 5. Tất cả các mặt hàng này mã trạng thái (không có tổng số lớn của tất cả các mã trạng thái). Nó phát ra một <tr></tr> và dòng biểu đồ thanh ngang. Chúng tôi gọi này mẫu cho mỗi mã trạng thái chúng tôi muốn xem. --> <XSL:cuộc gọi, mẫu Tên="ShowBar"> <XSL:với param Tên="BarDisplayLabel" chọn="'Đề nghị'"/> <XSL:với param Tên="BarPercent" chọn="$percentProposed"/> <XSL:với param Tên="QueryFilterFieldName" chọn="'Trạng thái'"/> <XSL:với param Tên="QueryFilterFieldValue" chọn="'Đề nghị'"/> <XSL:với param Tên="TotalItems" chọn="$totalProposed"></XSL:với param> </XSL:cuộc gọi, mẫu> <XSL:cuộc gọi, mẫu Tên="ShowBar"> <XSL:với param Tên="BarDisplayLabel" chọn="'Bị ngừng'"/> <XSL:với param Tên="BarPercent" chọn="$percentStalled"/> <XSL:với param Tên="QueryFilterFieldName" chọn="'Trạng thái'"/> <XSL:với param Tên="QueryFilterFieldValue" chọn="'Bị ngừng'"/> <XSL:với param Tên="TotalItems" chọn="$totalStalled"></XSL:với param> </XSL:cuộc gọi, mẫu> <XSL:cuộc gọi, mẫu Tên="ShowBar"> <XSL:với param Tên="BarDisplayLabel" chọn="'Trong quá trình'"/> <XSL:với param Tên="BarPercent" chọn="$percentInProcess"/> <XSL:với param Tên="QueryFilterFieldName" chọn="'Trạng thái'"/> <XSL:với param Tên="QueryFilterFieldValue" chọn="'Trong quá trình'"/> <XSL:với param Tên="TotalItems" chọn="$totalInProcess"></XSL:với param> </XSL:cuộc gọi, mẫu> </Bàn> </TD> </tr> </Bàn> </XSL:Nếu không> </XSL:chọn> </XSL:tiêu bản> <!-- Mẫu này làm các công việc của Hiển thị cá nhân dòng trong biểu đồ thanh. Bạn sẽ có thể làm hầu hết các tinh chỉnh của bạn ở đây. --> <XSL:tiêu bản Tên="ShowBar"> <XSL:param Tên="BarDisplayLabel" /> <!-- nhãn để hiển thị --> <XSL:param Tên="BarPercent"/> <!-- Phần trăm của tổng số. --> <XSL:param Tên="QueryFilterFieldName"/> <!-- Được sử dụng để nhảy để truy vấn & bộ lọc --> <XSL:param Tên="QueryFilterFieldValue"/> <!-- Được sử dụng để nhảy để truy vấn & bộ lọc --> <XSL:param Tên="TotalItems" /> <!-- Tổng số của barlabel này --> <tr> <!-- Thanh nhãn chính nó. --> <TD lớp học="MS-formbody" chiều rộng="30%"> <!-- Xây dựng này thiết kế tiếp của báo cáo một chuỗi truy vấn cho phép chúng tôi để khoan xuống đến một cái nhìn lọc dữ liệu cơ bản. Chúng tôi làm cho việc sử dụng một vài điều ở đây: 1. Chúng tôi có thể vượt qua FilterField1 và FilterValue1 vào một danh sách để lọc trên một cột. 2. SharePoint đi qua một tham số quan trọng với chúng tôi, ListUrlDir trỏ đến danh sách cơ bản mà DVWP này "chạy". Không phải là niềm vui XSL? --> <XSL:văn bản vô hiệu hoá-đầu ra-thoát=""> <![CDATA[<một href ="]]></XSL:văn bản> <XSL:giá trị của chọn="$ListUrlDir"/> <XSL:văn bản vô hiệu hoá-đầu ra-thoát=""><![CDATA[?FilterField1 =]]></XSL:văn bản> <XSL:giá trị của chọn="$QueryFilterFieldName"/> <XSL:văn bản vô hiệu hoá-đầu ra-thoát=""><![CDATA[&FilterValue1 =]]></XSL:văn bản> <XSL:giá trị của chọn="$QueryFilterFieldValue"/> <XSL:văn bản vô hiệu hoá-đầu ra-thoát=""><![CDATA[">]]></XSL:văn bản> <XSL:giá trị của chọn="$BarDisplayLabel"/> <XSL:văn bản vô hiệu hoá-đầu ra-thoát=""><![CDATA[</một>]]></XSL:văn bản> <!-- Các bit tiếp theo cho thấy một số con số trong các định dạng: "(Tổng cộng / % Tổng số)" --> (<XSL:giá trị của chọn="$TotalItems"/> / <!-- Điều này tạo ra một nhãn phần trăm tốt đẹp đối với chúng tôi. Cảm ơn, Microsoft! --> <XSL:cuộc gọi, mẫu Tên="percentformat"> <XSL:với param Tên="phần trăm" chọn="$BarPercent"/> </XSL:cuộc gọi, mẫu>) </TD> <!-- Cuối cùng, phát ra một <TD> thẻ cho thanh riêng của mình.--> <TD> <Bàn cellpadding="0" cellspacing="0" biên giới="0" chiều rộng="{vòng($BarPercent * 100)+1}%"> <tr BGColor="màu đỏ"> <XSL:văn bản vô hiệu hoá-đầu ra-thoát=""><![CDATA[&nbsp;]]></XSL:văn bản> </tr> </Bàn> </TD> </tr> </XSL:tiêu bản> <!-- Điều này được lấy trực tiếp từ một số XSL tôi tìm thấy trong một mẫu MS. --> <XSL:tiêu bản Tên="percentformat"> <XSL:param Tên="phần trăm"/> <XSL:chọn> <XSL:Khi kiểm tra="định dạng số($phần trăm, '#,##0%;-#,##0%')= 'NaN'">0%</XSL:Khi> <XSL:Nếu không> <XSL:giá trị của chọn="định dạng số($phần trăm, '#,##0%;-#,##0%')" /> </XSL:Nếu không> </XSL:chọn> </XSL:tiêu bản> </XSL:stylesheet>

Kết quả:

XSL từ phía trên tạo ra biểu đồ này:

hình ảnh

Khoan xuống đến các dữ liệu cơ bản bằng cách nhấp vào mã trạng thái:

hình ảnh

Kết luận suy nghĩ:

Điều này có thể được tổng quát?

Tôi yêu này khái niệm đồ họa, nhưng tôi ghét thực tế là tôi phải đi và làm rất nhiều tay mã hóa. Tôi đã đưa ra một chút suy nghĩ cho dù nó có thể được tổng quát và tôi lạc quan, nhưng tôi cũng một chút sợ hãi rằng có thể có một bức tường gạch một nơi nào đó dọc theo con đường mà sẽ không cung cấp bất kỳ công việc quanh. Nếu bất cứ ai có một số ý tưởng tốt về điều này, Xin vui lòng làm cho một lưu ý trong các ý kiến hoặc gửi email cho tôi.

Đồ thị theo chiều dọc:

Đây là một biểu đồ thanh ngang. Nó là chắc chắn có thể để tạo ra một đồ thị theo chiều dọc. Chúng tôi chỉ cần thay đổi mã HTML. Tôi sẽ bắt đầu theo cùng một cách: Tạo ra một đại diện HTML của một biểu đồ thanh theo chiều dọc và sau đó tìm ra cách để có được mà qua XSL. Nếu có ai quan tâm đến việc đó, Tôi có thể được thuyết phục để thử và làm việc ra các kinks. Nếu ai đó đã thực hiện mà, xin vui lòng cho tôi biết và tôi sẽ sẵn sàng liên kết đến blog của bạn 🙂

Tôi nghĩ rằng các thách thức với một đồ thị dọc là các nhãn cho đồ thị khó khăn hơn để quản lý, nhưng chắc chắn không phải không thể.

Lĩnh vực tên Gotcha:

Có ít nhất hai điều để tìm với tên trường của bạn.

Đầu tiên, một tên trường với một không gian đã được thoát khỏi những trong XSL. Điều này có lẽ sẽ là một vấn đề ở đây:

        <XSL:biến Tên="totalProposed" 
chọn="Bá tước(/dsQueryResponse/hàng/hàng[bình thường hóa không gian(@Status) = 'Đề nghị'])" />

Nếu tình trạng"của bạn" cột này thực sự được đặt tên "tình trạng mã" sau đó bạn cần phải tham khảo nó như là "Status_x0020_Code":

   <XSL:biến Tên="totalProposed" 
chọn="Bá tước(/dsQueryResponse/hàng/hàng[bình thường hóa không gian(@Status_x0020_Code) = 'Đề nghị'])" />

Thứ hai, và tôi là một chút mờ về điều này, nhưng bạn cũng cần phải cảnh báo cho lĩnh vực tên thay đổi. Nếu bạn đặt tên cho lĩnh vực của bạn "tình trạng mã" và sau đó trên, đổi tên nó thành"AFE", "tên nội bộ" không thay đổi. Tên nội bộ vẫn sẽ "tình trạng mã" và phải được tham chiếu như "Status_x0020_Code". Các "khác tài nguyên" liên kết có thể giúp chẩn đoán và sửa chữa các loại vấn đề.

Về màu:

Tôi đã chọn "đỏ" bởi vì nó là dễ chịu với tôi lúc này. Nó sẽ không là một vấn đề lớn cho các màu sắc khác nhau để cung cấp nhiều hơn chỉ là một mô tả trực quan của một số, nhưng cũng cung cấp một KPI hữu ích. Ví dụ:, Nếu tỷ lệ phần trăm của "ngừng" Của AFE là > 10% sau đó hiển thị nó màu đỏ, Nếu không hiển thị nó trong màu đen. Sử dụng <XSL:chọn> để thực hiện việc này.

Tài nguyên khác:

Hạnh phúc chuyển đổi!

<kết thúc />

Đăng ký vào blog của tôi!

SharePoint không cung cấp “Những người có quyền truy cập” Báo cáo

CẬP NHẬT 01/28/08: Dự án codeplex này địa chỉ vấn đề này: http://www.codeplex.com/AccessChecker. Tôi đã không sử dụng nó, nhưng có vẻ đầy hứa hẹn nếu điều này là một vấn đề mà bạn cần đến địa chỉ trong môi trường của bạn.

CẬP NHẬT 11/13/08: Joel Oleson đã viết lên một bài rất tốt về vấn đề quản lý bảo mật lớn hơn ở đây: http://www.sharepointjoel.com/ Lists/Posts/Post.aspx?Danh sách = 0cd1a63d % 2D183c % 2D4fc2 %2 D 8320% 2Dba5369008acb&ID = 113. Nó liên kết với một số tài nguyên hữu ích khác.

Diễn đàn người sử dụng và khách hàng thường yêu cầu một câu hỏi dọc theo những dòng này: "Làm thế nào để tôi tạo ra một danh sách tất cả người dùng với quyền truy cập vào một trang web" hoặc "cảnh làm thế nào có thể tôi tự động báo tất cả người dùng có quyền truy cập vào danh sách về những thay đổi được thực hiện cho danh sách?"

Có là không có trong số các giải pháp hộp này. Nếu bạn nghĩ về nó cho một thời điểm, nó không phải là khó hiểu lý do tại sao.

SharePoint bảo mật là rất linh hoạt. Có ít nhất bốn loại chính của người dùng:

  • Người dùng vô danh.
  • Nhóm và người dùng SharePoint.
  • Người dùng thư mục hoạt động.
  • Dựa trên hình thức xác thực (FBA) người dùng.

Sự linh hoạt có nghĩa là từ một góc độ an ninh, bất kỳ trang web SharePoint nhất định sẽ đáng kể khác nhau từ khác. Để tạo ra một báo cáo danh sách truy cập, một trong những cần phải xác định làm thế nào các trang web được bảo vệ, truy vấn nhiều các kho phần mềm hồ sơ người dùng khác và sau đó trình bày trong một thời trang hữu ích. Đó là một vấn đề khó khăn để giải quyết tổng quát.

Làm thế nào tổ chức đang đối phó với điều này? Tôi rất muốn nghe từ bạn trong ý kiến hoặc thư điện tử.

</kết thúc>

Technorati Tags: ,