Детальная история работы с объектами хранится в базе данных в формате 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) > 0"><xsl:text> </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>, </xsl:text></xsl:if>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>]]>
</view>
</settings>
В результате при изменении прав доступа в истории фиксируется:
|