如何使用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兼容。