分类存档: SharePoint 发展

谨防打破变化到 ItemStyle.xsl

我正在用 ItemStyle.xsl 自定义外观的内容查询 Web 部件和午餐时间的权利, 我做了更改为 xsl 破碎. 我没有意识到它, 但这产生了深远的影响整个网站集. 共进午餐,在我返回时走, 注意到这个消息出现在一堆的地方:

无法显示此 Web 部件. 对问题进行疑难解答, 在一个 Windows SharePoint 服务兼容 HTML 编辑器,如 Microsoft Office SharePoint 设计器中打开此网页. 如果问题仍然存在, 请与 Web 服务器管理员联系.

我责怪客户端 (还不实现它在这点我的错) 但最终注意到那视觉工作室智能感知警告我我有畸形 XSL. 更正了它和一切开始工作.

要命时要小心处理 ItemStyle.xsl (和全球的 XSL 文件中的任何) — 打破他们会影响站点集合中的许多文物.

<结束 />

在网格中显示内容查询 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:与 param 名称="EditMode" 请选择="$cbq_iseditmode" />
        </xsl:应用模板>
      </xsl:当>
      <xsl:当 测试="@Style = 'NewsBigItem'">
        <xsl:应用模板 请选择="." 模式="itemstyle">
          <xsl:与 param 名称="CurPos" 请选择="$CurPosition" />
        </xsl:应用模板>
      </xsl:当>
      <xsl:当 测试="@Style = 'NewsCategoryItem'">
        <xsl:应用模板 请选择="." 模式="itemstyle">
          <xsl:与 param 名称="CurPos" 请选择="$CurPosition" />
        </xsl:应用模板>
      </xsl:当>

      <!--
              将当前的位置和 lastrow 传递给网格 itemstyle.xsl 模板.
              ItemStyle.xsl 将使用,要发出打开和关闭 <表> 标签.
      -->
      <xsl:当 测试="@Style = 电网">
        <xsl:应用模板 请选择="." 模式="itemstyle">
          <xsl:与 param 名称="CurPos" 请选择="$CurPosition" />
          <xsl:与 param 名称="最后" 请选择="$LastRow" />
        </xsl:应用模板>
      </xsl:当>

      <xsl:否则>
        <xsl:应用模板 请选择="." 模式="itemstyle">
        </xsl:应用模板>
      </xsl:否则>
    </xsl:选择>
  </xsl:模板>

注释说明的目的所做的更改.

答案是肯定的, "OuterTemplate.CallItemTemplate" 本身是从另一个模板调用吗. 通过搜索此文本字符串查找该模板:

<xsl:模板 名称="OuterTemplate.Body">

滚动 OuterTemplate.Body 中的说明并插入 LastRow 参数,如下所示 (显示为斜体的注释):

<xsl:调用模板 名称="OuterTemplate.CallItemTemplate">
  <xsl:与 param 名称="CurPosition" 请选择="$CurPosition" />
  <!-- 插入 LastRow 参数. -->
  <xsl:与 param 名称="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:与 param 名称="UrlColumnName" 请选择="'' ImageUrl"/>
      </xsl:调用模板>
    </xsl:变量>
    <xsl:变量 名称="SafeLinkUrl">
      <xsl:调用模板 名称="OuterTemplate.GetSafeLink">
        <xsl:与 param 名称="UrlColumnName" 请选择="'' LinkUrl"/>
      </xsl:调用模板>
    </xsl:变量>
    <xsl:变量 名称="DisplayTitle">
      <xsl:调用模板 名称="OuterTemplate.GetTitle">
        <xsl:与 param 名称="标题" 请选择="@Title"/>
        <xsl:与 param 名称="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:与 param 名称="价值" 
