酒吧是對擴展的青苔仍然很高

今天, 我是使用用戶端和描述如何修改內容查詢 web 部件和顯示的內容類型的資訊的附加位.

"第一次。, 您配置 CQWP 連接到其資料來源, 然後你將它匯出到您的工作站, 修改 <CommonViewFields>, 上傳, 刪除原來和現在是 ' 引物’ 若要顯示這些其他列. 下一次, 打開 SharePoint 設計器, 導航到網站集合根目錄並找到 ItemStyle.xsl. 複製一個範本作為一個有用的起點. 然後回去修改 CQWP,使這個新範本的使用. 最後, 修改範本來呈現新的欄位! (別忘了要檢查它回來在以便其他使用者可以看到的結果)."

這是對我都很清楚 (最重要的我們 SharePoint 開發人員類型) 什麼和如何它是相當不錯, 真的, CQWP 的資料檢索方面是如此井-分開的資料演示文稿方面. 但, 它不是那麼容易解釋, 是它?

<結束 />

Technorati 標籤: ,

在網格中顯示內容查詢 Web 部件的結果 / 表

概述和目標

外框, 苔蘚’ 內容查詢 Web 組件 (CQWP) 其結果顯示在清單格式中, 類似于搜尋結果. 它也是可能以網格格式顯示結果 (e 小節. HTML 表的格式). 柵格格式是在某些情況下更好. 描述了如何實現這種效果在這篇文章.

業務應用場景

有在用戶端與企業級苔蘚推出. 我們已設計及其分類,例如,專案層次結構中的第一類公民,有他們自己的頂層網站. 專案經理保持單身人士清單專案的摘要資訊, 如標題, 預算, 預計的完工日期, 其餘的預算和其他摘要類型欄位. 由"單身" 我的意思是保證包含只有一個專案的自訂 SharePoint 清單. 簡單地, 它看起來像這樣:

圖像

技術方法是多描述的一樣 在這裡 (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). CQWP 使用 XSL 轉換來發出為瀏覽器的 HTML 呈現.

我總是設想結果前潛入 XSL,因為 XSL 是一場噩夢. 這裡是我期望的結果:

圖像

像這樣的 HTML 生成的結果:

<html>
 <正文>
 <中心>
 < 邊框= 1>

<!-- 標籤 — —>
 <tr 背景色= 藍>
 <運輸署><字體 顏色= 白色><b>專案名稱</b></字體></運輸署>
 <運輸署 對齊= 正確><字體 顏色= 白色><b>完成日期</b></字體></運輸署>
 <運輸署 對齊= 正確><字體 顏色= 白色><b>預算</b></字體></運輸署>
 <運輸署 對齊= 正確><字體 顏色= 白色><b>實際費用</b></字體></運輸署>
 <運輸署><字體 顏色= 白色><b>整體狀態</b></字體></運輸署>
 </tr>

<tr>
 <運輸署>重新連接電腦房.</運輸署>
 <運輸署 對齊= 正確>02/01/08</運輸署>
 <運輸署 對齊= 正確>22,500.00</運輸署>
 <運輸署 對齊= 正確>19,000.00</運輸署>
 <運輸署>在進展中</運輸署>
 </tr>

<tr>
 <運輸署>提供伺服器的 SQL 升級</運輸署>
 <運輸署 對齊= 正確>04/01/08</運輸署>
 <運輸署 對齊= 正確>7,500.00</運輸署>
 <運輸署 對齊= 正確>0.00</運輸署>
 <運輸署>計畫</運輸署>
 </tr>

</>
 </中心>
 </正文>
</html>

方法

按照這些步驟來創建網格:

  1. 確定網格的元件 (行/列).
  2. 定義並創建必要的網站列.
  3. 創建子網站,為專案和單身人士名單.
  4. 將 CQWP 添加到 web 頁並將其配置為搜索您的清單.
  5. 修改 CQWP 的 XML 來收集起來的額外的列.
  6. 修改 XSL 生成表.

我要去專注于數位六. 數位從一到四個是直向前和任何 CQWP 使用者已經做的東西. 五號已被證實的其他人包括詳盡螢幕截圖載貨的本文從 MSDN 在這裡 (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) 和希瑟 · 所羅門的博客 在這裡 (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).

螺栓和螺母

開始和執行步驟一到五的 MSDN 文檔和希瑟 · 所羅門條步驟.

在這一點, 向頁面添加了您的 CQWP 和你有你 <CommonViewFields> 根據需要配置.

按照通常的步驟, 拿到這些中間結果:

1. 創建內容類型, 該內容類型和兩個網站範本的自訂清單. 這裡是內容類型:

圖像

這裡是網站結構:

圖像

2. 創建我的專案的子網站和單身人士專案摘要清單後添加 CQWP:

圖像

3. 添加我想要通過的所有其他資訊 <CommonViewFields>:

        <屬性 名稱="CommonViewFields" 類型="字串">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</屬性>

請注意,我不得不保持在一個線上或它的所有屬性欄位將不工作 (CQWP 會告訴我,該查詢返回任何專案).

4. 在這一點, 我們準備去超越 MSDN 文章翻到希瑟 · 所羅門的文章. 跟隨她的腳步開始近一步 #5 若要創建一個自訂 / 未託管的版本的 ItemStyle.xsl. 希瑟的聽從, 通過一步了 11 和得到這些中間結果:

4.1: 我的 XSL 範本的名稱,如下所示:

<xsl:範本名稱 ="網格" 匹配 ="行[@Style = 電網]" 模式 ="itemstyle">

她建議,我也略有修改 <xsl:為每個 …> 通過添加 <br /> 標記,以提供一個更清潔的清單:

    <xsl:為每個 請選擇="@*">
      P:<xsl:值的 請選擇="名稱()" /><br/>
    </xsl:為每個>

4.2: 我修改的 web 部件, 轉到外觀並選擇我"網格" 樣式:

圖像

應用更改並在這裡是結果:

圖像

