0

SP 2010 でデータ ビュー Web パーツを作成して、サブ サイトからいくつかの情報を収集しています。これらのサイトには、ユーザーにタスクが割り当てられたプロジェクト タスク リストが含まれています。顧客は、タスクが割り当てられているかどうかに基づいて、ユーザーごとにプロジェクトを一覧表示するロールアップを見たいと考えています。プロジェクトには複数のタスクを含めることができるため、どのタスクがどのユーザーに割り当てられているかに応じて、ロールアップでプロジェクトが複数のユーザーの下に表示される可能性があります。

簡単に言うと、ユーザーごとに個別のプロジェクトの数を選択する方法が必要です。

xml 構造は次のようになります。

<Rows>
  <Row Project="Project 1" TaskID="1" AssignedTo="Worker A" />
  <Row Project="Project 1" TaskID="2" AssignedTo="Worker B" />
</Rows>

このことから、プロジェクト数は次のようになります。
作業者 A: 1
作業者 B: 1

私は次の式を試しています:

count($nodeset[not(@Project=preceding-sibling::Row/@Project) and @AssignedTo = current()/@AssignedTo])

これは、作業者 A に対して 1 プロジェクトのカウントを返しますが、作業者 A に対してプロジェクト 1 が既にカウントされているため、作業者 B に対しては 0 を返します。

私は xslt についてあまり知りませんが、私が理解していることから、 current() を使用することは、最もリソースに優しい方法ではありません。Muenchian のグループ化を試みましたが、機能させることができませんでした。しかし、もう一度やり直してください。繰り返しますが、私は xslt に悪臭を放っています。

4

1 に答える 1

0

この変換:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:key name="kWorker" match="@AssignedTo" use="."/>
 <xsl:key name="kProjByWorker" match="@Project" use="../@AssignedTo"/>
 <xsl:key name="kProjWorker" match="@Project" use="concat(.,'+',../@AssignedTo)"/>

 <xsl:template match="/*">
  <xsl:apply-templates select=
  "//@AssignedTo
     [generate-id()
     =
      generate-id(key('kWorker',.)[1])
      ]"/>
 </xsl:template>

 <xsl:template match="@AssignedTo">
  <xsl:value-of select="concat('&#xA;',.,': ')"/>

  <xsl:value-of select=
   "count(
     key('kProjByWorker', .)
       [generate-id()
       =
        generate-id(key('kProjWorker', concat(.,'+',current()))[1])]
     )"/>
 </xsl:template>
</xsl:stylesheet>

次の XML ドキュメント(提供されているもののより挑戦的なバージョン) に適用した場合:

<Rows>
  <Row Project="Project 1" TaskID="1" AssignedTo="Worker A" />
  <Row Project="Project 1" TaskID="2" AssignedTo="Worker B" />
  <Row Project="Project 1" TaskID="2" AssignedTo="Worker A" />
  <Row Project="Project 2" TaskID="1" AssignedTo="Worker A" />
</Rows>

必要な正しい結果が生成されます

Worker A: 2
Worker B: 1

説明:

Muenchianのグループ化方法を 2 回使用します。すべての異なるワーカーを検索し、次にこのワーカーに割り当てられた個別のプロジェクトを検索します。

于 2012-08-22T13:13:29.517 に答える