none
Использование модальных диалоговых окон SharePoint на html странице RRS feed

  • Вопрос

  • Добрый день!

    На SharePoint Server 2010 есть сайт, на котором программно генерируются отчеты в виде html страниц. На этих страницах строятся таблицы с названиями документов и их атрибутами. Данные берутся из списков на этом же сайте. Заказчик потребовал, чтобы названия документов отображались в виде ссылок на DispForm соответствующих элементов списков. Эта задача была решена путем замены названий документов тегами типа:

    <a href="http://SiteName/Lists/ListName/DispForm.aspx?IsDlg=1&ID=n">Название документа</a>

    Но такая ссылка открывает DispForm в обычном, а не модальном окне, и при нажатии кнопки "Закрыть" пользователь оказывается на странице соответствующего списка, а не на странице отчета, что очень неудобно.

    Для открытия DispForm в модальном окне со страницы html, был использован следующий код:

    <script type="text/javascript" src="/_layouts/1049/init.js"></script>
    <script type="text/javascript" src="/_layouts/MicrosoftAjax.js"></script>
    <script type="text/javascript" src="/_layouts/sp.core.js"></script>
    <script type="text/javascript" src="/_layouts/sp.js"></script>
    <script type="text/javascript" src="/_layouts/ScriptResx.ashx?name=sp.res.ru-ru&culture=ru-RU"></script>
    <script type="text/javascript" src="/_layouts/SP.UI.Dialog.js"></script>
    <script type="text/javascript">
    function openDispForm(link) {
        SP.UI.ModalDialog.showModalDialog({url: link});
    }
    </script>
    

    А тег ссылки естественно был приведен к виду:

    <a href='javascript:openDispForm("http://SiteName/Lists/ListName/DispForm.aspx?IsDlg=1&ID=n")'>Название документа</a>

    После этого html страница загружается без ошибок, но при клике по ссылке возникает ошибка:

    'SP.Res.defaultDialogWidth' - есть null или не является объектом. SP.UI.Dialog.js строка 2 символ 1262.

    Похоже SP.UI.Dialog.js не видит файл ресурсов sp.res.ru-ru.resx, хотя связывание этих файлов должно осуществляться обработчиком ScriptResx.ashx (5-я строка кода).

    Может кто подскажет, в чем причина, или другой путь решения?

    18 февраля 2016 г. 12:34

Ответы

  • После передачи данных "вручную" из файла ресурсов sp.res.ru-ru.resx в скрипт SP.UI.Dialog.js, все ошибки исчезли. DispForm открывается на вызывающей её html странице, но не в модальном режиме и с "артефактами" в виде кнопок и полей над и под формой. При нажатии кнопки "Закрыть", DispForm исчезает, но вместо неё на странице остаётся пустое пространство. EditFopm, вызванная из DispForm тоже открывается в нормальном режиме под DispForm. В общем проблем не убавилось. А по сему было решено передавать html код отчета на пустую страницу приложения SharePoint, используя механизм Session. Доработка модуля заняла несколько часов, но зато разом исчезли все проблемы с модальными окнами. В общем в практическом плане вопрос снимается, хотя в плане исследования шарика он представляет определённый интерес.

    29 февраля 2016 г. 6:45

Все ответы

  • Здравствуйте! Вот точно не уверен, но думаю, что схожий случай - http://stackoverflow.com/questions/6272753/sharepoint-2010-javascript-error-when-creating-modal-dialog

    что то не успевает под грузиться. Попробуйте  поэксперементировать в этом направлении:

    ExecuteOrDelayUntilScriptLoaded(function () {
      // do modal dialog stuff in here (or in another function called from here, etc.)
    }, "sp.js")

    18 февраля 2016 г. 16:43
  • Спасибо Дмитрий, но эксперименты с ExecuteOrDelayUntilScriptLoaded не дали результата. Этого и следовало ожидать, так как ошибка возникает не при загрузке страницы, а при клике на ссылку, когда всё уже загружено (специально делал паузу). Похоже причина в хандле ScriptResx.ashx. Судя по его коду

    <%@ WebHandler Language="C#" Class="Microsoft.SharePoint.ApplicationPages.ScriptResxHandler,Microsoft.SharePoint.ApplicationPages,Version=14.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %>

    он очевидно не работает на html странице. Попробую скормить скрипту данные из sp.res.ru-ru.resx вручную. Если удастся - сообщу.

    19 февраля 2016 г. 9:08
  • После передачи данных "вручную" из файла ресурсов sp.res.ru-ru.resx в скрипт SP.UI.Dialog.js, все ошибки исчезли. DispForm открывается на вызывающей её html странице, но не в модальном режиме и с "артефактами" в виде кнопок и полей над и под формой. При нажатии кнопки "Закрыть", DispForm исчезает, но вместо неё на странице остаётся пустое пространство. EditFopm, вызванная из DispForm тоже открывается в нормальном режиме под DispForm. В общем проблем не убавилось. А по сему было решено передавать html код отчета на пустую страницу приложения SharePoint, используя механизм Session. Доработка модуля заняла несколько часов, но зато разом исчезли все проблемы с модальными окнами. В общем в практическом плане вопрос снимается, хотя в плане исследования шарика он представляет определённый интерес.

    29 февраля 2016 г. 6:45