Bar là vẫn còn khá cao để mở rộng MOSS

Ngày hôm nay, Tôi đã làm việc với một khách hàng và mô tả làm thế nào để sửa đổi một phần nội dung truy vấn web và hiển thị thêm bit của thông tin từ một loại nội dung.

"Đầu tiên., bạn đặt cấu hình CQWP để kết nối với các nguồn dữ liệu, sau đó bạn xuất khẩu nó để máy trạm của bạn, Sửa đổi <CommonViewFields>, tải lên, loại bỏ bản gốc và bây giờ nó là ' sơn lót’ để hiển thị những cột khác. Tiếp theo, mở ra SharePoint designer, di chuyển vào thư mục gốc bộ sưu tập trang web và xác định vị trí ItemStyle.xsl. Sao chép một trong các mẫu là một điểm khởi đầu hữu ích. Quay trở lại và sửa đổi CQWP để làm cho việc sử dụng này mẫu mới. Cuối cùng, Sửa đổi mẫu để render các lĩnh vực mới của bạn! (Đừng quên kiểm tra nó trở lại trong người dùng vì vậy những gì khác có thể xem kết quả)."

Nó là tất cả khá rõ ràng với tôi (và hầu hết chúng ta các loại phát triển SharePoint) những gì đang xảy ra và làm thế nào nó là khá tốt đẹp, Thực sự, Các khía cạnh thu hồi dữ liệu của CQWP là rất tốt riêng biệt từ các khía cạnh trình bày dữ liệu. Nhưng, nó không phải là dễ dàng như vậy để giải thích, là nó?

<kết thúc />

Hiển thị nội dung truy vấn Web một phần kết quả theo lưới / Bảng

Tổng quan và mục tiêu

Ra khỏi hộp, RÊU’ Nội dung truy vấn Web Part (CQWP) Hiển thị kết quả của nó trong một định dạng danh sách, tương tự như kết quả tìm kiếm. Nó cũng có thể hiển thị các kết quả trong một định dạng lưới (tức là. Định dạng bảng HTML). Định dạng lưới tốt hơn trong một số trường hợp. Tôi mô tả làm thế nào để đạt được có hiệu lực trong bài viết này.

Kinh doanh kịch bản

Tôi đã làm việc với một khách hàng ngày một buổi giới thiệu MOSS toàn doanh nghiệp. Chúng tôi đã thiết kế phân loại của họ như vậy mà dự án là các công dân hạng nhất trong hệ thống và có trang web riêng của họ cấp cao nhất. Quản lý dự án duy trì một danh sách singleton của thông tin tóm tắt dự án, chẳng hạn như tiêu đề, ngân sách, Ngày hoàn thành dự kiến, còn lại ngân sách và các lĩnh vực khác của loại tóm tắt. Bởi "singleton" Tôi có nghĩa là một danh sách SharePoint tùy chỉnh bảo đảm để chứa chỉ có một mục. Simplistically, nó trông như thế này:

hình ảnh

Các phương pháp kỹ thuật là giống như được mô tả Ở đây (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). CQWP sử dụng một biến đổi XSL để phát ra HTML cho trình duyệt để hiển thị.

Tôi luôn luôn hình dung kết quả trước khi lặn vào XSL vì XSL là một cơn ác mộng. Đây là kết quả mong muốn của tôi:

hình ảnh

HTML như thế này tạo ra kết quả đó:

<HTML>
 <cơ thể>
 <Trung tâm>
 <Bàn biên giới= 1>

<!-- Nhãn-->
 <tr BGColor= màu xanh>
 <TD><phông chữ màu sắc= trắng><b>Tên dự án</b></phông chữ></TD>
 <TD sắp xếp= right><phông chữ màu sắc= trắng><b>Ngày tháng đầy đủ</b></phông chữ></TD>
 <TD sắp xếp= right><phông chữ màu sắc= trắng><b>Ngân sách</b></phông chữ></TD>
 <TD sắp xếp= right><phông chữ màu sắc= trắng><b>Chi phí thực tế</b></phông chữ></TD>
 <TD><phông chữ màu sắc= trắng><b>Tổng thể trạng thái</b></phông chữ></TD>
 </tr>

<tr>
 <TD>Phòng máy tính Re-wire.</TD>
 <TD sắp xếp= right>02/01/08</TD>
 <TD sắp xếp= right>22,500.00</TD>
 <TD sắp xếp= right>19,000.00</TD>
 <TD>Trong tiến trình</TD>
 </tr>

<tr>
 <TD>Cung cấp máy chủ cho SQL nâng cấp</TD>
 <TD sắp xếp= right>04/01/08</TD>
 <TD sắp xếp= right>7,500.00</TD>
 <TD sắp xếp= right>0.00</TD>
 <TD>Kế hoạch</TD>
 </tr>

</Bàn>
 </Trung tâm>
 </cơ thể>
</HTML>

Phương pháp tiếp cận

