簡體   English   中英

更新任務狀態進度Project Server 2013

[英]Update Task Status Progress Project Server 2013

我嘗試使用項目服務器2013 CSOM更新任務狀態進度(狀態分配),但出現“未知錯誤”異常和以下StackTrace:

在Microsoft.SharePoint.Client.ClientRequest.ProcessResponseStream(流ResponseStream)在Microsoft.SharePoint.Client.ClientRequest.ProcessResponse()在Limitless.Components.Project2013.ProjectComponent.UpdateTask(ProjectServerConnection連接,Guid ProjectUID,列出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,它會成功檢索Tasks(StatusAssignments),但在self.Assignments.Update(); self.Assignments.SubmitAllStatusUpdates("By PS Web App"); 異常引發context.ExecuteQuery();

有人遇到這種情況嗎?

我希望對於遇到相同問題的任何人都不會太遲,這已經解決並且可以正常工作,但是我不確定這是否是正確的方法。

我不是使用當前用戶上下文來更新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授予的此類功能的許可。

如果有人有更好的測試解決方案,請貢獻:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM