Quantcast
Channel: Project Customization and Programming forum
Viewing all articles
Browse latest Browse all 5347

Setting project server 2013 task level custom fields

$
0
0

Greetings Programs!

I cross posted this at StackOverflow but I'm hoping there is a guru here that can help...

I am trying to set the value of a task level custom field using CMOS and I am running into a problem when there is no existing value and therefore no custom field object.

I have created three Task entity custom fields by going to Server Settings -> Enterprise Custom Fields and Lookup Tables.

If I add values to the custom fields when editing the project in the browser, the custom field objects exist for those tasks; all with the same id as the original ones I created and I can modify them through code.

If I try to set a custom field value in code for a task for the first time, it does not work and I get an "unknown error" (more below).

In my code I am trying to update these fields for the tasks as such:

private static DraftTask UpdateTaskCustomFields(DraftTask task, string taskDescription, string resourceId, double estRunHours, double actRunHours)
{
    if (task == null) return null;

    projectContext.Load(task.CustomFields);
    projectContext.ExecuteQuery();

    task["Custom_0000740fd5a8e41180e0005056823bd3"] = taskDescription;
    task["Custom_85e91d7fd5a8e41180e0005056823bd3"] = estRunHours;
    task["Custom_a178dc8bd5a8e41180e0005056823bd3"] = actRunHours;

    task.CustomFields.Update();

    return task;
}

I call this method from another in the following block:

foreach (DataRow parentTask in parentTasks.Tables[0].Rows)
{
    var parentTaskName = "";
    var taskName = string.Format("{0}.{1}", parentTask["LOT_ID"], parentTask["SPLIT_ID"]);

    var taskDescription = parentTask["WO_DESCRIPTION"].ToString();
    var estRunHours = Convert.ToDouble(parentTask["RUN_HRS"]);
    var actRunHours = Convert.ToDouble(parentTask["ACT_RUN_HRS"]);
    var resourceId = "";

    var task = GetTask(tasks, taskName);

    if (task != null)
    {
        UpdateTaskCustomFields(task, taskDescription, resourceId, estRunHours, actRunHours);

        itemCount += 3;
    }

    if (itemCount++ < batch) continue;

    itemCount = 0;

    if (!UpdateDraft(projectDraft)) ExitApp();
}

On the very first task, it calls the UpdateTaskCustomFields method without any errors but on the second task, the following error is thrown on the projectContext.ExecuteQuery() call:

Microsoft.SharePoint.Client.ServerException was unhandled
HResult=-2146233088
Message=Unknown Error
Source=Microsoft.SharePoint.Client.Runtime
ServerErrorCode=-1
ServerErrorTraceCorrelationId=b58ee69c-a7fb-40f8-19b2-171646b3a6c8
ServerErrorTypeName=Microsoft.SharePoint.Client.UnknownError
ServerStackTrace=""
StackTrace:
   at Microsoft.SharePoint.Client.ClientRequest.ProcessResponseStream(Stream responseStream)
   at Microsoft.SharePoint.Client.ClientRequest.ProcessResponse()
   at Microsoft.SharePoint.Client.ClientRequest.ExecuteQueryToServer(ChunkStringBuilder sb)
   at Microsoft.SharePoint.Client.ClientRequest.ExecuteQuery()
   at Microsoft.SharePoint.Client.ClientRuntimeContext.ExecuteQuery()
   at Microsoft.SharePoint.Client.ClientContext.ExecuteQuery()
   at QueueCreateProject.Program.UpdateTaskCustomFields(DraftTask task, String taskDescription, String resourceId, Double estRunHours, Double actRunHours) in c:\Projects\ProjectServerApp\ProjectServerApp\Program.cs:line 617
   at QueueCreateProject.Program.ImportTasksFromVisual() in c:\Projects\ProjectServerApp\ProjectServerApp\Program.cs:line 208
   at QueueCreateProject.Program.Main(String[] args) in c:\Projects\ProjectServerApp\ProjectServerApp\Program.cs:line 41
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()
InnerException:

I thought maybe I also needed to add the custom field directly to the task first but that gave me an error about the field already existing/reserved.

I am assuming that either my whole process is wrong or I need to instantiate the custom field for the task in some manner or something similar but I have no clue as to what to do.

Any help would be appreciated.

Thanks!

Wg



Viewing all articles
Browse latest Browse all 5347

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>