Thực hiện theo các bước sau để tạo ra mạng lưới:

  1. Xác định các thành phần của lưới điện (hàng/cột).
  2. Xác định và tạo ra các trang web cần thiết cột.
  3. Tạo ra các trang web phụ cho các dự án và danh sách singleton.
  4. Thêm CQWP vào một trang web và cấu hình nó để tìm kiếm các danh sách của bạn.
  5. Sửa đổi của CQWP XML để thu thập các cột bổ sung.
  6. Sửa đổi XSL để tạo ra một bảng.

Tôi sẽ tập trung vào thứ sáu. Con số một thông qua bốn là thẳng về phía trước và một cái gì đó bất kỳ người sử dụng CQWP đã thực hiện. Thứ năm đã được các tài liệu bởi người khác trong đó này bài viết laden ảnh chụp màn hình đầy đủ từ MSDN Ở đây (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) và Heather Solomon blog Ở đây (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).

Nuts và bu lông

Bắt đầu và thực hiện bước 1 đến 5 theo các tài liệu MSDN và bài viết của Heather Solomon.

Tại thời điểm này, bạn đã thêm CQWP của bạn vào trang web và bạn có của bạn <CommonViewFields> cấu hình cần thiết.

Theo các bước thông thường, Tôi nhận được các kết quả trung gian:

1. Tạo ra một loại nội dung, một danh sách tùy chỉnh templatized cho rằng loại nội dung và hai trang web. Dưới đây là các loại nội dung:

hình ảnh

Dưới đây là cấu trúc trang web:

hình ảnh

2. Thêm CQWP sau khi tạo dự án SubSite và singleton của tôi danh sách tóm tắt dự án:

hình ảnh

3. Thêm tất cả các thông tin bổ sung mà tôi muốn thông qua các <CommonViewFields>:

        <bất động sản Tên="CommonViewFields" loại="chuỗi">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</bất động sản>

Lưu ý rằng tôi đã có để giữ cho tất cả các lĩnh vực bất động sản trên một dòng, hoặc nó sẽ không làm việc (CQWP sẽ cho tôi biết các truy vấn trở lại không có khoản mục).

4. Tại thời điểm này, chúng tôi đã sẵn sàng để di chuyển vượt ra ngoài các bài viết MSDN và flip trên bài viết của Heather Solomon. Làm theo các bước của mình bắt đầu gần bước #5 để tạo ra một tùy chỉnh / Phiên bản unghosted của ItemStyle.xsl. Tôi làm theo lời khuyên của Heather, lên qua bước 11 và nhận được các kết quả trung gian:

4.1: Tên của tôi mẫu XSL như sau:

<XSL:tiêu bản tên = "lưới điện" phù hợp với = "hàng[@Style = 'Lưới']" chế độ = "itemstyle">

Tôi cũng hơi sửa đổi của mình đề nghị <XSL:cho mỗi …> bằng cách thêm một <BR /> các từ khóa để cung cấp một danh sách sạch hơn:

    <XSL:cho mỗi chọn="@*">
      P:<XSL:giá trị của chọn="Tên()" /><BR/>
    </XSL:cho mỗi>

4.2: Sửa đổi phần web, đi đến sự xuất hiện và lựa chọn của tôi "lưới điện" phong cách:

hình ảnh

Áp dụng thay đổi và đây là kết quả:

hình ảnh

Chúng tôi có thể nhìn thấy từ trên các lĩnh vực chúng tôi muốn (Tên dự án, chi phí, tình trạng, vv) có sẵn cho chúng tôi sử dụng khi chúng tôi phát ra HTML. Không chỉ vậy, nhưng chúng tôi thấy tên mà chúng tôi phải tham khảo những cột trong XSL. Ví dụ:, chúng tôi tham khảo tình trạng dự án như "Project_x005F_x0020_Name".

Tại thời điểm này, chúng tôi khởi hành từ blog của Heather và từ vai những người khổng lồ, Tôi thêm riêng của tôi ít.

ContentQueryMain.xsl

LƯU Ý: Khi thực hiện thay đổi cho cả hai ContentQueryMain.xsl cũng như ItemStyle.xsl, bạn cần phải kiểm tra các tập tin đó trở lại trước khi bạn nhìn thấy hiệu quả của các thay đổi.

Cho các mục đích thực hiện lưới điện, MOSS sử dụng hai tập tin XSL khác nhau để tạo ra kết quả chúng ta thấy từ một CQWP. Để tạo ra các bit trước của đầu ra, chúng tôi sửa đổi ItemStyle.xsl. MOSS thực sự sử dụng một XSL tập tin, ContentQueryMain.xsl để kết hợp với ItemStyle.xsl để tạo ra HTML của nó. Như tên gọi của nó, ContentQueryMain.xsl là "chính" XSL điều khiển lưu lượng tổng thể của bản dịch. Nó iterates thông qua tất cả các mục tìm thấy và vượt qua họ từng người một để mẫu trong ItemStyle.xsl. Chúng tôi sẽ sửa đổi ItemStyle.xsl để tạo ra mở <Bàn> thẻ trước khi phát ra các dòng đầu tiên của dữ liệu và đóng cửa <Bàn> các từ khóa sau đợt phát ra hàng cuối cùng. Để thực hiện việc này, ContentQueryMain.xsl được sửa đổi để vượt qua hai tham số cho chúng tôi "lưới điện" mẫu trong ItemStyle.xsl, "hàng cuối cùng" và "hàng hiện tại". ItemStyle.xsl sử dụng này để có điều kiện phát ra các thẻ cần thiết.

