从Provider Hosted AddIn启动SharePoint 2010工作流

时间:2017-04-28 03:05:00

标签: sharepoint-2013 workflow permission-denied

我到处搜索,我仍然无法解决问题。场景: 我有一个列表,我将创建必须匿名的项目。因此,我们使用托管SharePoint addIn的提供程序来使用AppOnly权限创建列表项。创建列表项后,必须运行SharePoint 2010工作流。原因是它将通过电子邮件发送外部电子邮件地址。不幸的是,当AddIn创建列表项时,因为它是由应用程序而不是用户创建的,所以工作流不会自动触发。所以我想,简单!我只是将代码添加到AddIn,这会在创建项目后触发工作流程。 好吧,这就是问题的起点。当我尝试启动2010工作流时,我收到了Permission Denied错误。所以我认为一个简单的解决方案是创建一个2013工作流程,赋予它App权限并让它在App Step中启动2010工作流程。我可以启动2013工作流程,但它在尝试使用权限拒绝错误启动2010工作流时停止。 所以我被卡住了!以下是应该启动2010工作流程的代码:

public static void Start2010Workflow(ClientContext clientContext, string listName, int itemId, string workflowName, Dictionary<string, object> wfParams)
{
    var web = clientContext.Web;
    var workflowServicesManager = new WorkflowServicesManager(clientContext, web);
    var workflowInteropService = workflowServicesManager.GetWorkflowInteropService();
    clientContext.Load(web);
    clientContext.Load(workflowInteropService);
    clientContext.ExecuteQuery();       
    List sharePointList = web.Lists.GetByTitle(listName);
    ListItem sharePointListItem = sharePointList.GetItemById(itemId);
    clientContext.Load(sharePointList);
    clientContext.Load(sharePointListItem);
    clientContext.ExecuteQuery();

    Guid itemGuid = Guid.Empty;
    if (sharePointListItem.FieldValues.ContainsKey("GUID"))
    {
        object temp = sharePointListItem.FieldValues["GUID"];
        if (temp != null)
            itemGuid = (Guid)temp;
    }
    var wfServManager = new WorkflowServicesManager(clientContext, clientContext.Web);
    var wfInteropService = wfServManager.GetWorkflowInteropService();
    clientContext.Load(wfInteropService);
    clientContext.ExecuteQuery();
    //Start the Workflow
    ClientResult<Guid> resultGuid = wfInteropService.StartWorkflow(workflowName, new Guid(), sharePointList.Id, itemGuid, wfParams);

    clientContext.ExecuteQuery();
}

一旦运行了最后一个ExecuteQuery,我得到一个: Microsoft.SharePoint.Client.ServerUnauthorizedAccessException:&#39;访问被拒绝。您无权执行此操作或访问此资源。&#39;

我尝试了多种方法。我能够列出工作流程,但我无法启动它们。我在启动SharePoint 2013工作流程时没有任何问题。

我还尝试使用以下代码将凭据设置为我自己:

SecureString password = new SecureString();
foreach (char c in "MyP@5sW0rD89@12".ToCharArray()) password.AppendChar(c);
Context.Credentials = new SharePointOnlineCredentials("user1@contoso.onmicrosoft.com", password);

没有成功。

有没有人真的设法让这个工作?或者可能提供另一种解决方法??

谢谢!

0 个答案:

没有答案