none
XSLT-кастомизация вывода списка RRS feed

  • Вопрос

  • Пытаюсь решить задачу с выводом некой статистики настроенного списка задач в следующем виде:

    Иванов - 10 - 2 - 2
    Петров - 8 - 3 - 1

    Т.е.  — задачи группируются по полю "исполнитель", далее подсчитывается общее количество задач для исполнителя, количество завершенных (по полю "статус") и количество просроченных задач (по сравнению поле "Статус", "Срок" и "[Сегодня]").

    Я полный новичок в XSLT и лишь смутно представляю себе, как решается подобная задача. Присутствуют еще и другие вычисления, но это уже следующий этап.

    Прошу сообщество направить меня на верный путь!

    18 марта 2011 г. 6:09

Ответы

  • Разобрался, как обычно, сам.

    Итак, чтобы заставить работать Group Totals при группировке по полю с именем пользователя (Создан, Изменен, Исполнитель и т.д.) в XSLT-представлении данных следует найти такую строку:

    <xsl:with-param name="nodeset" select="msxsl:node-set($dvt_Rows)/root//Row[((@AssignedTo)=$groupheader1 or ((not(@AssignedTo) or @AssignedTo='') and $groupheader1=' '))]" />
    
    

    ..(где @AssignedTo - имя вашего поля с пользователем) и заменить ее на следующую:

    <xsl:with-param name="nodeset" select="msxsl:node-set($dvt_Rows)/root//Row[(((substring-before(substring-after(@AssignedTo,'HREF='),'&gt;'))=substring-before(substring-after($groupheader1,'HREF='),'&gt;'))or ((not(@AssignedTo) or @AssignedTo='') and $groupheader1=' '))]" />
    
    

    Теперь можно спокойно размещать на представлении счетчики:

    <xls:value-of select="sum($nodeset/@Поле_для_вычислений)" />
    
    

    Из оригинального решения (ссылку, увы, потерял):
    "The general idea here is that instead of comparing the whole value of person field, we just pull out the value of the hyperlink that points to the user's details"


    • Помечено в качестве ответа vtck 24 марта 2011 г. 6:58
    24 марта 2011 г. 6:56

Все ответы

  • При группировке задач по пользователям средствами фильтра XSLT задается вот такой параметр: 

    <xsl:with-param name="nodeset" select="msxsl:node-set($dvt_Rows)/root//Row[((@AssignedTo)=$groupfooter0 or ((not(@AssignedTo) or @AssignedTo='') and $groupfooter0=' '))]" />
    

    При попытке вернуть количество записей внутри одной группы методом

    <xsl:value-of select="count($nodeset)" />
    
    

    всегда выдается "0". Сразу замечу — это стандартный код, без изменений. Подсчет количества элементов в группировке по полю с пользователем не работает. Есть ли какие либо предложения?

    19 марта 2011 г. 14:19
  • Разобрался, как обычно, сам.

    Итак, чтобы заставить работать Group Totals при группировке по полю с именем пользователя (Создан, Изменен, Исполнитель и т.д.) в XSLT-представлении данных следует найти такую строку:

    <xsl:with-param name="nodeset" select="msxsl:node-set($dvt_Rows)/root//Row[((@AssignedTo)=$groupheader1 or ((not(@AssignedTo) or @AssignedTo='') and $groupheader1=' '))]" />
    
    

    ..(где @AssignedTo - имя вашего поля с пользователем) и заменить ее на следующую:

    <xsl:with-param name="nodeset" select="msxsl:node-set($dvt_Rows)/root//Row[(((substring-before(substring-after(@AssignedTo,'HREF='),'&gt;'))=substring-before(substring-after($groupheader1,'HREF='),'&gt;'))or ((not(@AssignedTo) or @AssignedTo='') and $groupheader1=' '))]" />
    
    

    Теперь можно спокойно размещать на представлении счетчики:

    <xls:value-of select="sum($nodeset/@Поле_для_вычислений)" />
    
    

    Из оригинального решения (ссылку, увы, потерял):
    "The general idea here is that instead of comparing the whole value of person field, we just pull out the value of the hyperlink that points to the user's details"


    • Помечено в качестве ответа vtck 24 марта 2011 г. 6:58
    24 марта 2011 г. 6:56
  • Разобрался, как обычно, сам.

    Итак, чтобы заставить работать Group Totals при группировке по полю с именем пользователя (Создан, Изменен, Исполнитель и т.д.) в XSLT-представлении данных следует найти такую строку:

    <xsl:with-param name="nodeset" select="msxsl:node-set($dvt_Rows)/root//Row[((@AssignedTo)=$groupheader1 or ((not(@AssignedTo) or @AssignedTo='') and $groupheader1=' '))]" />
    
    

    ..(где @AssignedTo - имя вашего поля с пользователем) и заменить ее на следующую:

    <xsl:with-param name="nodeset" select="msxsl:node-set($dvt_Rows)/root//Row[(((substring-before(substring-after(@AssignedTo,'HREF='),'&gt;'))=substring-before(substring-after($groupheader1,'HREF='),'&gt;'))or ((not(@AssignedTo) or @AssignedTo='') and $groupheader1=' '))]" />
    
    
    

    Теперь можно спокойно размещать на представлении счетчики:

    <xls:value-of select="sum($nodeset/@Поле_для_вычислений)" />
    
    

    Из оригинального решения (ссылку, увы, потерял):
    "The general idea here is that instead of comparing the whole value of person field, we just pull out the value of the hyperlink that points to the user's details"


    Извините но я не мог найти строчку 
    <xsl:with-param name="nodeset" select="msxsl:node-set($dvt_Rows)/root//Row[((@AssignedTo)=$groupheader1 or ((not(@AssignedTo) or @AssignedTo='') and $groupheader1=' '))]" />
    28 сентября 2015 г. 11:36