Sử dụng kỹ thuật của Heather Solomon, chúng tôi xác định vị trí ContentQueryMain.xsl. Sân bay này nằm trong cùng một vị trí như ItemStyle.xsl. Ảnh chụp màn hình này sẽ giúp:

hình ảnh

Chúng tôi cần phải thực hiện những thay đổi sau:

  • Sửa đổi một mẫu xsl, "CallItemTemplate" mà thực sự invokes mẫu lưới điện của chúng tôi tại ItemStyle.xsl. Chúng tôi sẽ gửi hai tham số cho các mẫu lưới điện như vậy mà nó sẽ có dữ liệu cần thiết để tạo ra có điều kiện mở và đóng cửa <Bàn> Download.
  • Sửa đổi một chút ContentQueryMain.xsl rằng các cuộc gọi "CallItemTemplate" để vượt qua nó "LastRow" tham số để LastRow rằng có thể được thông qua ngày cho chúng tôi mẫu lưới điện.

Xác định vị trí các mẫu đặt tên là "OuterTemplate.CallItemTemplate" xác định bằng chuỗi:

  <XSL:tiêu bản Tên="OuterTemplate.CallItemTemplate">

Thay thế mẫu toàn bộ như sau:

  <XSL:tiêu bản Tên="OuterTemplate.CallItemTemplate">
    <XSL:param Tên="CurPosition" />

    <!--
      Thêm "LastRow" tham số.
      Chúng tôi chỉ sử dụng nó khi vượt qua phong cách mục trong "Mạng lưới".
    -->
    <XSL:param Tên="LastRow" />

    <XSL:chọn>
      <XSL:Khi kiểm tra="@Style = 'NewsRollUpItem'">
        <XSL:áp dụng mẫu chọn="." chế độ="itemstyle">
          <XSL:với param Tên="EditMode" chọn="$cbq_iseditmode" />
        </XSL:áp dụng mẫu>
      </XSL:Khi>
      <XSL:Khi kiểm tra="@Style = 'NewsBigItem'">
        <XSL:áp dụng mẫu chọn="." chế độ="itemstyle">
          <XSL:với param Tên="CurPos" chọn="$CurPosition" />
        </XSL:áp dụng mẫu>
      </XSL:Khi>
      <XSL:Khi kiểm tra="@Style = 'NewsCategoryItem'">
        <XSL:áp dụng mẫu chọn="." chế độ="itemstyle">
          <XSL:với param Tên="CurPos" chọn="$CurPosition" />
        </XSL:áp dụng mẫu>
      </XSL:Khi>

      <!--
              Vượt qua vị trí hiện tại và lastrow với các mạng lưới itemstyle.xsl mẫu.
              ItemStyle.xsl sẽ sử dụng để phát ra mở và đóng cửa <Bàn> Download.
      -->
      <XSL:Khi kiểm tra="@Style = 'Lưới'">
        <XSL:áp dụng mẫu chọn="." chế độ="itemstyle">
          <XSL:với param Tên="CurPos" chọn="$CurPosition" />
          <XSL:với param Tên="Cuối cùng" chọn="$LastRow" />
        </XSL:áp dụng mẫu>
      </XSL:Khi>

      <XSL:Nếu không>
        <XSL:áp dụng mẫu chọn="." chế độ="itemstyle">
        </XSL:áp dụng mẫu>
      </XSL:Nếu không>
    </XSL:chọn>
  </XSL:tiêu bản>

Các ý kiến mô tả mục đích của những thay đổi.

Tất nhiên, "OuterTemplate.CallItemTemplate" chính nó được gọi là từ một mẫu. Xác định vị trí mẫu đó bằng cách tìm kiếm chuỗi văn bản này:

<XSL:tiêu bản Tên="OuterTemplate.Body">

Di chuyển qua các hướng dẫn trong OuterTemplate.Body và chèn các tham số LastRow như sau (Hiển thị như là một bình luận trong nghiêng):

<XSL:cuộc gọi, mẫu Tên="OuterTemplate.CallItemTemplate">
  <XSL:với param Tên="CurPosition" chọn="$CurPosition" />
  <!-- Chèn các tham số LastRow. -->
  <XSL:với param Tên="LastRow" chọn="$LastRow"/>
</XSL:cuộc gọi, mẫu>

Sau khi tất cả điều này, chúng tôi cuối cùng có những thứ được thiết lập đúng cách để ItemStyle.xsl chúng tôi có thể phát ra <Bàn> khoá đúng nơi.

ItemStyle.Xsl

LƯU Ý: Một lần nữa, kiểm tra trong ItemStyle.xsl sau khi thực hiện bất kỳ thay đổi để cho bạn thấy tác động của những thay đổi.

Chúng tôi có hai nhiệm vụ ở đây:

  • Thay thế toàn bộ lưới điện mẫu. Bạn có thể sao chép/dán từ dưới đây.
  • Thêm một số mumbo jumbo bên ngoài định nghĩa mẫu cho phép "formatcurrency" mẫu để làm việc. (Bạn có thể nói rằng tôi có một xử lý mỏng manh trên XSL).

