在项目中,我目前正在开发,我必须为给定列表创建个人列表视图(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,我可以修改这个视图
答案 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脚本:
我正在使用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();
});
};
这一次就足够了。当您有视图时,可以使用管理个人视图权限进行更新。