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

相關問題