Đầu tiên, gần đầu ItemStyle.xsl, Thêm dòng này:

  <!-- Một số mumbo jumbo cho phép chúng tôi để hiển thị Hoa Kỳ. thu. -->
  <XSL:định dạng số thập phân Tên="nhân viên phục vụ" chữ số="D" />

  <XSL:tiêu bản Tên="Mặc định" phù hợp với="*" chế độ="itemstyle">

Lưu ý rằng tôi đã thêm nó trực tiếp trước các <XSL:tiêu bản tên = "mặc định" …> định nghĩa.

Tiếp theo, trở lại của chúng tôi mẫu lưới điện. Thay thế mẫu lưới toàn bộ với mã dưới đây. Nó là hoàn toàn nhận xét, nhưng đừng ngần ngại gửi email cho tôi hoặc để lại ý kiến trên blog của tôi nếu bạn có thắc mắc.

  <XSL:tiêu bản Tên="Mạng lưới" phù hợp với="Hàng[@Style = 'Lưới']" chế độ="itemstyle">

    <!--
      ContentMain.xsl qua CurPos và cuối cùng.
      Chúng tôi sử dụng các điều kiện phát ra mở và đóng cửa <Bàn> Download.
    -->
    <XSL:param Tên="CurPos" />
    <XSL:param Tên="Cuối cùng" />

    <!-- Các yếu tố sau đây được chưa sửa đổi từ ItemStyle.xsl tiêu chuẩn -->
    <XSL:biến Tên="SafeImageUrl">
      <XSL:cuộc gọi, mẫu Tên="OuterTemplate.GetSafeStaticUrl">
        <XSL:với param Tên="UrlColumnName" chọn="'ImageUrl'"/>
      </XSL:cuộc gọi, mẫu>
    </XSL:biến>
    <XSL:biến Tên="SafeLinkUrl">
      <XSL:cuộc gọi, mẫu Tên="OuterTemplate.GetSafeLink">
        <XSL:với param Tên="UrlColumnName" chọn="'LinkUrl'"/>
      </XSL:cuộc gọi, mẫu>
    </XSL:biến>
    <XSL:biến Tên="DisplayTitle">
      <XSL:cuộc gọi, mẫu Tên="OuterTemplate.GetTitle">
        <XSL:với param Tên="Tiêu đề" chọn="@Title"/>
        <XSL:với param Tên="UrlColumnName" chọn="'LinkUrl'"/>
      </XSL:cuộc gọi, mẫu>
    </XSL:biến>
    <XSL:biến Tên="LinkTarget">
      <XSL:Nếu kiểm tra="@OpenInNewWindow = 'True'" >_blank</XSL:Nếu>
    </XSL:biến>

    <!--
      Ở đây chúng ta định nghĩa một biến, "tableStart".  Điều này chứa mã HTML mà chúng tôi sử dụng để xác định việc mở bảng cũng như các nhãn cột.  Lưu ý rằng nếu CurPos = 1, nó bao gồm HTML trong một thẻ CDATA.
      Nếu không, nó sẽ được sản phẩm nào.

      Giá trị của tableStart là emited mỗi khi ItemStyle được gọi là thông qua ContentQueryMain.xsl.
    -->
    <XSL:biến Tên="tableStart">
      <XSL:Nếu kiểm tra="$CurPos = 1">
        <![CDATA[
        <biên giới bảng = 1>
          <tr bgcolor = "màu xanh">
            <TD><màu sắc font = "trắng"><b>Tên dự án</b></phông chữ></TD>
            <TD align = "quyền"><màu sắc font = "trắng"><b>Ngày tháng đầy đủ</b></phông chữ></TD>
            <TD align = "quyền"><màu sắc font = "trắng"><b>Ngân sách</b></phông chữ></TD>
            <TD align = "quyền"><màu sắc font = "trắng"><b>Chi phí thực tế</b></phông chữ></TD>
            <TD><màu sắc font = "trắng"><b>Tổng thể trạng thái</b></phông chữ></TD>
          </tr>
        ]]>
      </XSL:Nếu>
    </XSL:biến>

    <!--
      Một biến, tableEnd đơn giản chỉ cần xác định đóng bàn từ khóa.

      Như với tableStart, nó luôn luôn là emited.  Đây là lý do tại sao giá trị của nó được phân công có điều kiện dựa trên cho dù chúng tôi đã được thông qua dòng cuối bởi ContentQueryMain.xsl.
    -->
    <XSL:biến Tên="tableEnd">
      <XSL:Nếu kiểm tra="$CurPos = $Last">
        <![CDATA[ </Bàn> ]]>
      </XSL:Nếu>
    </XSL:biến>

    <!--
      Luôn luôn phát ra các nội dung của tableStart.  Nếu đây không phải là dòng đầu tiên được thông qua cho chúng tôi bởi ContentQueryMain.xsl, sau đó chúng tôi biết giá trị của nó sẽ được để trống.

      Vô hiệu hóa đầu ra thoát bởi vì khi tableStart nó không trống, nó bao gồm HTML thực tế mà chúng tôi muốn được thực hiện bởi trình duyệt.  Nếu chúng tôi không nói cho XSL phân tích cú pháp để vô hiệu hóa đầu ra thoát, nó sẽ tạo ra các công cụ như"&LT;Bàn&gt;" thay vì của"<Bàn>".
    -->
    <XSL:giá trị của chọn="$tableStart" vô hiệu hoá-đầu ra-thoát=""/>


    <tr>
      <!--
      P:Project_x005F_x0020_Name P:Project_x005F_x0020_End_x005F_x0020_Date P:Project_x005F_x0020_Budget P:Project_x005F_x0020_Expenses P:Project_x005F_x0020_Status
      -->
      <TD>
        <XSL:giá trị của chọn="@Project_x005F_x0020_Name"/>
      </TD>

      <TD sắp xếp="quyền">
        <XSL:giá trị của chọn="@Project_x005F_x0020_End_x005F_x0020_Date"/>
      </TD>

      <TD sắp xếp="quyền">
        <XSL:cuộc gọi, mẫu Tên="formatcurrency">
          <XSL:với param Tên="giá trị" 