從上面我們可以看到我們希望田野 (專案名稱, 費用, 狀態, 等) 可供我們使用時我們發出的 HTML. 不只如此, 但我們看到,我們必須引用那些列在 XSL 中的名稱. 舉個例子, 我們引用專案的狀態作為"Project_x005F_x0020_Name".

在這一點, 我們離開從希瑟的博客,從這些巨人的肩膀上, 添加我自己一點點.

ContentQueryMain.xsl

請注意: 當對 ContentQueryMain.xsl 以及 ItemStyle.xsl 的更改, 您需要檢查那些檔回之前您看到您的更改的效果.

為網格製作目的, 苔蘚使用兩個不同的 XSL 檔來生成的結果我們看到從 CQWP. 生成輸出的前一位, 我們修改了 ItemStyle.xsl. 苔蘚實際上使用另一個 XSL 檔, ContentQueryMain.xsl 到 ItemStyle.xsl 來生成其 HTML 結合. 正如其名稱所暗示, ContentQueryMain.xsl 是"主" 控制整體液流的翻譯的 XSL. 它遍歷所有找到的項並將它們傳遞到範本逐一在 ItemStyle.xsl. 我們將修改 ItemStyle.xsl 生成開放 <表> 之前發射的第一行的資料並關閉標記 <表> 標記後發出的最後一行. 要做到這一點, ContentQueryMain.xsl 被修改,以將兩個參數傳遞給我們"網格" ItemStyle.xsl 中的範本, "最後一行" 和"當前行". ItemStyle.xsl 使用這些有條件地發出必要的標記.

使用希瑟 · 所羅門的技術, 我們找到 ContentQueryMain.xsl. 它坐落在 ItemStyle.xsl 一樣的地方. 此螢幕擷取畫面應該説明:

圖像

我們需要進行以下更改:

  • 修改 xsl 範本, "CallItemTemplate" 這實際上調用我們在 ItemStyle.xsl 的網格範本. 我們將到網格範本傳遞兩個參數,以便它會有這些資料,它需要有條件地生成打開和關閉 <表> 標籤.
  • 另一位叫"CallItemTemplate 的 ContentQueryMain.xsl 的修改" 把它傳遞"LastRow" 因此,LastRow 可能會轉嫁到我們的網格範本的參數.

找到名為"OuterTemplate.CallItemTemplate 的範本" 由字串標識:

  <xsl:範本 名稱="OuterTemplate.CallItemTemplate">

替換整個範本,如下所示:

  <xsl:範本 名稱="OuterTemplate.CallItemTemplate">
    <xsl:param 名稱="CurPosition" />

    <!--
      添加"LastRow" 參數.
      我們只使用它時專案風格通行證中的"網格".
    -->
    <xsl:param 名稱="LastRow" />

    <xsl:選擇>
      <xsl:當 測試="@Style = 'NewsRollUpItem'">
        <xsl:應用範本 請選擇="." 模式="itemstyle">
          <xsl:與參數 名稱="編輯模式" 請選擇="$cbq_iseditmode" />
        </xsl:應用範本>
      </xsl:當>
      <xsl:當 測試="@Style = 'NewsBigItem'">
        <xsl:應用範本 請選擇="." 模式="itemstyle">
          <xsl:與參數 名稱="CurPos" 請選擇="$CurPosition" />
        </xsl:應用範本>
      </xsl:當>
      <xsl:當 測試="@Style = 'NewsCategoryItem'">
        <xsl:應用範本 請選擇="." 模式="itemstyle">
          <xsl:與參數 名稱="CurPos" 請選擇="$CurPosition" />
        </xsl:應用範本>
      </xsl:當>

      <!--
              將當前的位置和 lastrow 傳遞給網格 itemstyle.xsl 範本.
              ItemStyle.xsl 將會使用,發出打開和關閉 <表> 標籤.
      -->
      <xsl:當 測試="@Style = 電網">
        <xsl:應用範本 請選擇="." 模式="itemstyle">
          <xsl:與參數 名稱="CurPos" 請選擇="$CurPosition" />
          <xsl:與參數 名稱="最後" 請選擇="$LastRow" />
        </xsl:應用範本>
      </xsl:當>

      <xsl:否則>
        <xsl:應用範本 請選擇="." 模式="itemstyle">
        </xsl:應用範本>
      </xsl:否則>
    </xsl:選擇>
  </xsl:範本>

評論描述所做的更改的目的.

答案是肯定的, "OuterTemplate.CallItemTemplate" 本身是從另一個範本調用嗎. 通過搜索此文本字串查找該範本:

<xsl:範本 名稱="OuterTemplate.Body">

滾動流覽 OuterTemplate.Body 中的說明並插入 LastRow 參數,如下所示 (顯示為斜體的注釋):

<xsl:調用範本 名稱="OuterTemplate.CallItemTemplate">
  <xsl:與參數 名稱="CurPosition" 請選擇="$CurPosition" />
  <!-- 插入 LastRow 參數. -->
  <xsl:與參數 名稱="LastRow" 請選擇="$LastRow"/>
</xsl:調用範本>

所有這一切之後, 我們終於有了正確設置,我們 ItemStyle.xsl 可以發出的東西 <表> 在正確的地點標記.

ItemStyle.Xsl

請注意: 再次, 在 ItemStyle.xsl 中進行任何更改,所以,你看到那些更改的效果後檢查.

在這裡,我們有兩個任務:

  • 替換整個網格範本. 你可以複製/粘貼從下面.
  • 添加一些胡言亂語外範本定義,使"formatcurrency" 要工作範本. (你可以告訴我有一個纖細的控制碼在 XSL).

第一次, 靠近頂部的 ItemStyle.xsl, 添加這條線:

  <!-- 一些胡言亂語,使我們能夠顯示美國. 貨幣. -->
  <xsl:十進位格式 名稱="工作人員" 數位="D" />

  <xsl:範本 名稱="預設值" 比賽="*" 模式="itemstyle">

注意直接之前將其添加 <xsl:範本名稱 ="預設" …> 定義.

