0

您好,我想编辑Project Server 2010的自定义字段,但我不知道我在哪里做错了。以下是代码,

好心帮我在这方面如何实时编辑Project Server 2010的自定义字段

ProjectSoapClient projectSvc = new ProjectSoapClient(); 
      CustomFieldsSoapClient customfieldSvc = new CustomFieldsSoapClient(); 
      CustomFieldDataSet fieldDefs = customfieldSvc.ReadCustomFields(string.Empty, false); 

Guid projectId = new Guid(projGuid); 
      ProjectDataSet projectDs = projectSvc.ReadProject(projectId, ListProjects.Project.DataStoreEnum.WorkingStore); 

     foreach (ProjectDataSet.ProjectCustomFieldsRow cfRow in projectDs.ProjectCustomFields.Rows) 
     { 
      CustomFieldDataSet.CustomFieldsRow fieldDefinition = fieldDefs.CustomFields.Single(
        cfd => cfd.MD_PROP_UID == cfRow.MD_PROP_UID); 

      //if (cfRow.FIELD_TYPE_ENUM == 21 || cfRow.FIELD_TYPE_ENUM == 15) //if it is a choice field 
      //{ 
       if (fieldDefinition.MD_PROP_NAME == "ProductCategory") 
       { 
        cfRow.TEXT_VALUE = newValue; 
       } 
      //} 
     } 
     Guid sessionUid = Guid.NewGuid(); 
     Guid jobUid = Guid.NewGuid(); 
     if (!IsProjectCheckedOut(projectId)) 
     { 
      projectSvc.CheckOutProject(projectId, sessionUid, "Updating CF"); 
      jobUid = Guid.NewGuid(); 
      projectSvc.QueueUpdateProject(jobUid, sessionUid, projectDs, false); 
     } 
     jobUid = Guid.NewGuid(); 
     projectSvc.QueuePublish(jobUid, projectId, true, SPContext.Current.Site.Url); 
     projectSvc.QueueCheckInProject(jobUid, projectId, true, sessionUid, "Updating CF"); 
+0

有几个潜在的问题:如果签出项目 - 你不叫更新,您的projectDs可能是1000行以上的模式,更新将会失败,等等。你能分享到底“究竟会出错”吗?一些错误消息,至少 – melan 2013-04-11 04:39:02

+0

我很感谢你的回应。 我正在做的是将网格中的所有项目及其字段值(自定义和默认值)作为SharePoint页面上的Web部件提取。 抓取部分运行绝对好,但当我编辑上述代码运行良好,我调试它的每一个声明,没有错误或例外,但更新后它并没有改变项目服务器上的值:( 我我不明白我在做什么错误:(任何想法? – user1901417 2013-04-11 07:34:28

回答

0

也许是因为你第一次发布该项目是。它也只适用于QueueCheckInProject函数。

另一个原因可能是,您正在使用迭代搜索的行尚不可用,您必须先将它添加到您的项目数据集中!

而且您应该执行等待完成结帐,更新和签入!

检查出更多的细节我的博客文章: http://www.geeklife.ch/dev/update-project-server-2010-customfields-over-psi/

还是我在这个线程的答案: Setting custom fields using the PSI - Microsoft Project Server

相关问题