chọn="@Project_x005F_x0020_Budget"></XSL:với param> </XSL:cuộc gọi, mẫu> </TD> <TD sắp xếp="quyền"> <XSL:cuộc gọi, mẫu Tên="formatcurrency"> <XSL:với param Tên="giá trị" chọn="@Project_x005F_x0020_Expenses">
</XSL:với param> </XSL:cuộc gọi, mẫu> </TD> <TD> <XSL:giá trị của chọn="@Project_x005F_x0020_Status"/> </TD> <!-- Tất cả những điều sau đây nhận xét ra để làm rõ sự vật. Tuy nhiên, mang nó trở lại và công cụ nó thành một <TD> để xem hiệu quả của nó. --> <!-- <DIV id = "linkitem" lớp = "mã"> <XSL:Nếu thử nghiệm = "chuỗi dài($SafeImageUrl) != 0"> <div class = "thời gian còn lại khu vực hình ảnh"> <một href = "{$SafeLinkUrl}" mục tiêu = "{$LinkTarget}"> <img lớp = "hình ảnh cố định-chiều rộng" src = "{$SafeImageUrl}"
Alt = "{@ImageUrlAltText}"/> </một> </div> </XSL:Nếu> <div class = "liên kết-mục"> <XSL:cuộc gọi, mẫu
name="OuterTemplate.CallPresenceStatusIconTemplate"/> <một href = "{$SafeLinkUrl}"
mục tiêu = "{$LinkTarget}" tiêu đề = "{@LinkToolTip}"> <XSL:giá trị của chọn = "$DisplayTitle" /> </một> <div class = "mô tả"> <XSL:giá trị của select="@Description" /> </div> </div> </div>
--> </tr> <!-- Phát ra đóng bàn từ khóa. Nếu chúng tôi không phải là trên dòng cuối cùng, Điều này sẽ được để trống. --> <XSL:giá trị của chọn="$tableEnd" vô hiệu hoá-đầu ra-thoát=""/> </XSL:tiêu bản> <XSL:tiêu bản Tên="formatcurrency"> <XSL:param Tên="giá trị" chọn="0" /> <XSL:giá trị của chọn='định dạng số($giá trị, "$DDD,DDD,DDD.DD", "nhân viên")' /> </XSL:tiêu bản>

Màn hình nhập dữ liệu WSS/MOSS tiêu chuẩn không hỗ trợ tầng thả-thăng trầm (hoặc khác bên trong-từ giao tiếp)

CẬP NHẬT (04/2008): Tuyệt vời blog entry này cho thấy một tốt javascript dựa trên phương pháp tiếp cận cho vấn đề này: http://webborg.blogspot.com/2008/04/add-functions-and-events-to-sharepoint.html

CẬP NHẬT II: (04/2008): Blog entry này trông đầy hứa hẹn là tốt: http://www.cleverworkarounds.com/2008/03/13/free-mosswss-2007-web-part-hide-controls-via-javascript/

Nhiều lần một tuần, Nếu không phải hàng ngày, diễn đàn người dùng mô tả một yêu cầu bình thường sẽ được đáp ứng thông qua tầng thả-thăng trầm. Ví dụ:, Tôi có hai thả xuống điều khiển:

  • Danh sách Hoa Kỳ. kỳ
  • Danh sách Hoa Kỳ. Các thành phố.

Như là chịu trách nhiệm giao diện người dùng nhà cung cấp, chúng tôi muốn nó hoạt động như thế này:

  • Paul chọn một Hoa Kỳ. nhà nước từ phần thả xuống.
  • Điều này gây ra các thành phố thả xuống để lọc chỉ có những thành phố thuộc bang đã chọn.
  • Paul chọn một thành phố từ danh sách lọc này.

