如何使用CSOM更新Microsoft Project Server中的多个自定义字段
我正在更新多个自定义字段请求类型和部门,只有最后一个值(部门)正在更新请有人指导我在哪里做错了。以下是我的代码段
I am updating Multiple custom field Request Type and Department, Only last value(Department) is updating Please some one guide me where i am doing mistake. Below is My code snippet
DraftProject projCheckedOut = null;
         试试
          {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;字典<字符串,对象> projDict = new Dictionary< string,object>();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; MsOnlineClaimsHelper claimHelper = new MsOnlineClaimsHelper(PWAUrl,UserName,Password);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; using(ProjectContext projContext = new ProjectContext(PWAUrl))
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; projContext.ExecutingWebRequest + = claimsHelper.clientContext_ExecutingWebRequest;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; var PrjList = projContext.LoadQuery(projContext.Projects.Where(proj => proj.Id == ProjectId));
$
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; projContext.ExecuteQuery();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; Guid pGuid = PrjList.First()。Id;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; PublishedProject proj2Edit = PrjList.First();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; projCheckedOut = proj2Edit.CheckOut()。IncludeCustomFields;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; projContext.Load(projCheckedOut);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; projContext.ExecuteQuery();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; var cflist = projContext.LoadQuery(projContext.CustomFields.Where(cf => cf.Name ==" Request Type"));
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; projContext.ExecuteQuery();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; projCheckedOut.SetCustomFieldValue(cflist.FirstOrDefault()。InternalName,new [] {" Entry_6a51155570f5e51180d000155dd43708"});
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; cflist = projContext.LoadQuery(projContext.CustomFields.Where(cf => cf.Name ==" Department"));
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; projContext.ExecuteQuery();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; projCheckedOut.SetCustomFieldValue(cflist.FirstOrDefault()。InternalName,new [] {" Entry_0a3970a471f5e51180cc00155dd45b0a"});
$
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; QueueJob qJob = projCheckedOut.Publish(true);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; JobState jobState = projContext.WaitForQueue(qJob,70);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; catch(例外情况)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
$
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }
DraftProject projCheckedOut = null;
try
{
Dictionary<string, object> projDict = new Dictionary<string, object>();
MsOnlineClaimsHelper claimsHelper = new MsOnlineClaimsHelper(PWAUrl, UserName, Password);
using (ProjectContext projContext = new ProjectContext(PWAUrl))
{
projContext.ExecutingWebRequest += claimsHelper.clientContext_ExecutingWebRequest;
var PrjList = projContext.LoadQuery(projContext.Projects.Where(proj => proj.Id == ProjectId));
projContext.ExecuteQuery();
Guid pGuid = PrjList.First().Id;
PublishedProject proj2Edit = PrjList.First();
projCheckedOut = proj2Edit.CheckOut().IncludeCustomFields;
projContext.Load(projCheckedOut);
projContext.ExecuteQuery();
var cflist = projContext.LoadQuery(projContext.CustomFields.Where(cf => cf.Name == "Request Type"));
projContext.ExecuteQuery();
projCheckedOut.SetCustomFieldValue(cflist.FirstOrDefault().InternalName, new[] { "Entry_6a51155570f5e51180d000155dd43708" });
cflist = projContext.LoadQuery(projContext.CustomFields.Where(cf => cf.Name == "Department"));
projContext.ExecuteQuery();
projCheckedOut.SetCustomFieldValue(cflist.FirstOrDefault().InternalName, new[] { "Entry_0a3970a471f5e51180cc00155dd45b0a" });
QueueJob qJob = projCheckedOut.Publish(true);
JobState jobState = projContext.WaitForQueue(qJob, 70);
}
}
catch (Exception ex)
{
}
如果您评论更新"部门"的代码,会发生什么?您是否能够更新第一个自定义字段?我有一个类似的问题,第一个自定义字段没有更新。
同样清理你的代码。
这里有两篇文章可以帮到你:
What happens if you comment the code where you update "Department"? Are you able to update the first custom field then? I am having a similar problem where the first custom field is not being updated.
Also clean up your code a bit.
Here are two articles that may help you:
- http://www.jonashendrickx.com/2016/04/11/update -customfield基于-ON-LookupTable中值/
- http://www.jonashendrickx.com/2016/03/31/authenticating-with-csom-in-project-server-part-2/
我创建它以使我的代码与Project Server Online和Project Server On-Premises兼容。