请选择="@Project_x005F_x0020_Budget"></xsl:与 param> </xsl:调用模板> </运输署> <运输署 对齐="权利"> <xsl:调用模板 名称="formatcurrency"> <xsl:与 param 名称="价值" 请选择="@Project_x005F_x0020_Expenses">
</xsl:与 param> </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:值的选择 ="$DisxslyTitle"/> </一> <div 类 ="描述"> <xsl:值的 select="@Description" /> </div> </div> </div>
--> </tr> <!-- 发出关闭表标记. 如果我们不是在最后一行, 这将显示为空白. --> <xsl:值的 请选择="$tableEnd" 禁用输出转义=""/> </xsl:模板> <xsl:模板 名称="formatcurrency"> <xsl:param 名称="价值" 请选择="0" /> <xsl:值的 请选择='数字格式($价值, "$DDD,DDD,DDD。GDA, "工作人员")' /> </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 设计器来创建窗体自定义项. 我没有用这种方法直接经验, but I hear they are doing good things with NewForm.aspx these days 🙂
  5. 滚你自己 ASP.NET 数据入口函数 (作为一个独立的 web 页或 web 部件) 而改用的.

如果有人知道其他和/或更好的选项, 请发表评论,并再更新这篇文章的正文.

<结束 />

Technorati 标签:

在 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".
  • 钻取通过创建工程 <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:与 param 名称="BarDisplayLabel" 请选择="' 建议 '"/> <xsl:与 param 名称="BarPercent" 请选择="$percentProposed"/> <xsl:与 param 名称="QueryFilterFieldName" 请选择="状态"/> <xsl:与 param 名称="QueryFilterFieldValue" 请选择="' 建议 '"/> <xsl:与 param 名称="TotalItems" 请选择="$totalProposed"></xsl:与 param> </xsl:调用模板> <xsl:调用模板 名称="ShowBar"> <xsl:与 param 名称="BarDisplayLabel" 请选择="停滞"/> <xsl:与 param 名称="BarPercent" 请选择="$percentStalled"/> <xsl:与 param 名称="QueryFilterFieldName" 请选择="状态"/> <xsl:与 param 名称="QueryFilterFieldValue" 请选择="停滞"/> <xsl:与 param 名称="TotalItems" 请选择="$totalStalled"></xsl:与 param> </xsl:调用模板> <xsl:调用模板 名称="ShowBar"> <xsl:与 param 名称="BarDisplayLabel" 请选择="' 在过程'"/> <xsl:与 param 名称="BarPercent" 请选择="$percentInProcess"/> <xsl:与 param 名称="QueryFilterFieldName" 请选择="状态"/> <xsl:与 param 名称="QueryFilterFieldValue" 请选择="' 在过程'"/> <xsl:与 param 名称="TotalItems" 请选择="$totalInProcess"></xsl:与 param> </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:与 param 名称="%" 请选择="$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:选择> 要做到这一点.

其他资源:

快乐转型!

<结束 />

订阅我的博客!

目前 OM 数据通过自定义列表 (或, 然而另一个 OM 数据 Displayor [像 YACC, 但不同])

今天, 我花了的几个小时追踪消息"您输入的列名称已在使用或保留背后的根本原因. 请选择另一个名称。"

可以创建列问题, 删除并重新创建另一个环境中, 所以我知道这不是一个保留的名称. 不过, 我只是找不到列中任何地方通过任何站点上的标准 SharePoint 用户界面站点集合中.

我过帐到 MSDN 论坛在这里 和不屈不挠 安德鲁伍德沃德 我指出了方向的基础对象模型数据.

我去 codeplex 要查找一些工具,将帮助我同行到 OM 的基础数据和帮助我找到麻烦.

我试过几种工具,他们非常酷和有趣,但在结束, 用户界面并不是适合我的目的. 我不批评他们以任何方式, 但显然,工具庄家没有我的问题铭记他们创建它们的 UI 时 :). 大多数人似乎要投资大量的时间和精力创建工作站 / 客户端应用程序提供了树视图, 用鼠标右键单击上下文菜单等等. 这些都是很好,所有, 但它是很多工作,以创建顶级的用户体验,也是非常灵活.

我真的需要这一问题的答案. 我突然想到,如果我能得到的所有站点列到一个自定义列表中的站点集合中, 可以在筛选, 排序和创建视图,帮助我找到这个据称是现有列 (它没有, BTW). 我走在前面,后来,和一两个小时, 了我的网站中的所有列都加载到自定义列表与分组, 排序,等等。. 五分钟后答案.

如果成功接管世界, 我想我会命令所有 SharePoint 工具提供商必须认真都考虑堆焊他们自定义列表中的对象模型数据. 这种方式, 我有力量 若要搜索任何方式我想要 (约束, 答案是肯定的, 由标准 sharepoint 功能).