下一次, 回到我們的網格範本. 用下面的代碼替換整個網格範本. 它是徹底的評論, 但不要猶豫給我發電子郵件或在我的博客留下評論,如果你有問題.

  <xsl:範本 名稱="網格" 比賽="行[@Style = 電網]" 模式="itemstyle">

    <!--
      ContentMain.xsl 通過 CurPos 和最後.
      我們用這些來有條件地發出打開和關閉 <表> 標籤.
    -->
    <xsl:param 名稱="CurPos" />
    <xsl:param 名稱="最後" />

    <!-- 以下變數都是從標準 ItemStyle.xsl 中未被修改 -->
    <xsl:變數 名稱="SafeImageUrl">
      <xsl:調用範本 名稱="OuterTemplate.GetSafeStaticUrl">
        <xsl:與參數 名稱="UrlColumnName" 請選擇="'' ImageUrl"/>
      </xsl:調用範本>
    </xsl:變數>
    <xsl:變數 名稱="SafeLinkUrl">
      <xsl:調用範本 名稱="OuterTemplate.GetSafeLink">
        <xsl:與參數 名稱="UrlColumnName" 請選擇="'' LinkUrl"/>
      </xsl:調用範本>
    </xsl:變數>
    <xsl:變數 名稱="DisplayTitle">
      <xsl:調用範本 名稱="OuterTemplate.GetTitle">
        <xsl:與參數 名稱="標題" 請選擇="@Title"/>
        <xsl:與參數 名稱="UrlColumnName" 請選擇="'' LinkUrl"/>
      </xsl:調用範本>
    </xsl:變數>
    <xsl:變數 名稱="LinkTarget">
      <xsl:如果 測試="@OpenInNewWindow = true" >_blank</xsl:如果>
    </xsl:變數>

    <!--
      在這裡我們定義一個變數, ""tableStart.  這包含的 HTML,我們使用來定義表的列標籤開幕.  請注意,如果 CurPos = 1, 它包括 HTML 在 CDATA 標記.
      否則, 它將為空.

      TableStart 的值是一大,每次通過 ContentQueryMain.xsl 調用 ItemStyle 時.
    -->
    <xsl:變數 名稱="tableStart">
      <xsl:如果 測試="$CurPos = 1">
        <![CDATA[
        <表格邊框 = 1>
          <tr 背景色 ="藍色">
            <運輸署><字體顏色 ="白"><b>專案名稱</b></字體></運輸署>
            <運輸署對齊 ="權利"><字體顏色 ="白"><b>完成日期</b></字體></運輸署>
            <運輸署對齊 ="權利"><字體顏色 ="白"><b>預算</b></字體></運輸署>
            <運輸署對齊 ="權利"><字體顏色 ="白"><b>實際費用</b></字體></運輸署>
            <運輸署><字體顏色 ="白"><b>整體狀態</b></字體></運輸署>
          </tr>
        ]]>
      </xsl:如果>
    </xsl:變數>

    <!--
      另一個變數, tableEnd 只是定義關閉表標記.

      與 tableStart 一樣, 它始終是一大.  這就是為什麼它的值分配有條件地根據是否我們被路過的最後一行 ContentQueryMain.xsl.
    -->
    <xsl:變數 名稱="tableEnd">
      <xsl:如果 測試="$CurPos = $Last">
        <![CDATA[ </表> ]]>
      </xsl:如果>
    </xsl:變數>

    <!--
      總是發出 tableStart 的內容.  如果這不是通過 ContentQueryMain.xsl 傳遞給我們的第一行, 然後我們知道它的值將顯示為空白.

      禁用輸出轉義因為當 tableStart 不空白, 它包括我們要由瀏覽器呈現的實際 HTML.  如果我們不告訴 XSL 解析器來禁用輸出轉義, 它將生成之類"&這是;表&gt;" 而不是"<表>".
    -->
    <xsl:值的 請選擇="$tableStart" 禁用輸出轉義=""/>


    <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
      -->
      <運輸署>
        <xsl:值的 請選擇="@Project_x005F_x0020_Name"/>
      </運輸署>

      <運輸署 對齊="權利">
        <xsl:值的 請選擇="@Project_x005F_x0020_End_x005F_x0020_Date"/>
      </運輸署>

      <運輸署 對齊="權利">
        <xsl:調用範本 名稱="formatcurrency">
          <xsl:與參數 名稱="價值" 
請選擇="@Project_x005F_x0020_Budget"></xsl:與參數> </xsl:調用範本> </運輸署> <運輸署 對齊="權利"> <xsl:調用範本 名稱="formatcurrency"> <xsl:與參數 名稱="價值" 請選擇="@Project_x005F_x0020_Expenses">
</xsl:與參數> </xsl:調用範本> </運輸署> <運輸署> <xsl:值的 請選擇="@Project_x005F_x0020_Status"/> </運輸署> <!-- 滿足以下所有條件被注釋掉,以澄清事情. 不過, 把它帶回來,塞進 <運輸署> 看看它的效果. --> <!-- <div id ="linkitem" 類 ="專案"> <xsl:如果測試 ="字串長度($SafeImageUrl) != 0"> <div 類 ="圖像-地區-左"> <href ="{$SafeLinkUrl}" 目標 ="{$LinkTarget}"> <img 類 ="圖像-固定寬度" src ="{$SafeImageUrl}"
alt ="{@ImageUrlAltText}"/> </一> </div> </xsl:如果> <div 類 ="連結"> <xsl:調用範本
name="OuterTemplate.CallPresenceStatusIconTemplate"/> <href ="{$SafeLinkUrl}"
目標 ="{$LinkTarget}" 標題 ="{@LinkToolTip}"> <xsl:值的選擇 ="$DisplayTitle"/> </一> <div 類 ="說明"> <xsl:值的 select="@Description" /> </div> </div> </div>
--> </tr> <!-- 發出關閉表標記. 如果我們不是在最後一行, 這將顯示為空白. --> <xsl:值的 請選擇="$tableEnd" 禁用輸出轉義=""/> </xsl:範本> <xsl:範本 名稱="formatcurrency"> <xsl:param 名稱="價值" 請選擇="0" /> <xsl:值的 請選擇='數位格式($價值, "$DDD,DDD,DDD。DD", "工作人員")' /> </xsl:範本>