Có là không hỗ trợ tính năng này out-of-the-box. Thực tế, có là không có hỗ trợ OOB cho bất kỳ loại trực tiếp nội-hình thức giao tiếp. Điều này bao gồm lập trình ẩn/cho phép/vô hiệu hóa lĩnh vực để đáp ứng với lĩnh vực thay đổi ở những nơi khác trên các hình thức.

Mục tiêu thực sự của bài viết này để mô tả các giải pháp và các tùy chọn là như tôi biết:

  1. Phát triển một loại tùy chỉnh cột. Như là một tùy chỉnh cột phát triển, bạn có toàn quyền kiểm soát trên thế giới"" của cột tùy chỉnh. Bạn có thể thực hiện một tầng thả xuống như vậy.
  2. Xem xét sử dụng quy trình làm việc. Trong một số trường hợp, bạn muốn tự động gán một giá trị cho lĩnh vực dựa trên giá trị của lĩnh vực khác. Trong trường hợp này, bạn thường sẽ cố gắng sử dụng một cột tính, nhưng một số lần, nó chỉ sẽ không nhận được công việc làm. Quy trình làm việc SharePoint Designer là một lựa chọn tương đối quản trị thân thiện để rơi xuống vào mã và visual studio. Nếu bạn đi con đường này, được nhận thức của vấn đề địa chỉ của bài viết này (http://paulgalvin.spaces.live.com/blog/cns!CC1EDB3DAA9B8AA!405.entry).
  3. Xử lý sự kiện: Như quy trình làm việc, đây là một giải pháp sau khi thực tế. Xử lý sự kiện của bạn là một hội đồng .NET (C#, VB.NET) để mà SharePoint đi kiểm soát. Đối tượng bạn phát triển có quyền truy cập vào dữ liệu của danh sách (và các mô hình toàn bộ đối tượng) và có thể làm bất kỳ tính toán cần thiết.
  4. Sử dụng SharePoint Designer để tạo các hình thức tùy chỉnh mục nhập. Tôi không có kinh nghiệm trực tiếp với cách tiếp cận này, but I hear they are doing good things with NewForm.aspx these days 🙂
  5. Cuộn mình ASP.NET dữ liệu nhập hàm (như là một trang web độc lập hoặc là một phần web) và sử dụng mà thay vào đó.

Nếu có ai biết lựa chọn khác và/hoặc tốt hơn, Xin vui lòng gửi bình luận và tôi sẽ cập nhật cơ thể của bài đăng này.

<kết thúc />

Technorati Tags:

Yes/No (hộp kiểm) lọc nội dung truy vấn Web phần

Để lọc cho một truy vấn cho có/không có hộp kiểm có tựa đề "PG Milestone", cấu hình CQWP như thế này:

hình ảnh

Đây là một một trong những câu hỏi rõ ràng-một lần-bạn-biết-nó nhưng hard-to-find-an-answer-to: Làm thế nào để lọc trên có/không có hộp kiểm sử dụng phần nội dung truy vấn web.

Người đầu tiên kết quả tìm kiếm Tôi tìm thấy bằng cách sử dụng cụm từ tìm kiếm "bộ lọc nội dung có/không truy vấn web phần." là bằng phẳng ra sai, Vì vậy tôi nghĩ rằng tôi sẽ đặt này lên đó và xem nếu nó có thể thay thế kết quả không chính xác trong kết quả tìm kiếm tiêu biểu.

Nó là khá dễ dàng: Đúng giá trị = "1" và sai giá trị bằng nhau "1" (đẹp retro, thực sự).

Trong ví dụ trên, Tôi tạo ra trang web cột loại Yes/No" (hộp kiểm)" được đặt tên "PG Milestone". Tôi thêm nó vào một thư viện tài liệu, tải lên một vài tài liệu, Đặt giá trị cho một cặp vợ chồng và thử nghiệm nó.

<kết thúc />

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: ,

MOSS nói với tôi My cột tên là Reserved hoặc sử dụng … Nhưng nó không phải là

CẬP NHẬT 12/04/07: Xem này Microsoft KB (http://support.microsoft.com/kb/923589) cho thông tin liên quan.

Thực sự, nó chỉ ra nó là, Nhưng tricksy MOSS đã làm cho nó khó khăn.

Khách hàng của tôi có một số công việc phát triển trên trang web MOSS của mình cuối tuần qua. Nó là một chút của một mớ bòng bong như những gì ông thực sự đã làm, nhưng điều này là kết quả cuối cùng:

  • Anh ta cố gắng thêm một cột trang web được gọi là "số lượng" và MOSS bài trả lời: "Cột tên mà bạn đã nhập là đã sử dụng hoặc dành riêng. Chọn tên khác."
  • Ông cố gắng thêm nó vào một môi trường và rằng công trình. Do đó, "Số lượng" không phải là một tên dành riêng.
  • Ông cố gắng để tìm một cột trang web hiện có tên là "số lượng" trong đó bộ sưu tập trang web. Ông không thể tìm thấy nó.

Tôi đã làm một số nghiên cứu, và thậm chí một số mã hóa, được bôi sáp lên triết học và cuối cùng thấy rằng một cột tên là số lượng đã làm, Thực tế, tồn tại. Vào "_Hidden" Nhóm. Do đó, chúng tôi không thể tìm thấy nó thông qua giao diện người dùng SharePoint.

Làm thế nào nó đã nhận được không? Tôi không biết, nhưng tôi có một lý thuyết (hoặc là vợ tôi sẽ gọi nó, "blah blah blah"). Một nơi nào đó dọc theo dòng, một Tuyệt vời bốn mươi mẫu được thêm vào và có thể kích hoạt tại một trang web trong bộ sưu tập trang web. Nó được sau đó ngừng hoạt động (hoặc trang web loại bỏ). Cột trang web, Tuy nhiên, ở lại nhưng tại "_Hidden" Nhóm. Nếu ai đó biết tốt hơn, Xin vui lòng cho tôi biết thông qua thư điện tử hoặc các bài đăng trong các ý kiến.

SharePoint nói sự thật. Nó là hầu như không có giá trị chỉ ra rằng thư đó sẽ không tốt như nó có thể. Nó sẽ được tốt đẹp để xem ngã ba tin nhắn đó vào hai khác nhau thư trong tương lai: 1) Nói rằng tên cột được dành riêng hoặc nó không phải là. 2) Nếu nó không được bảo lưu, Hiển thị các trang web, hoặc ít nhóm, nơi tên cột đã được sử dụng.

</kết thúc>

Trình bày OM dữ liệu thông qua một danh sách tùy chỉnh (hoặc, Được một OM dữ liệu Displayor [như YACC, nhưng khác nhau])

Ngày hôm nay, Tôi đã dành một số giờ theo dõi xuống các nguyên nhân gốc đằng sau tin nhắn "cột tên mà bạn đã nhập đang được dùng hoặc dành riêng. Chọn tên khác."

Cột trong câu hỏi có thể được tạo ra, xóa và tạo lại trong một môi trường, Vì vậy, tôi biết nó không phải là một tên dành riêng. Tuy nhiên, Tôi chỉ đơn giản là không thể tìm bất cứ nơi nào cột thông qua giao diện người dùng SharePoint tiêu chuẩn tại bất kỳ trang web trong bộ sưu tập trang web.

Tôi đăng để MSDN diễn đàn ở đây và các indomitable Andrew Woodward chỉ cho tôi theo hướng dữ liệu cơ bản mô hình đối tượng.

Tôi đã đi ra đến CodePlex để tìm thấy một số công cụ mà có thể giúp tôi nhìn vào dữ liệu OM cơ bản và giúp tôi xác định vị trí các vấn đề.

Tôi đã thử một số công cụ và họ đã rất mát mẻ và thú vị nhưng cuối cùng, giao diện người dùng đã không được tốt, đủ cho mục đích của tôi. Tôi không phải chỉ trích họ bằng bất kỳ phương tiện, nhưng rõ ràng các công cụ, nhà sản xuất không có vấn đề của tôi trong tâm trí khi họ tạo ra giao diện người dùng của họ :). Hầu hết mọi người dường như đầu tư một số tiền hợp lý của thời gian và nỗ lực trong việc tạo ra máy trạm / ứng dụng khách hàng cung cấp cây lượt xem, nhấp chuột phải vào menu ngữ cảnh và vv.. Đây là tốt đẹp và tất cả, nhưng nó là rất nhiều công việc để tạo ra một kinh nghiệm người sử dụng hàng đầu dòng cũng là rất linh hoạt.

