Копировать ссылку на страницу Перейти в предыдущий раздел Перейти в следующий раздел

Детальная история работы с объектами хранится в базе данных в формате XML. Например, для документов она фиксируется в таблице SBEDocProtocol в поле Detail. Информация из базы выводится пользователю в окне «История работы» в колонке Детальное описание.

Чтобы в колонке Детальное описание вывести строку в определенном формате, необходимо использовать XSL-преобразование. Подробное описание синтаксиса и используемых элементов см. в справке Microsoft по XSLT.

Настройка XSL-преобразования не является обязательной. Если XSL-преобразование не задано, то данные в формате XML отображаются в том виде, в каком они хранятся в базе данных.

Пример

Постановка задачи

Настроить историю работы с документами:

фиксировать добавление, изменение и удаление прав доступа на документы: ИД пользователя или группы пользователей, имя пользователя или группы пользователей, тип прав;
информацию о правах доступа выводить в формате:

<Имя пользователя или группы пользователей> - <Тип прав доступа>;

если в правах указаны несколько пользователей или групп пользователей, то они должны указываться через запятую и перевод строки.

Решение

Фиксируются значения реквизитов:

ISBEDocAccountID – ИД пользователя или группы пользователей;
ISBEDocAccountName – имя пользователя или группы пользователей;
ISBEDocAccessType – тип прав доступа.

Если пользователя лишили прав на документ, то выводится значение строки локализации SYSRES_SYSCOMP.ACCESS_RIGHTS_REVOKED_TEXT – «Права отозваны».

 

<?xml version="1.0" encoding="windows-1251"?>

<settings>
<action name="laRights" when="always">
<detail when="always">
  <requisite name="ISBEDocAccountID" when="always" />
  <requisite name="ISBEDocAccountName" when="always" />
  <requisite name="ISBEDocAccessType" when="always" />
</detail>
</action>
<view><![CDATA[<?xml version="1.0" encoding="windows-1251"?>
 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 <xsl:output method="text" />
 <xsl:template match="/H">
   <xsl:for-each select="./R">
     <xsl:value-of select="@LN" />: <xsl:value-of select="text()" /><xsl:if test="not(position() = last())">, </xsl:if>
   </xsl:for-each>
   <xsl:if test="count(/H/R) &gt; 0"><xsl:text>&#13;&#10;</xsl:text></xsl:if>
   <xsl:for-each select="./D[@I='1']">
     <xsl:for-each select="./TR">
       <xsl:if test="./R[@N='ISBEDocAccessType']">
         <xsl:value-of select="./R[@N='ISBEDocAccountName']"/>
         <xsl:text> - </xsl:text>
         <xsl:choose>
           <xsl:when test="@S='D'">
             <xsl:text>LoadString('ACCESS_RIGHTS_REVOKED_TEXT'; 'SYSRES_SYSCOMP')</xsl:text>
           </xsl:when>
           <xsl:otherwise>
             <xsl:value-of select="./R[@N='ISBEDocAccessType']"/>
           </xsl:otherwise>
         </xsl:choose>
         <xsl:if test="not(position() = last())"><xsl:text>, &#13;&#10;</xsl:text></xsl:if>
       </xsl:if>
     </xsl:for-each>
   </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>]]>
</view>
</settings>

В результате при изменении прав доступа в истории фиксируется:

Щелкните для увеличения изображения

© Компания DIRECTUM, 2018 Сообщество пользователей DIRECTUM
.navbar > a:hover { background: #FFD73B; }