標準 WSS/MOSS 資料輸入螢幕不支援級聯下拉清單 (或其他內部-從通信)

更新 (04/2008): 這個很好的博客條目顯示良好的 javascript 的基礎方法解決此問題: http://webborg.blogspot.com/2008/04/add-functions-and-events-to-sharepoint.html

更新二: (04/2008): 這篇博客以及前景看好: http://www.cleverworkarounds.com/2008/03/13/free-mosswss-2007-web-part-hide-controls-via-javascript/

一周幾次, 如果不是每日,, 論壇使用者的描述通常會通過級聯下拉式功能表的要求. 舉個例子, 我有兩個下拉控制項:

  • 美國的清單. 國家
  • 美國的清單. 城市.

作為負責任的 UI 提供, 我們想要這樣操作:

  • 保羅選擇美國. 從下拉狀態.
  • 這將導致城市下拉篩選只有那些屬於所選國家的城市.
  • 保羅從這已篩選的清單中選擇一個城市.

沒有開箱支援此功能. 事實上, 沒有為任何一種直接的內部形式溝通的 OOB 支援. 這包括以程式設計方式隱藏/啟用/禁用欄位欄位更改表單上其他地方的回應.

這篇文章來描述可能的解決辦法和這些的真正目的是選項知他們:

  1. 開發自訂的列類型. 作為一個自訂列開發人員, 您可以完全控制"世界" 自訂該列的. 您可以實現級聯下拉那種方式.
  2. 請考慮使用工作流. 在某些情況下, 您想要自動將一個值分配給欄位基於另一個欄位的值. 在此情況下, 您通常會嘗試使用計算的列, 但有的時候, 它只是不會得到這份工作做. 設計器 SharePoint 工作流是下降到代碼和 visual studio 相對管理友好替代. 如果你走這條路, 意識到處理的問題 這篇文章 (http://paulgalvin.spaces.live.com/blog/cns!CC1EDB3DAA9B8AA!405.entry).
  3. 事件處理常式: 工作流一樣, 這是一個經過--事實上解決方案. 您的事件處理常式是.NET 程式集 (C#, VB.NET) 將控制傳遞到哪個 SharePoint. 你開發的物件有權訪問清單的資料 (和整個物件模型) 可以做任何所需的計算.
  4. 使用 SharePoint 設計器來創建表單自訂項. 我沒有用這種方法直接經驗, 但是我聽說他們最近在NewForm.aspx上做得很好
  5. 滾你自己 ASP.NET 資料輸入功能 (作為一個獨立的 web 頁或 web 部件) 而改用的.

如果有誰知道其他的、 更好的選項, 請發表評論,並會更新這篇文章的正文.

<結束 />

Technorati 標籤:

是/否 (核取方塊) 在內容查詢 Web 組件中篩選

若要篩選的查詢為是沒有核取方塊題為"PG 里程碑", 像這樣配置 CQWP:

圖像

這是另一個的那些明顯-一次-你知道-it,但 hard-to-find-an-answer-to 的問題: 如何篩選在是 / 使用內容查詢 web 部件沒有核取方塊.

第一次 搜尋結果 我發現使用搜索詞"篩選器是/否內容查詢 web 部件" 是平錯, 所以我把這放在那裡看看是否它可以替換在典型的搜尋結果中不正確的結果.

它是很容易: True 值 ="1" 和 false 值不相等"1" (漂亮的復古, 實際上).

在上面的示例, 我創建的網站類型的列的"是/否 (核取方塊)" 命名"PG 的里程碑". 將其添加到文件庫, 上傳幾個檔, 設置幾個值,並對其進行測試.

<結束 />

在 SharePoint 中創建橫條圖

概述:

(更新 12/04/07: 在連結到此位址通過一個非常有趣的 web 部件的另一個博客的末尾添加另一個有意思的資源)

此博客條目描述了如何在 SharePoint 中創建橫條圖. 這在 WSS 和苔蘚的環境中工作,因為它只取決於資料檢視 web 部件.

總體方法是,如下所示:

  1. 創建一個包含您想要的圖形的資料的清單或文件庫.
  2. 關聯的文件庫的地方 / 自訂清單拖到頁上並將其轉換為一個資料檢視 web 部件 (DVWP).
  3. 修改 DVWP 的 XSL 生成 HTML,它顯示的圖形.

業務應用場景 / 安裝程式:

我創建了一個自訂清單與標準的標題列和一個額外的列, "地位". 此模型 (很簡單) "授權費用" 其中標題表示專案和地位值的清單中的方案:

  • 建議
  • 在進程中
  • 停滯

目標是產生互動的水準橫條圖,顯示了這些狀態碼.

我有填充清單,它看起來像這樣:

圖像

創建資料檢視 Web 組件:

通過向頁中添加的自訂清單創建 DVWP (在我的案子的網站頁面) 按照說明進行操作 在這裡 (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!395.entry).

除了簡單地創建 DVWP, 我們還需要設置分頁屬性,以顯示所有可用行. 對我來說, 這看起來像這樣的東西:

圖像

在這一點, 我始終關閉 SPD 和瀏覽器. 然後重新打開使用瀏覽器的頁. 這樣可以避免不小心弄在頁面上 web 部件佈局.

修改 XSLT:

現在是時候要修改 XSLT.

我總是使用 visual studio 為此. (請參閱 在這裡 為將説明你很多的智慧感知有關的重要說明).

創建一個空的專案添加四個新檔 (改為"原始" 以及"新" 在適當情況下):

  • Original.xslt
  • New.xslt
  • 原 Params.xml
  • 新 Params.xml

以我為例, 它看起來像這樣:

圖像

修改 web 部件和複製 params 和 XSL 到"原始" 在 Visual Studio 的版本.

在這裡的目標是導致的 XSL 轉換的結果,我們從回來的 DVWP 查詢到 HTML 呈現為一個圖.

為此目的, 它有助於首先考慮什麼 HTML 應該看起來像之前我們被稱為"XSL"瘋狂迷惑. (要弄清楚, 以下是只是一個例子; 不要鍵入或複製/粘貼到 visual studio 中. 我提供充分的打擊,後來在那寫-向上的切入點). 下面的示例圖呈現 HTML 後立即按:

示例條形圖

相應的 HTML:

<html>
<正文>
<中心>
<表寬度 = 80%>
<tr><運輸署><中心>水準橫條圖</運輸署></tr>
<tr>
<td 對齊 ="中心">
<表格邊框 ="1" 寬度 = 80%>
<tr>
<td 寬度 = 10%>打開</運輸署>
<運輸署><表 cellpadding ="0" 格 ="0" 邊境 = 0 寬度 = 50%><背景色 tr = 紅色><運輸署>&n b s p;</運輸署></tr></表></運輸署>
</tr>
<tr>
<td 寬度 = 10%>關閉</運輸署>
<運輸署><表 cellpadding ="0" 格 ="0" 邊境 = 0 寬度 = 25%><背景色 tr = 紅色><運輸署>&n b s p;</運輸署></tr></表></運輸署>
</tr>
<tr>
<td 寬度 = 10%>停滯</運輸署>
<運輸署><表 cellpadding ="0" 格 ="0" 邊境 = 0 寬度 = 25%><背景色 tr = 紅色><運輸署>&n b s p;</運輸署></tr></表></運輸署>
</tr>
</表>
</運輸署>
</tr>
</表>
</正文>
</html>

我用一個死簡單的方法,對通過設置為"紅色"行的背景顏色創建我的酒吧.

這是這裡的外賣: 在結束, 我們做的所有創建 HTML 具有行和列.

XSLT 範本:

我已經複製的 XSLT 生成水準橫條圖. 它是相當好注釋掉,因此我不會加在你那多在這裡除了這些筆記:

  • 我開始用預設 SharePoint 設計師給了我,當我第一次創建 DVWP 的 XSL.
  • 我是能夠從 SPD 的砍這 657 行到 166 線條.
  • 我沒搞砸在附近使用參數的 XML 檔 (這是單獨從 XSL 和你就會知道你去修改 DVWP 本身是什麼意思; 有兩個檔,您可以修改). 不過, 為了簡化它, 我刪除幾乎所有人都從 XSL. 這意味著,如果您想要使用這些參數, 你只需要將其變數定義添加回 XSL. 這將是容易,因為你將有原始的 XSL 變數定義在您的 visual studio 專案.
  • 你應該能夠複製並粘貼這直接到您的 visual studio 專案. 然後, 我的電話中刪除和插入來電轉接到"ShowBar".
  • 通過創建工程,深化 <a href> 喜歡這個: http://server/List?FilterField1=fieldname&FilterValue1=actualFilterValue. 這種技術可能在其他上下文中的價值. 在第一次, 我以為我會需要符合更複雜的格式: http://server/List/AllItems.aspx?View={guid}&FilterField1=blah&FilterValue1=blah, 但在我的環境,這不是必要. 此清單中的 URL 通過 SharePoint 被傳遞給我們,所以這是很容易概括.

這裡是:

<xsl:樣式表 版本="1.0" 排除-結果-首碼="rs z o s ddwrt dt msxsl" 
xmlns:msxsl="金塔:架構-微軟-com:xslt" xmlns:xsl="http://www.w3.org/ 1999/XSL/變換"
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="金塔:架構-微軟-com:辦公室" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="uuid:C2F41010-65B3-11 d 1-A29F-00AA00C14882" xmlns:rs="金塔:架構-微軟-com:行集" xmlns:z="#RowsetSchema"
xmlns:ddwrt2="金塔:frontpage:內部"
> <xsl:輸出 方法="html" 縮進="沒有" /> <xsl:十進位格式 ="" /> <xsl:param 名稱="ListUrlDir"></xsl:param> <!-- 我需要這個支援向下切入. --> <xsl:範本 比賽="/" xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:__designer=http://schemas.microsoft.com/WebParts/v2/DataView/designer xmlns:asp="http://schemas.microsoft.com/ASPNET/20"
> <xsl:變數 名稱="dvt_StyleName"></xsl:變數> <xsl:變數 名稱="" 請選擇="/dsQueryResponse/行/列" /> <xsl:變數 名稱="dvt_RowCount" 請選擇="計數($行)" /> <xsl:變數 名稱="空空如也" 請選擇="$dvt_RowCount = 0" /> <xsl:變數 名稱="dvt_IsEmpty" 請選擇="$dvt_RowCount = 0" /> <xsl:選擇> <xsl:當 測試="$dvt_IsEmpty"> 沒有資料關係圖!<br/> </xsl:當> <xsl:否則> <!-- 有趣的東西從這裡開始. 我們需要在關係圖中定義一對變數的每一行: 總專案數和合計百分比. --> <xsl:變數 名稱="totalProposed" 請選擇="計數(/dsQueryResponse/行/列[正常化空間(@Status) = '建議'])" /> <xsl:變數 名稱="percentProposed" 請選擇="$totalProposed $dvt_RowCount div" /> <xsl:變數 名稱="totalInProcess" 請選擇="計數(/dsQueryResponse/行/列[正常化空間(@Status) '中' =])" /> <xsl:變數 名稱="percentInProcess" 請選擇="$totalInProcess $dvt_RowCount div" /> <xsl:變數 名稱="totalStalled" 請選擇="計數(/dsQueryResponse/行/列[正常化空間(@Status) = 停滯])" /> <xsl:變數 名稱="percentStalled" 請選擇="$totalStalled $dvt_RowCount div" /> <!-- 我們定義我們的 HTML 表在這裡. 我借用一些標準 SharePoint 樣式在這裡使它保持一致. 我認為它將榮譽對全球的 css 檔的更改,以及主題將重寫. --> < 寬度="100%" ="0" ="2" 樣式="右邊框: 1 固體 #C0C0C0; 下邊框: 1 固體 #C0C0C0; 邊框式左: 固體; 邊框左邊寬度: 1; 邊框式頂部: 固體; 邊框頂部寬度: 1;"> <tr> <運輸署 對齊="中心"> < 邊框="1" 寬度="100%"> <!-- 我們想要圖的每個狀態, 我們稱之為"ShowBar" 範本. 我們將它傳遞: 1. 行標籤. 這被轉化為超連結. 2. 百分比 (上面的變數). 3. 實際的欄位名稱的基礎清單中的代碼. 這不需要匹配顯示標籤. 4. 為匹配的欄位值 #3. 5. 此狀態碼的總計項 (不總計的所有狀態碼). 它會發出 <tr></tr> 和水準橫條圖線. 我們為我們想要查看每個狀態碼調用此範本. --> <xsl:調用範本 名稱="ShowBar"> <xsl:與參數 名稱="BarDisplayLabel" 請選擇="' 建議 '"/> <xsl:與參數 名稱="BarPercent" 請選擇="$percentProposed"/> <xsl:與參數 名稱="QueryFilterFieldName" 請選擇="狀態"/> <xsl:與參數 名稱="QueryFilterFieldValue" 請選擇="' 建議 '"/> <xsl:與參數 名稱="TotalItems" 請選擇="$totalProposed"></xsl:與參數> </xsl:調用範本> <xsl:調用範本 名稱="ShowBar"> <xsl:與參數 名稱="BarDisplayLabel" 請選擇="停滯"/> <xsl:與參數 名稱="BarPercent" 請選擇="$percentStalled"/> <xsl:與參數 名稱="QueryFilterFieldName" 請選擇="狀態"/> <xsl:與參數 名稱="QueryFilterFieldValue" 請選擇="停滯"/> <xsl:與參數 名稱="TotalItems" 請選擇="$totalStalled"></xsl:與參數> </xsl:調用範本> <xsl:調用範本 名稱="ShowBar"> <xsl:與參數 名稱="BarDisplayLabel" 請選擇="' 在過程'"/> <xsl:與參數 名稱="BarPercent" 請選擇="$percentInProcess"/> <xsl:與參數 名稱="QueryFilterFieldName" 請選擇="狀態"/> <xsl:與參數 名稱="QueryFilterFieldValue" 請選擇="' 在過程'"/> <xsl:與參數 名稱="TotalItems" 請選擇="$totalInProcess"></xsl:與參數> </xsl:調用範本> </> </運輸署> </tr> </> </xsl:否則> </xsl:選擇> </xsl:範本> <!-- 此範本並在橫條圖中顯示單個行的工作. 你可能會做大部分的你在這裡調整. --> <xsl:範本 名稱="ShowBar"> <xsl:param 名稱="BarDisplayLabel" /> <!-- 要顯示標籤 --> <xsl:param 名稱="BarPercent"/> <!-- 合計百分比. --> <xsl:param 名稱="QueryFilterFieldName"/> <!-- 用於跳轉到查詢 & 篩選器 --> <xsl:param 名稱="QueryFilterFieldValue"/> <!-- 用於跳轉到查詢 & 篩選器 --> <xsl:param 名稱="TotalItems" /> <!-- 這個 barlabel 的總計數 --> <tr> <!-- 欄標籤本身. --> <運輸署 ="ms formbody" 寬度="30%"> <!-- 這下一組語句生成一個查詢字串,允許我們深入到基礎資料的篩選視圖. 我們做的幾件事情在這裡使用: 1. 我們可以將 FilterField1 和 FilterValue1 傳遞給要篩選的列的清單. 2. SharePoint 將關鍵的參數傳遞給我們, ListUrlDir 指出,對此 DVWP 為"正在運行"的基礎清單. 不是 XSL 好玩? --> <xsl:文本 禁用輸出轉義=""> <![CDATA[<href ="]]></xsl:文本> <xsl:值的 請選擇="$ListUrlDir"/> <xsl:文本 禁用輸出轉義=""><![CDATA[?FilterField1 =]]></xsl:文本> <xsl:值的 請選擇="$QueryFilterFieldName"/> <xsl:文本 禁用輸出轉義=""><![CDATA[&FilterValue1 =]]></xsl:文本> <xsl:值的 請選擇="$QueryFilterFieldValue"/> <xsl:文本 禁用輸出轉義=""><![CDATA[">]]></xsl:文本> <xsl:值的 請選擇="$BarDisplayLabel"/> <xsl:文本 禁用輸出轉義=""><![CDATA[</一>]]></xsl:文本> <!-- 下一位顯示一些數位的格式: "(總計 / % 總數的)" --> (<xsl:值的 請選擇="$TotalItems"/> / <!-- 這為我們創造一個很好的百分比標籤. 謝謝, 微軟! --> <xsl:調用範本 名稱="percentformat"> <xsl:與參數 名稱="%" 請選擇="$BarPercent"/> </xsl:調用範本>) </運輸署> <!-- 最後, 發出 <運輸署> 標籤為酒吧本身.--> <運輸署> < ="0" ="0" 邊框="0" 寬度="{一輪($BarPercent * 100)+1}%"> <tr 背景色="紅色"> <xsl:文本 禁用輸出轉義=""><![CDATA[&n b s p;]]></xsl:文本> </tr> </> </運輸署> </tr> </xsl:範本> <!-- 這是直接取自我在 MS 範本中找到一些 XSL. --> <xsl:範本 名稱="percentformat"> <xsl:param 名稱="%"/> <xsl:選擇> <xsl:當 測試="數位格式($%, '#,##0%;-#,##0%')= '南'">0%</xsl:當> <xsl:否則> <xsl:值的 請選擇="數位格式($%, '#,##0%;-#,##0%')" /> </xsl:否則> </xsl:選擇> </xsl:範本> </xsl:樣式表>

結果:

從上面的 XSL 生成此圖:

圖像

鑽取到的基礎資料通過點擊的狀態碼:

圖像

思想總結:

可這被普遍?

我愛這個圖形的概念, 但我討厭的事實是,我不得不進去,做這麼多的手動編碼. 我已經很少考慮到它是否可以被推廣也樂觀, 但我也有點害怕的時候,可能是某處的道路上不會提供任何變通的磚牆. 如果任何人有一些好的點子上這, 請在評論中記或 電子郵件通知我.

垂直圖:

這是一個水準橫條圖. 很有可能要創建一個垂直圖. 我們只需要更改 HTML. 我會開始以同樣的方式: 創建 HTML 表示形式的分隔號形圖,然後找出如何獲得,通過 XSL. 如果任何人有興趣, 我能說服試試,處理掉這些問題. 如果某人已經做了,, 請讓我知道,我很樂意鏈接到你的博客🙂

我認為一個垂直圖表的挑戰,是圖形的標籤更難管理, 但當然不是不可能.

欄位名稱地方:

有至少兩個事情要尋找與您的欄位名稱.

第一次, 帶有空格的欄位名稱已在 XSL 轉義. 這可能是一個問題在這裡:

        <xsl:變數 名稱="totalProposed" 
請選擇="計數(/dsQueryResponse/行/列[正常化空間(@Status) = '建議'])" />

如果您的狀態"" 列實際上是名為"狀態碼" 然後您需要引用它作為"Status_x0020_Code":

   <xsl:變數 名稱="totalProposed" 
請選擇="計數(/dsQueryResponse/行/列[正常化空間(@Status_x0020_Code) = '建議'])" />

第二次, 我對此有點模糊, 但你也必須要對欄位名稱更改的通知. 如果你的名字你的領域"狀態碼" 然後再上, 將它重命名為"AFE 狀態", "內部名稱" 不會更改. 內部名稱仍將"狀態碼" 並且必須引用作為"Status_x0020_Code". "其他資源" 連結可説明診斷和糾正這種問題.

那個顏色:

我選了"紅色" 因為它是我喜歡的那一刻. 它不會是一個大問題來顯示不同的顏色,以便提供號碼的不僅僅是視覺的描述, 但也提供一個有用的 KPI. 舉個例子, 如果所占的百分比"停頓" Afe 的 > 10% 然後顯示紅色, 否則顯示它在黑. 使用 <xsl:選擇> 要實現此目的.

其他資源:

快樂轉型!

<結束 />

訂閱我的博客!

SharePoint 不提供 “誰有權訪問” 報告

更新 01/28/08: 此 codeplex 專案解決了此問題: http://www.codeplex.com/AccessChecker. 我沒有用它, 但它看起來很有希望,如果這是您的環境中需要解決的問題.

更新 11/13/08: 喬爾 · 奧爾森在這裡更大的安全管理問題上寫了一個很好的職位: http://www.sharepointjoel.com/Lists/Posts/Post.aspx?清單 = 0cd1a63d-183c-4fc2 %2 D 8320 -ba5369008acb&ID = 113. 它連結到其它有用的資源數目.

論壇使用者和用戶端經常問一個問題沿這些線: "我如何生成具有對網站的許可權的所有使用者的清單" 或者"如何可以我自動警報具有訪問到有關到清單中所做的更改清單中的所有使用者?"

現成的解決方案為此沒有出去. 如果你想一想了一會兒, 不難理解為什麼.

SharePoint 安全是非常靈活. 有的使用者至少四個主要類別:

  • 匿名使用者.
  • SharePoint 使用者和組.
  • Active Directory 使用者.
  • 基於表單的身份驗證 (FBA) 使用者.

靈活性意味著,從安全的角度看, 任何給定的 SharePoint 網站將大大不同于另一個. 為了生成訪問清單報告, 一個人需要確定該網站如何保護, 查詢多個不同的使用者設定檔存儲庫,然後呈現一種有用的方式. 這是一個難的問題,要解決一般.

如何組織處理這呢? 我很樂意聽到您的意見或 電子郵件.

</結束>

Technorati 標籤: ,

MOSS 告訴我我的列名稱是保留或使用中 … 但它不是

更新 12/04/07: 請參閱 此 Microsoft 知識庫 (http://support.microsoft.com/kb/923589) 相關資訊.

實際上, 原來它是, 但 調皮 MOSS 不得不使困難.

我的客戶沒有他 MOSS 網站上週末一些開發工作. 它是有點混亂,他真的這樣做, 但最終的結果是這:

  • 他試圖添加一個名為"數量的網站列" 和青苔的答覆: "您輸入的列名稱已在使用或已保留. 請選擇另一個名稱。"
  • 他試圖將其添加到另一個環境和那作品. 因此, "數量" 不是一個保留的名稱.
  • 他將嘗試查找現有的網站列命名為"數量" 在該網站集. 他找不到它.

我做了一些 研究, 甚至一些編碼, 打蠟哲學 終於找到一個名為數量列做了, 事實上, 存在. 正是在"_Hidden" 集團. 因此, 我們找不到它通過 SharePoint 使用者介面.

它怎麼去那裡? 我不知道, 但我有一種理論 (或者是我的老婆會調用它, "等等"). 地方線沿線, 一 神話般的四十範本 添加,並可能在一個網站中的網站集啟動. 它然後被停用 (或網站中刪除). 網站欄, 然而, 但在"_Hidden 依然" 集團. 如果有人知道更好, 請讓我知道通過 電子郵件 或在評論中發佈.

SharePoint 說的真話. 它是幾乎不值得指出的,該消息不是很有用,因為它可以. 它會很高興看到這消息叉成兩個不同的消息在未來: 1) 說的列名稱保留或不是. 2) 如果它未被保留, 顯示該網站, 或者至少組, 在已使用的列的名稱.

</結束>

Technorati 標籤: , ,

本 OM 資料通過一個自訂清單 (或, 然而另一個 OM 資料 Displayor [像 YACC, 但不同])

今天, 我花了的幾個小時追蹤消息"您輸入的列名稱已在使用或保留背後的根本原因. 請選擇另一個名稱。"

可以創建這一欄, 刪除並重新創建另一個環境中, 所以我知道這不是一個保留的名稱. 不過, 我只是找不到列中任何地方通過任何網站上標準的 SharePoint 使用者介面網站集合中.

我過帳到 MSDN 論壇在這裡 和不屈不撓 安德魯 · 伍德沃德 我指出了方向的基礎物件模型資料.

我去 codeplex 找到一些工具,將説明我同行到 OM 的基礎資料和説明我找到麻煩.

嘗試了幾種工具,他們非常酷和有趣,但在結束, 使用者介面並不是適合我的目的. 我不批評他們以任何方式, 但顯然工具製造商不心中有我的問題,他們在創建它們的 UI 時 :). 大多數人似乎要投資大量的時間和精力創建工作站 / 用戶端應用程式提供樹狀檢視, 用滑鼠右鍵按一下內容功能表等等. 這些都是很好,所有, 但這是很多的工作,以創建頂級的使用者體驗,也是非常靈活.