Tôi thực sự cần một câu trả lời cho vấn đề này. Nó xảy ra với tôi rằng nếu tôi có thể nhận được tất cả các cột trang web trong bộ sưu tập trang web vào một danh sách tùy chỉnh, Tôi có thể lọc, sắp xếp và tạo ra quan điểm rằng sẽ giúp tôi tìm thấy này được cho là hiện tại cột (mà nó đã làm, BTW). Tôi đã đi trước và đã làm đó và một giờ hoặc hai sau đó, có tất cả các cột trang web của tôi được tải vào một danh sách tùy chỉnh nhãn grouping, sắp xếp và vv.. Tôi tìm thấy câu trả lời của tôi năm phút sau đó.

Nếu và khi tôi đã đi qua thế giới, Tôi nghĩ rằng tôi sẽ nghị định rằng tất cả các nhà cung cấp công cụ SharePoint phải nghiêm túc xem xét bề mặt của dữ liệu mô hình đối tượng trong một danh sách tùy chỉnh. Như vậy, Tôi có quyền lực để tìm kiếm bất kỳ cách nào tôi muốn (hạn chế, Tất nhiên, bởi tính năng tiêu chuẩn sharepoint).

Quy trình làm việc SharePoint Designer hành động tùy chỉnh — Các quan sát về <Thiết kế FieldBind loại =”StringBuilder” … />

Chỉ là một sự quan sát nhanh chóng là có một sự khác biệt rất quan trọng giữa hai định nghĩa:

<FieldBind lĩnh vực = "InParam1" DesignerType = "StringBuilder" ID = "2" Văn bản = "Đầu vào tham số #1" />

so với:

<FieldBind lĩnh vực = "InParam1" ID = "2" Văn bản = "Đầu vào tham số #1" />

Đầu tiên cho thấy như thế này trong SPD:

