我是分享点的新手,所以如果我做错了,请纠正我。
我有一个文件库,需要预约(文件,客户的信息,如姓名,电话等)。然后我创建了一个网站页面和Web部件,从客户那里获取这些信息并将其发送到文档库。当我填写该表单并保存它时,list会很好地获取参数。之后,我为该库创建了一个批准sharepoint工作流,以便某些用户批准文档。问题从这里开始:当我手动将项目添加到文档列表时(通过按添加项目),工作流程列项目(工作流程名称)会自动生成并且运行良好。但是,当我尝试通过代码添加工作流时,项目不会生成。
public static void InsertIntoDocumentToLib( string name, int age,string path,SPContext context)
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (var site = new SPSite(context.Site.ID))
{
using (var siteCollection = new SPSite(context.Site.Url)) // site.RootWeb
{
using (var currentWeb = siteCollection.OpenWeb(context.Web.ID))
{
SPList spList = currentWeb.Lists.TryGetList(DOCUMENT_LIB_NAME);
if (spList != null)
{
currentWeb.AllowUnsafeUpdates = true;
SPFolder myLibrary = currentWeb.Folders[DOCUMENT_LIB_NAME];
bool replaceExistingFiles = true;
string fileName = System.IO.Path.GetFileName(path);
FileStream fileStream = File.OpenRead(path);
SPFile spfile = myLibrary.Files.Add(fileName, fileStream, replaceExistingFiles);
spfile.Item[NAME_COLUMN] = name;
spfile.Item[AGE_COLUMN] = age;
spfile.Item.Update();
myLibrary.Update();
currentWeb.AllowUnsafeUpdates = false;
}
}
}
}
});
}
答案 0 :(得分:0)
系统帐户无法触发SharePoint中的工作流,这可能是您“创建者”中的用户名。当您手动创建列表项时(使用添加项),您使用您的用户帐户创建了该项目。
最简单,最安全的做法是删除RunWithElevatedPermissions,但只有拥有在目标列表中创建条目权限的用户才能使用您的页面。
如果您的要求说其他用户也必须使用您的网页,则必须使用模拟。
您所做的是使用具有在列表中创建项目的权限的非系统用户的凭据SPUserToken。
This blog article有一个关于如何使用SPUserToken的示例。
您也可以以其他Windows用户身份登录,但我不认为这是必要的,因为您在网站页面中运行。
Extreme SharePoint还可以很好地概述您可能希望查看的SharePoint中的提升/模拟。