2016-06-24 13 views
0

Für ein paar Tage versuche ich, den Aufgabenfortschritt für eine bestimmte Aufgabe für ein bestimmtes Datum zu schreiben. Zum Beispiel: Ich kann den Gesamtfortschritt der Aufgabe festlegen, aber nicht die tatsächliche Arbeit, die die Ressource zu einem bestimmten Datum geleistet hat. Wir können das mit Project Pro in der Ansicht "Task Usage" tun, aber wir müssen einige Aktionen basierend auf einer Datei automatisieren, die von einem anderen System generiert wird. Deshalb arbeite ich in dieser Lösung, aber ich konnte kein Objekt finden, das dies erlauben würde Ich möchte den tatsächlichen Arbeitswert für ein Datum speichern. Ich verwende die CSOM-Bibliothek und Project Online.Hinzufügen von Ressourcenzuweisungen nach Tag

Dieses Problem macht mich verrückt! Jede Hilfe wäre sehr willkommen. Danke im Voraus!

EDIT:

Falls ich nicht klar genug war, muss ich im Grunde erhalten und Daten aus den Ressourcenzuweisungen TAG gesetzt, wie wir und setzen durch die TASK USAGE Bildschirm auf Projekt PRO anzeigen können , aber ich muss es mit CSOM und Project Online tun. Hier ist die Ansicht, ich spreche: Project Pro Task Usage view

Antwort

0

Am Ende haben wir einen Weg, um herauszufinden geschaffen ... Hier ist, wie wir es getan haben:

private void SaveAssignmentData(Guid id, DateTime start, DateTime finish, Config config) 
    { 

     //start = DateTime.Today.AddHours(8); 
     //finish = start.AddHours(10); //from 8am to 6pm 

     var ctx = new Connection().ProjectOnline(config.SpOnlineSite, config.SpOnlineUsuario, config.SpOnlineSenha); //simple method to get the current context 

     var resources = ctx.EnterpriseResources; 
     ctx.Load(resources); 
     ctx.ExecuteQuery(); 
     var resource = ctx.EnterpriseResources.FirstOrDefault(i => i.Email == "[email protected]"); 
     if (resource == null) throw new Exception("Resource not found."); 
     ctx.Load(resource, p => p.Assignments); 
     ctx.ExecuteQuery(); 

     var timePhase = resource.Assignments.GetTimePhase(start, finish); 
     ctx.Load(timePhase, p => p.Assignments); 
     ctx.ExecuteQuery(); 

     var statusAssignment = timePhase.Assignments.FirstOrDefault(i => i.Id == id); 
     if (statusAssignment != null) 
     { 
      statusAssignment.ActualWork = "6h"; 
      statusAssignment.SubmitStatusUpdates("through csom"); 
      ctx.ExecuteQuery(); 
     } 
    }