hình ảnh

trong khi các chương trình sau đó như thế này:

hình ảnh

I’m not sure how helpful these screen shots are but I put in the effort to make them so you have to view them 🙂

Các quan sát là điều này: StringBuilder cho phép bạn xây dựng một chuỗi (rõ ràng) bằng cách trộn với nhau chuỗi literals và dữ liệu quy trình làm việc (thông qua các "thêm tra cứu" nút ở góc dưới bên trái). Khi bạn sử dụng nút thêm tra cứu, Nó chèn một mã thông báo trong các hình thức"[%Token %]". Khi SharePoint invokes hành động tùy chỉnh của bạn, (Mã C# trong trường hợp của tôi), SharePoint đi kỷ niệm chính nó, không có giá trị kỷ niệm. Nếu bạn sử dụng loại thiết kế mặc định (loại thứ hai), SharePoint mở rộng kỷ niệm và đi các giá trị thực tế của kỷ niệm để hành động của bạn.

StringBuilder = xấu, mặc định thiết kế loại = tốt.

Tất nhiên, đó là những gì tôi thực sự có nghĩa là. Chỉ cần không thử và vượt qua một tham số để hành động tùy chỉnh của bạn khi các nhà thiết kế loại = StringBuilder. Sử dụng các loại thiết kế mặc định và chuỗi một StringBuilder để nó lên phía trước nếu bạn cần phải xây dựng chuỗi phức tạp trong công việc của bạn (mà bất ngờ là chính xác những gì một không để tạo ra một đối tượng năng động cho hành động email, nhưng đó là một chủ đề cho một blog entry, Har har).

<kết thúc />

Kích hoạt quy trình làm việc sớm — Một giải pháp y

CẬP NHẬT: Xem này thảo luận MSDN, đặc biệt là mục cuối: http://forums.microsoft.com/MSDN/showpost.aspx?postid=2631057&siteid=1. Nó mô tả một điều kiện mà có thể ngắn mạch này toàn bộ điều. Trong ngắn hạn, nó có thể như đơn giản như làm cho ít nhất một trong các trường bắt buộc.

Tôi có một thư viện tài liệu hỗ trợ tám loại nội dung.

Tôi có một quy trình làm việc SharePoint Designer muốn để tính toán và gán cho một lời nhắc nhở ngày"" bởi chỉ đơn giản là trừ 30 ngày từ một cột, "ngày hết hạn". Điều này chỉ xảy ra đối với một trong các loại nội dung, "Bảo hiểm". Mục tiêu kinh doanh là để sản xuất một KPI cho thấy hai loại bảo hiểm tài liệu: "về để hết hạn" và "hết hạn." (Bạn có thể đọc thêm về hình thức này của KPI và nhiều hơn nữa đáng kể khoan xuống Ở đây).

Tôi đã đặt cấu hình quy trình làm việc để cháy khi một mục mới được tạo ra và khi một mục được sửa đổi. Ý tưởng là khi một tài liệu bảo hiểm được tải lên, chúng tôi tính toán một "cảnh báo ngày" Dựa trên ngày hết hạn. Một cặp lượt xem làm việc trong kết nối với một danh sách KPI để làm nổi bật những điều kiện này khi người dùng nhấn trang chủ của họ.

Chiến lược này không hoạt động khi tôi tải lên một tài liệu.

Tôi tải lên các tài liệu và tôi đang trình bày với màn hình nhập dữ liệu meta. Tại thời điểm này, Tôi đã gặp rắc rối. SharePoint đã, sớm từ quan điểm của tôi, bắn quy trình làm việc. Tôi đã không có một cơ hội để chọn đúng loại nội dung và cũng không chỉ định một ngày hết hạn. Cùng một lúc, Các công việc không cháy khi tôi nhấn nút gửi vào thời gian này. Có một số logic được xây dựng trong "tin" mà lần đầu tiên gửi là một phần của các "tạo" sự kiện. Vì vậy … công việc của tôi đã bắn và khi nó thực hiện, nó đã được thông qua giá trị mặc định meta dữ liệu.

Tốt nhất công việc-xung quanh tôi biết là để chèn một "tạm dừng cho đến khi" Các hoạt động trong công việc. Tôi đã tạm dừng công việc cho 1 phút. Trong khi nó tạm dừng, Tôi chọn đúng loại nội dung, nhập dữ liệu meta và gửi. Tạm ngừng hoàn thành và các công việc tiền khi cần thiết. (Lưu ý rằng trong môi trường của tôi, bộ đếm thời gian công việc hoạt động từ SPD không hoạt động ra khỏi hộp. Bạn có thể có cùng một vấn đề. Xem Ở đây để biết chi tiết).

Tôi không thích "chậm trễ ma thuật" làm việc xung quanh. Điều gì xảy ra nếu người sử dụng tải lên một tài liệu và các vòng điện thoại và cuộc trò chuyện tiếp theo outlasts tạm ngừng? Tôi có thể tạm dừng dài, nhưng tôi vẫn còn có không thích nó.

Tôi đã viết về việc này trên các diễn đàn MSDN ở đây: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2430725&SiteID=1