четверг, 11 октября 2012 г.

Scrolling in Sharepoint Infopath 2010 web form

Проблема: Необходимо создать форму Infopath 2010 для публикации на Sharepoint. В случае если форма содержит несколько представлений (view), при переключении на следующее представление, позиция прокрутки остается на том же месте, где она была в предыдущем представлении.
Поиск решения: Рекомендации не делать больших форм, как решение не подходит. В процессе поиска выяснил, что все формы рендерятся через одну страницу (FormServer.aspx), которая получает в качестве параметра путь к xsn-файлу.
Решение: Добавить в эту страницу javascript-код, который будет скроллировать вверх, если изменялось представление внутри формы. Отслеживание изменения представления ведется через параметр в стилях. В заголовке страницы имеется ссылка вида <link href="http://server/_layouts/FormResource.aspx?solutionId=ваш_ID_похожий_на_base64&amp;view=0&amp;browser=NetscapeStrict&amp;viewFile=View%2Ecss&amp;version=1" type="text/css" rel="stylesheet" />  
Исходя из формата ссылки можно получить активный view и сделать скролл, если он был изменен.
Скрипт, который необходимо добавить в head страницы FormServer.aspx


<script type="text/javascript" src="/_layouts/jquery-1.6.1.min.js"></script>
<script type="text/javascript">
    function foo()
    {
        $("div, html, body").scrollTop(0); 
        // перебор нескольких тегов сделан для учета обычной формы(скроллится div)
        // и формы без риббона шарика (скроллится html)
    }
    var ViewIndex = "";
    $(document).ready(function() {
        var result = /\&amp\;view=(\d+)\&amp\;/.exec($("head").html());
        if (result != null && result.length > 1)
        {
            if (ViewIndex != result[1])
                setTimeout(foo, 100); 
                // почему-то без таймаута скроллинг не срабатывает
            ViewIndex = result[1];
        }
    });
</script>

Комментариев нет:

Отправить комментарий