仅使用“管理个人视图”权限以编程方式创建个人列表视图

时间:2011-01-21 10:56:12

标签: c# .net sharepoint sharepoint-2010 sharepoint-2007

在项目中,我目前正在开发,我必须为给定列表创建个人列表视图(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/security-issue-while-creating-personal-view-programmatically-help-86373652.html 所以这个问题并不新鲜。

//编辑: 如果我创建个人视图(添加项目以列出并管理个人视图权限),我稍后可以修改此视图(从中删除视图字段等),仅管理个人视图permnission。 有趣的是,我之前已经创建了这个个人的vier,我可以修改这个视图

2 个答案:

答案 0 :(得分:0)

如果您知道从UI中添加视图,则可以尝试复制那里发生的事情。

使用firebug,你可以看到发生了什么,基本上ViewNew页面提交给了这个网址

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

但是有更多的参数。

如果你真的需要这个功能,你可以试试。

答案 1 :(得分:0)

SharePoint 2010中仍存在问题。无法通过代码添加使用管理个人视图的视图,但可以从UI进行。作为新项目的解决方法,我创建了JS脚本:

  1. 创建视图页面加载到隐藏框架
  2. 填写查看姓名字段
  3. 选择“创建个人视图”复选框
  4. 点击确定按钮
  5. 删除框架
  6. 我正在使用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();
        });
    };
    

    这一次就足够了。当您有视图时,可以使用管理个人视图权限进行更新。