Краткое описание поведения по умолчанию, которое я хочу переопределить: Создание списка SharePoint и использование «Заголовка (связанного с элементом)» в представлении обеспечивает ссылку на DispForm для этого списка. По умолчанию эта ссылка добавляет параметр Source к строке запроса URL.

Я хотел бы каким-то образом отключить это поведение, сохранив при этом веб-часть представления списка по умолчанию, созданную SharePoint при определении представления.

Чтобы было ясно, я знаю, как преобразовать веб-часть представления списка в XSLT, а затем управлять этим поведением. Если это вообще возможно, я бы не хотел этого делать, чтобы представление списка по-прежнему могло легко поддерживаться службой поддержки, а также сохраняло преимущества стандартного представления списка (например, экспорт в Excel и т. д.).

Любые идеи? Заранее спасибо за помощь. Троя

0
Troy Carroll 8 Апр 2011 в 19:30
Вы против использования решения Javascript/jQuery?
 – 
CBono
9 Апр 2011 в 01:28
Нисколько. Предпочитаю Javascript, но открыт для любого из них.
 – 
Troy Carroll
10 Апр 2011 в 01:16
В зависимости от того, как SharePoint добавляет параметр, я предложил другое решение. Он по-прежнему использует Javascript, но не так, как я предполагал. Надеюсь, вы найдете ее полезной.
 – 
CBono
11 Апр 2011 в 18:07

1 ответ

SharePoint (2007) динамически добавляет параметр source в метод javascript с именем GoToLink. Этот метод определен в файле core.js SharePoint, и его можно легко настроить без редактирования исходного файла. Фактически, вы никогда не захотите редактировать этот файл напрямую; он переведет SharePoint в состояние «не поддерживается».

Мы создадим решение для нашей настройки, чтобы его можно было легко развернуть или отозвать согласованным образом. Создайте новое пустое решение SharePoint в Visual Studio, предназначенное для развертывания GAC. В вашем проекте создайте следующую структуру папок:

  • Шаблоны
    • Макеты <ул>
    • 1033

(«1033» для английской локализации; если вы используете другой язык, ваш идентификатор будет другим).

В «1033» создайте новый файл Javascript (мы называем наш «CustomCore.js»). Он будет содержать ТОЛЬКО тот код, который мы хотим переопределить из Core.js. Поскольку GoToLink — это единственное, что нас интересует, давайте сосредоточимся на нем. Вот оригинал из Core.js:

function GoToLink(elm) {
    if (elm.href==null)
      return;
    var ch=elm.href.indexOf("?") >=0 ? "&" : "?";
    var srcUrl=GetSource();
    if (srcUrl !=null && srcUrl !="")
      srcUrl=ch+"Source="+srcUrl;
    var targetUrl=elm.href+srcUrl;
    if (isPortalTemplatePage(targetUrl))
      window.top.location=STSPageUrlValidation(targetUrl);
    else
      window.location=STSPageUrlValidation(targetUrl);
}

Не так уж много. Для нашего переопределения нам просто нужно опустить биты, которые добавляют параметр source. По моим расчетам, модифицированный метод выглядит так:

function GoToLink(elm) {
    if (elm.href==null)
        return;
    if (isPortalTemplatePage(elm.href))
        window.top.location=STSPageUrlValidation(elm.href);
    else
        window.location=STSPageUrlValidation(elm.href);
}

Это должно быть так. Упакуйте решение, и Visual Studio должна правильно интерпретировать структуру папки «Шаблоны» при создании WSP (посмотрите в сгенерированном файле манифеста элемент TemplateFile и его развертывание в «Layouts\1033\CustomCore.js» ).

После того как ваше решение WSP будет развернуто в SharePoint, у нас есть последний шаг — ссылка на него на главной странице. В разделе HEAD главной страницы вы должны увидеть ссылку на Core.js следующим образом:

<SharePoint:ScriptLink Language="javascript" runat="server" Defer="True" Name="core.js"/>

Мы просто добавляем ссылку на новый JS-файл прямо под этой строкой:

<SharePoint:ScriptLink Language="javascript" runat="server" Defer="True" Name="core.js"/>
<SharePoint:ScriptLink Language="javascript" runat="server" Defer="True" Name="customcore.js"/>

Протестируйте его и убедитесь, что он работает. Обратите внимание, что это повлияет на ВСЕ списки на сервере, на котором вы развернули «CustomCore.js» и которые используют главную страницу.

1
CBono 11 Апр 2011 в 18:02
Фантастическая информация. Спасибо! Влиять на ссылки на всех сайтах для меня не вариант, но эта информация определенно является шагом в правильном направлении. Мы используем настраиваемую главную страницу, и если эта проблема станет достаточно серьезной, я мог бы создать вторую главную страницу только для этой проблемы. Я буду продолжать играть с этим и посмотреть, где я могу получить. Еще раз спасибо.
 – 
Troy Carroll
12 Апр 2011 в 18:02