1

我是sharepoint的新手,所以如果我做错了什么,请纠正我。

我有一个可以预约的文档库(文档、客户信息,例如姓名、电话等)。然后,我创建了一个网站页面和 Web 部件,它从客户那里获取这些信息并将其发送到文档库。当我填写该表格并保存它时,列表非常好地接受参数。之后,我为该库创建了一个批准共享点工作流,以批准某些用户的文档。问题从这里开始:当我手动将项目添加到文档列表时(通过按添加项目)工作流列项目(工作流名称)会自动生成并且运行良好。但是当我尝试按代码添加时,工作流项目不会生成。

       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;
                        }

                    }
                }
            }
        });

    }
4

1 回答 1

0

SharePoint 中的工作流不能由系统帐户触发,这可能是您在“创建者”中的用户名。当您手动创建列表项(使用添加项目)时,您使用您的用户帐户创建了该项目。

最简单和最安全的做法是删除 RunWithElevatedPermissions,但只有有权在目标列表中创建条目的用户才能使用您的页面。

如果您的要求要求其他用户也必须使用您的页面,则您必须使用模拟。

您所做的是使用来自有权在列表中创建项目的非系统用户的凭据SPUserToken 。

这篇博客文章有一个关于如何使用 SPUserToken 的示例。

You could also log in as a different windows user, but I don't think that should be necessary since you're running in a site page.

Extreme SharePoint also has a good overview of elevation/impersonation in SharePoint you may want to look at.

于 2013-01-12T14:18:22.910 回答