【问题标题】:Update Task Status Progress Project Server 2013更新任务状态进度 Project Server 2013
【发布时间】:2017-08-11 19:37:07
【问题描述】:

我尝试使用项目服务器 2013 CSOM 更新任务状态进度(状态分配),但出现“未知错误”异常和以下 StackTrace:

在 Microsoft.SharePoint.Client.ClientRequest.ProcessResponseStream(流 响应流)在 Microsoft.SharePoint.Client.ClientRequest.ProcessResponse() 在 Limitless.Components.Project2013.ProjectComponent.UpdateTask(ProjectServerConnection 连接、Guid ProjectUID、List`1 数据)

ProjectContext context = GetProjectContext(connection);
// Get the user name  and their assignments
EnterpriseResource self = EnterpriseResource.GetSelf(context);
context.Load(self, r => r.Name, r => r.Assignments
    .IncludeWithDefaultProperties(a => a.Project, a=>a.Comments));
context.ExecuteQuery();
foreach(var item in self.Assignments)
{
    Entities.Task task = data.Where(t => t.ID == item.Id).SingleOrDefault();
    if(task!= null)
    {
        item.PercentComplete = (short)task.PercentComplete;
        item.Comments = "comment";
    }
}

// Update the assignments and submit the status updates.
self.Assignments.Update();
self.Assignments.SubmitAllStatusUpdates("By PS Web App");
context.ExecuteQuery();

我在共享点日志中找不到任何错误。它是全新安装的 Project Server 2013,它成功检索任务(StatusAssignments),但在 self.Assignments.Update();self.Assignments.SubmitAllStatusUpdates("By PS Web App"); 之后,context.ExecuteQuery(); 上会引发异常。

有人遇到过这种情况吗?

【问题讨论】:

    标签: sharepoint sharepoint-2013 csom ms-project-server-2013


    【解决方案1】:

    我希望对于面临同样问题的任何人来说都不算晚,这已经解决并且工作正常,但我不确定这是否是正确的方法。

    我没有通过当前用户上下文更新 TaskAssignment,而是使用提升的上下文(例如管理上下文)获取它,并获取资源的分配并更新它们。

    //private function to get admin context
    ProjectContext elevatedContext = GetProjectElevatedContext(connection);
    //private function to get current user context
    ProjectContext context = GetProjectContext(connection);
    
    // Get the user name  and their assignments
    EnterpriseResource self = EnterpriseResource.GetSelf(context);
    context.Load(self, r => r.Id, r => r.Assignments.IncludeWithDefaultProperties(a => a.ActualFinish));
    context.ExecuteQuery();
    
    var resource = elevatedContext.EnterpriseResources.GetById(self.Id.ToString());
    elevatedContext.Load(resource, r => r.Assignments
        .IncludeWithDefaultProperties(a => a.Project, a => a.Comments, a => a.PercentComplete));
    elevatedContext.ExecuteQuery();
    
    int count = 0;
    
    foreach (var item in resource.Assignments)
    {
        Entities.Task task = data.Where(t => t.ID == item.Id).SingleOrDefault();
        if (task != null)
        {
            item.PercentComplete = (short)task.PercentComplete;
            item.Comments = "comment";
            count++;
        }
    }
    
    resource.Assignments.Update();
    resource.Assignments.SubmitAllStatusUpdates($"comment");
    elevatedContext.ExecuteQuery();
    

    我找不到从 CSOM 授予此类功能的权限。

    如果有人有更好的测试解决方案,请贡献:)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 2017-08-20
    • 2012-02-06
    • 1970-01-01
    • 2014-01-23
    相关资源
    最近更新 更多