Постраничная навигация в xml документах — различия между версиями
(создана старница) |
м (removed Category:СБИС; added Category:Визуализации и формы ввода using HotCat) |
||
(не показано 5 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
− | == | + | [http://inside.sbis.ru/doc/_layouts/WordViewer.aspx?id=/doc/3%20%20%20%20%20%20%20%203/09.%20%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D0%B8%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B/%D0%9E%D1%82%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%20xml-%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2/%D0%A0%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D0%B8%20%D0%BF%D0%BE%20%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B5%20xslt%20%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%BE%D0%B2.docx Общая инструкция] |
+ | |||
+ | ==Отображение документа с постраничной навигацией табличной части== | ||
Чем больше размер документа пересылаемого через ЭДО, тем больше времени необходимо на его визуализацию. Визуализация больших xml документов (>1Mb) в личном кабинете может занимать несколько некомфортных секунд. Чтобы сделать просмотр документов всегда быстрым и без задержек следует при разработке визуализаций документов, которые могут быть потенциально большими, применять технологию постраничного показа табличной части. | Чем больше размер документа пересылаемого через ЭДО, тем больше времени необходимо на его визуализацию. Визуализация больших xml документов (>1Mb) в личном кабинете может занимать несколько некомфортных секунд. Чтобы сделать просмотр документов всегда быстрым и без задержек следует при разработке визуализаций документов, которые могут быть потенциально большими, применять технологию постраничного показа табличной части. | ||
Строка 55: | Строка 57: | ||
</xsl:if> | </xsl:if> | ||
</source> | </source> | ||
− | Если перед темплейтом, который что-то показывает, нет условий | + | Если перед темплейтом, который что-то показывает, нет условий указанных выше, то результат работы темплейта будет выводится на каждой странице. |
====Вывод табличной части с навигацией по страницам==== | ====Вывод табличной части с навигацией по страницам==== | ||
Строка 99: | Строка 101: | ||
</xsl:choose> | </xsl:choose> | ||
</source> | </source> | ||
+ | |||
+ | |||
+ | [[Категория:Визуализации и формы ввода]] |
Текущая версия на 10:57, 2 августа 2019
Содержание
Отображение документа с постраничной навигацией табличной части
Чем больше размер документа пересылаемого через ЭДО, тем больше времени необходимо на его визуализацию. Визуализация больших xml документов (>1Mb) в личном кабинете может занимать несколько некомфортных секунд. Чтобы сделать просмотр документов всегда быстрым и без задержек следует при разработке визуализаций документов, которые могут быть потенциально большими, применять технологию постраничного показа табличной части. В визуализацию документа добавляется анализ его размера. Если документ большой (например, количество строк табличной части больше 50), то табличная часть выводится постранично, а остальные части документа (шапка, подвал) показываются в зависимости от номера текущей страницы.
Данная технология касается только отображения документа на экране. При печати или при сохранении в PDF, документ в любом случае будет выведен в полном объеме без постраничной навигации.
Общая схема изменений в xslt:
- В xslt добавляются несколько глобальных служебных переменных, которые хранят в себе информацию о номере текущей отображаемой страницы, количестве записей таблицы, количестве страниц, которые будут показываться.
- В корневом темплейте добавляется вызов служебного div-а, который отвечает за постраничное отображение документа. Этот блок div имеет свой идентификатор и параметры, которые заданы разработчиками.
- Показ шапки и подвала документа настраивается в зависимости от номера текущей страницы. Информацию в шапке, например, показывать только на первой странице, а подвал – только на последней. Однако, рекомендуется показывать шапку и подвал всегда и сделать только навигацию по страницам.
- При отображении строк табличной части добавляются условия показа строк в зависимости от номера текущей страницы и количества записей на странице.
Подробная схема изменений в xslt
Глобальные переменные
В начале xslt необходимо объявить 4 глобальные переменные:
- РазмерСтраницы – будет содержать в себе количество записей, которое должно отображаться на странице. Значение по-умолчанию: 0. В момент отображения документа автоматически заполняется значением из поля «Размер страницы» в форме добавления способа представления.
- Страница – хранит в себе текущую отображаемую страницу. Значение по-умолчанию: 0. Значение этой переменной меняется автоматически.
- КоличествоЗаписей – в эту переменную необходимо записать общее количество строк табличной части документа которые будут разнесены по страницам.
- КоличествоСтраниц – результат деления общего количества записей на размер страницы, округленный в большую сторону, или 1, если документ всегда должен отображаться на одной странице.
Пример записи переменных:
<xsl:param name="РазмерСтраницы">0</xsl:param>
<xsl:param name="Страница">0</xsl:param>
<xsl:variable name="КоличествоЗаписей" select="count(//СвТов)"/>
<xsl:variable name="КоличествоСтраниц">
<xsl:choose>
<xsl:when test="$РазмерСтраницы > 0">
<xsl:value-of select="ceiling($КоличествоЗаписей div $РазмерСтраницы)"/>
</xsl:when>
<xsl:otherwise>1</xsl:otherwise>
</xsl:choose>
</xsl:variable>
Добавление служебного div
В корневом темплейте (<xsl:template match="/">) перед строкой <xsl:apply-templates/> необходимо добавить условие вывода служебного div-а, который при отображении документа позволит добавить постраничную навигацию:
<xsl:if test="$РазмерСтраницы>0">
<div id="sds-presentation-paging" sds-presentation-pagesize="{$РазмерСтраницы}" sds-presentation-recordcount="{$КоличествоЗаписей}" sds-presentation-pagecurrent="{$Страница}"/>
</xsl:if>
Вывод общей информации документа
Если какую либо информацию необходимо выводить только на первой странице, то перед темплейтом (-ами) необходимо добавить условие:
<xsl:if test="$Страница=0">
……. вызов Вашего темплейта или группы темплейтов….
</xsl:if>
Если какую либо информацию необходимо выводить только на последней странице, то перед темплейтом (-ами) необходимо добавить условие:
<xsl:if test="$Страница = $КоличествоСтраниц - 1">
……. вызов Вашего темплейта или группы темплейтов….
</xsl:if>
Если перед темплейтом, который что-то показывает, нет условий указанных выше, то результат работы темплейта будет выводится на каждой странице.
Вывод табличной части с навигацией по страницам
Перед отображением табличной части необходимо добавить условие, которое будет показывать строки в зависимости от того какой размер страницы: Если размер страницы больше 0 то запускается логика показа строк постранично. Если размер страницы 0, то показываем все строки на одной странице.
<xsl:choose>
<xsl:when test="$РазмерСтраницы > 0">
….. постранично….
<xsl:otherwise>
<xsl:apply-templates select="Таблица/СтрокаТаблицы"/>
</xsl:otherwise>
</xsl:choose>
В первом случае для того чтобы на странице выводить необходимое количество записей, учитывая при этом смещение (например, при размере страницы 20, на второй странице должны показываться строки с 21 по 40) необходимо: Добавить переменную в которой будет хранится порядковый номер первой строки на странице:
<xsl:variable name="startPosition" select="$Страница * $РазмерСтраницы + 1"/>
Добавить переменную в которой будет хранится порядковый номер последней строки на странице:
<xsl:variable name="endPosition" select="$startPosition + $РазмерСтраницы"/>
При вызове темплейта строки в условие отбора добавить отбор по позиции. Т.е. темплейт показа строки должен работать на те строки у которых текущая позиция больше или равна переменной startPosition и меньше endPosition:
<xsl:apply-templates select="Таблица/СвТов[position()>=$startPosition and $endPosition > position()]"/>
Пример:
<xsl:choose>
<xsl:when test="$РазмерСтраницы > 0">
<xsl:variable name="startPosition" select="$Страница * $РазмерСтраницы + 1"/>
<xsl:variable name="endPosition" select="$startPosition + $РазмерСтраницы"/>
<xsl:apply-templates select="Таблица/СвТов[position()>=$startPosition and $endPosition > position()]"/>
</xsl:when>
<xsl:otherwise>
<!--Обычным образом по старинке весь список-->
<xsl:apply-templates select="Таблица/СвТов"/>
</xsl:otherwise>
</xsl:choose>