Я пытаюсь установить значение настраиваемого поля уровня задачи с помощью CSOM, и я столкнулся с проблемой, когда нет существующего значения и, следовательно, нет настраиваемого объекта поля.Настройка пользовательских полей уровня задачи проекта 2013 2013
Я создал три пользовательских поля задачи, выбрав «Настройки сервера» -> «Пользовательские поля и таблицы поиска».
Если я добавляю значения в пользовательские поля при редактировании проекта в браузере, для этих задач существуют настраиваемые объекты полей; все с тем же идентификатором, что и оригинальные, которые я создал, и я могу их модифицировать с помощью кода.
Если я попытаюсь установить значение поля в коде для задачи в первый раз, это не сработает, и я получаю «неизвестную ошибку» (подробнее см. Ниже).
В моем коде я пытаюсь обновить эти поля для задач, как, например:
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;
}
Я называю этот метод из другого в следующем блоке:
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();
}
На самой первой задачи , он вызывает метод UpdateTaskCustomFields без каких-либо ошибок, но во второй задаче при вызове projectContext.executeQuery() возникает следующая ошибка:
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:
Я подумал, что, возможно, мне также нужно было добавить пользовательское поле непосредственно к задаче, но это дало мне ошибку в отношении уже существующего/зарезервированного поля.
Я предполагаю, что либо весь мой процесс является неправильным, либо мне нужно создать экземпляр настраиваемого поля для задачи каким-то образом или что-то подобное, но я не знаю, что делать.
Любая помощь будет оценена по достоинству.
Спасибо!
Wg