Создание представления личного списка программно только с разрешениями «Управление личными представлениями» - PullRequest
0 голосов
/ 21 января 2011

В проекте, над которым я сейчас работаю, мне нужно создать личное представление списка для данного списка (SharePoint 2007). Вот мой код ( currList - SPList ):

System.Collections.Specialized.StringCollection viewFields = currList.Views[BaseViewID].ViewFields.ToStringCollection();
SPView searchView = currList.Views.Add(SearchViewName, viewFields, query, 100, true, false, Microsoft.SharePoint.SPViewCollection.SPViewType.Html, true);

Все работает нормально, когда у пользователя есть разрешение на добавление элементов в список. Создание представления для пользователя, который имеет ВСЕ разрешения на список, кроме добавления элементов, приводит к ошибке «Доступ запрещен». Добавление представления из самого SharePoint работает.

Я нашел такую ​​же проблему здесь: http://us.generation -nt.com / безопасность-эмиссионные, а создающий-личностный ракурс-программно-помощь-86373652.html так что проблема не нова.

// EDIT: Если я создаю персональное представление (добавляя элементы в список и управляю разрешениями для персональных представлений), я могу позже изменить это представление (удалить из него поля представления и т. Д.) Только с разрешением на управление персональными представлениями. Интересно, что если я создал этот персональный уровень ранее, я могу изменить это представление

Ответы [ 2 ]

0 голосов
/ 01 марта 2013

Проблема все еще существует в SharePoint 2010. Добавление представлений с помощью Управление личными представлениями невозможно из кода, но возможно из пользовательского интерфейса.В качестве обходного пути в новом проекте я создал JS-скрипт, который:

  1. загружает Создать представление страницы в невидимый фрейм
  2. заполняет Показать имя поле
  3. устанавливает флажок «Создать персональное представление»
  4. щелчки ОК , кнопка
  5. удаление кадра

I 'Я использую jQuery для этого.Нажатие кнопки вызывает обратную передачу, поэтому ее необходимо обработать:

createPersonalView = function (callback) {
    var url = siteCollectionUrl + '_layouts/ViewNew.aspx?List={' + listId + '}'
        + '&Source=' + window.location.href;

    $someDiv.append('<iframe class="view-creator" style="display:none;"></iframe>');

    $someDiv.find('iframe.view-creator').attr('src', url);
    $someDiv.find('iframe.view-creator').load(function () {
        var $iframe = $(this);
        $iframe.contents().find('#ViewName').attr('value', "My personal view");
        $iframe.contents().find('input#PersonalView0').attr('CHECKED', 'true');

        $iframe.unbind('load');
        $iframe.load(function () {
            $iframe.remove();
            callback(); //it's done! :D
        });

        $iframe.contents().find('#onetidSaveItemtop').click();
    });
};

Достаточно сделать это один раз.Если у вас есть представление, его можно обновить с помощью разрешения Управление личными представлениями .

0 голосов
/ 21 января 2011

Если вы знаете, что добавление представлений из пользовательского интерфейса работает, вы можете попробовать воспроизвести то, что там происходит.

Используя firebug, вы можете видеть, что происходит, в основном страница ViewNew отправляет на этот URL

http://server.local/_vti_bin/owssvr.dll?CS=65001&BaseViewID=1
    &Cmd=NewView&ContentTypeId=0x&IsThereAQuery=FALSE
    &List=%7BE30D413B-B7E9-47EB-9D69-BC1D3A76A3FD%7D&NewViewName=YourNewView
    &Personal=TRUE

Но с гораздо большим количеством параметров.

Если вам действительно нужна эта функция, вы можете попробовать это.

...