我真的很需要這個問題的答案. 我想到,如果我能得到的所有網站列到一個自訂清單中的網站集合中, 我可以篩選, 排序和創建視圖,能幫我找到這個假想現有列 (它沒有, BTW). 我走在前面,後來,和一兩個小時, 我的網站中的所有列已都載入到與分組的自訂清單嗎, 排序,等等。. 五分鐘後答案.

如果我成功接管世界, 我想我會命令所有 SharePoint 工具供應商必須認真都考慮堆焊他們自訂清單中的物件模型資料. 這種方式, 我擁有的力量 若要搜索任何方式我想 (約束, 答案是肯定的, 由標準 sharepoint 功能).

設計器 SharePoint 工作流自訂操作 — 觀察 <設計器將文字方塊綁定類型 =”StringBuilder” … />

只是有一個非常重要的區別這兩個定義之間的快速觀察:

<文字方塊綁定欄位 ="InParam1" DesignerType ="StringBuilder" Id ="2" 文本 ="輸入參數 #1"/>

與比較:

<文字方塊綁定欄位 ="InParam1" Id ="2" 文本 ="輸入參數 #1"/>

第一次像這樣顯示 SPD 中:

圖像

雖然這樣,後者所示:

圖像

我不確定這些截屏有多大幫助,但我會盡力製作它們,因此您必須查看它們🙂

