如何使用CSOM更新Microsoft Project Server中的多个自定义字段 [英] How do update multiple custom field in Microsoft Project Server using CSOM

查看:104
本文介绍了如何使用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兼容。


这篇关于如何使用CSOM更新Microsoft Project Server中的多个自定义字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