понедельник, 27 мая 2013 г.

Дни рождения у пользователей SharePoint 2010


При решении этого вопроса использовал статью http://gandjustas.blogspot.com/2012/03/sharepoint-1.html

все хорошо и доступно описано. я сделал свою веб-часть в VS положил на страницу.
Хотело что бы отображались фото пользователей и дни рождения, но этого не было. Вот тогда  я решил доработать веб-часть.


для этого:
1. изменяем веб-часть.


2. В свойствах веб-части разворачиваем блок "Отображать свойства" и снимаем галочку "Использовать визуализацию расположения"

3. Копируем все "Получаемые свойства"
4. Вставляем свойства в блокнот (или другой текстовый редактор).
Копируем одно из свойств к примеру <Column Name="BaseOfficeLocation" HitHighLight="true"/>, вставляем ниже и меняем на <Column Name="Birthday" HitHighLight="true"/>.
Копируем весь полученный текст и вставляем обратно в свойства веб-части.

5. В свойствах веб-части нажимаем "Редактор XSL..."


6. Копируем текст в открывшемся окне и вставляем в блокнот (можно конечно и там редактировать)


7. В тексте находим строчку   <xsl:variable name="haswph" select="string-length(workphone) &gt; 0"/>
копируем ее и вставляем ниже.
меняем скопированную строку на <xsl:variable name="hasbirthday" select="string-length(birthday) &gt; 0"/>
8. Далее находим строчку <xsl:if test="$haswph"> и копируем весь тег и вставляем ниже. меняем скопированный тег на 
<xsl:if test="$hasbirthday">
     <li id="BirthdayFild">
       <xsl:value-of select="ddwrt:FormatDateTime(string(birthday) ,1049 ,'dd MMMM ')" />
   </li>
</xsl:if>

9. Копируем полученный текст и вставляем в свойства веб-части.
Сохраняем веб-часть. и у нас получается вот такое:
10. При желании можно добавить слово "День рождения", для этого добавляем  <strong>День рождения: </strong> в код, который мы добавляли в пункте 8. 
вот должно получится:
<xsl:if test="$hasbirthday">
    <li id="BirthdayFild">
       <strong>День рождения: </strong>
       <xsl:value-of select="ddwrt:FormatDateTime(string(birthday) ,1049 ,'dd MMMM ')" />
   </li>
</xsl:if>

11. При таком выведении даты  "День рождения" мы сталкиваемся с проблемой описаной в статье  Bug With SharePoint 2010 XSLT DateFormat Function

12. Решение:
меняем строку  <xsl:value-of select="ddwrt:FormatDateTime(string(birthday) ,1049 ,'dd MMMM ')" />
на 
       <xsl:call-template name="FormatBirthdayDate">
             <xsl:with-param name="dateValue" select="birthday"/>
             <xsl:with-param name="monthFormat">MMMM</xsl:with-param>
       </xsl:call-template>
вот что получается:

<xsl:if test="$hasbirthday">
    <li id="BirthdayFild">
       <strong>День рождения: </strong>
       <xsl:call-template name="FormatBirthdayDate">
             <xsl:with-param name="dateValue" select="birthday"/>
             <xsl:with-param name="monthFormat">MMMM</xsl:with-param>
       </xsl:call-template>
    </li>
</xsl:if>

еще нужно добавить темплейт:

<xsl:template name="FormatBirthdayDate" >
     <!-- Template Parameters -->
     <xsl:param name="dateValue" />
     <xsl:param name="monthFormat" />

     <!-- Split Date -->
     <xsl:variable name="day" select="substring-before($dateValue, '.')" />
     <xsl:variable name="month" select="substring(substring-after($dateValue, '.'), 1, 2)" />
     <xsl:variable name="year" select="substring(substring-after(substring-after($dateValue, '.'), '.'), 1, 4)" />

    <!-- Create US Date Format -->
    <xsl:variable name="USDate">
    <xsl:value-of select="$month" />/<xsl:value-of select="$day" />/<xsl:value-of select="$year" />
    </xsl:variable>

    <!-- Month Notation -->
    <xsl:variable name="monthString">
        <xsl:choose>
           <xsl:when test="$monthFormat='MM'">
           <xsl:value-of select="$month" />
       </xsl:when>
           <xsl:when test="$monthFormat='MMM'">
           <xsl:value-of select="ddwrt:FormatDateTime($USDate, 1049, 'MMM')" />
       </xsl:when>
         <xsl:otherwise>
          <xsl:value-of select="ddwrt:FormatDateTime($USDate, 1049, 'MMMM')" />
       </xsl:otherwise>
    </xsl:choose>
    </xsl:variable>

    <!-- Create Date -->
    <xsl:choose>
        <xsl:when test="string-length($day) = 1">0</xsl:when>
    </xsl:choose>
     <xsl:value-of select="$monthString" /><xsl:text> </xsl:text> <xsl:value-of select="$day" />
</xsl:template>
для этого находим строку: <xsl:template name="ActionBarTemplate"> и перед ней вставляем  код написанный выше.

Очень надеюсь что данная статья будет Вам полезна...

Релевантные ссылки:
Дни рождения пользователей - SharePoint 2013 (Part 1)