這是觀察: StringBuilder 使您可以生成一個字串 (很明顯) 字串文本和工作流資料混合在一起 (通過"添加查找" 在左下角的按鈕). 當您使用添加查找按鈕, 它在表單中插入一個權杖"[%權杖 %]". 當 SharePoint 調用自訂操作, (在我的案子中的 C# 代碼), SharePoint 將此標記本身傳遞, 未標記的值. 如果您使用預設的設計器類型 (第二種類型), SharePoint 擴展標記並將標記的實際值傳遞到您的行動.

StringBuilder = 壞, 預設的設計器類型 = 好.

答案是肯定的, 這就是沒有我真正的意思. 不要試著向你自訂的操作傳遞一個參數,當設計器鍵入 = StringBuilder. 使用預設的設計器類型和鏈 StringBuilder 到它前面如果您需要構建複雜的字串,在您的工作流 (順便說一句這正是自己所做的要創建的電子郵件操作的動態主題, 但那是另一個博客條目的主題, har har).

<結束 />

過早的工作流啟動 — 非醫療解決方案

更新: 請參閱此 MSDN 的討論, 特別是最後一項: http://forums.microsoft.com/MSDN/showpost.aspx?postid=2631057&siteid=1. 它描述了一個可能短路這整件事的條件. 在短, 它可能使至少一個欄位強制一樣簡單.

我有一個文件庫,支援八個內容類型.

我有一個 SharePoint 設計師工作流,想要計算和分配"提醒日期" 通過簡單地減去 30 另一列從天, "截止日期". 這應該只發生為內容類型之一, "保險". 企業目標是產生一個顯示兩個類別的保險單據的 KPI: "即將過期" 和"過期。" (您可以閱讀更多關於這種 KPI 和更多堅固下鑽取 在這裡).

已配置了要火當創建新專案和修改專案時的工作流. 想法是,當一份保險的檔上傳, 我們計算"警告日期" 基於到期日期. 一雙視圖與 KPI 清單,當使用者點擊其主頁時突出顯示這些條件有關的工作.

這一戰略不能當上傳文檔.

我上傳的文檔和我被介紹元資料輸入螢幕. 在這一點, 我已經麻煩. SharePoint 已經, 過早地從我的視角, 發射工作流. 我還沒有機會來選取正確的內容類型,也不指定截止日期. 在同一時間, 工作流不會觸發,當我在這個時候按下提交按鈕. 還有一些內置的邏輯,"相信" 那第一次提交是的一部分"創建" 事件. 所以 … 我的工作流已發射並執行它的時候, 傳遞給它的中繼資料的預設值.

最佳解決方式就我知道的是插入"暫停直到" 工作流中的活動. 我有為工作流暫停 1 分鐘. 雖然它暫停, 我選擇的正確的內容類型, 輸入中繼資料和提交. 暫停的時間完成和工作流收益根據需要. (請注意,在我的環境, 從 SPD 的計時器工作流活動不能開箱即用. 你可能會有同樣的麻煩. 請參閱 在這裡 更多詳細資訊).

我不喜歡"魔法延遲" 工作周圍. 如果使用者上傳的文檔和電話響了,隨後的交談中,會發生什麼經久暫停? 我可以做更長的停頓, 但我還是不喜歡它.

我在這裡在 MSDN 論壇上寫了這: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2430725&SiteID=1