2012-11-27 75 views
0

目前我正在開發的MS項目2010年資源MSProject外接程序:服務器相關的資源添加到項目的本地版本

在此的AddIn一個插件的用戶過濾器上存儲爲MS項目資源的所有員工Project Server通過幾個標準。找到匹配的人力資源後,用戶應該能夠將此資源添加到選定的任務。

不幸的是我沒有

_activeProject.Resources.Add("ResourceName") 

找到本地添加資源之間的聯繫和資源存儲在服務器上。 Project中顯示的「ResourceName」與服務器上的「ResourceName」沒有連接。

我試圖從服務器通過PSI莫名其妙地加載Microsoft.Office.Interop.MSProject.Resource並通過將其添加到項目團隊:

Dim projectTeamRow As SvcProject.ProjectTeamDataSet.ProjectTeamRow = projectTeamDs.ProjectTeam.NewProjectTeamRow() 
    projectTeamRow.PROJ_UID = projectGuid 
    projectTeamRow.RES_UID = resGuid 
    projectTeamRow.NEW_RES_UID = resGuid 
    projectTeamDs.ProjectTeam.AddProjectTeamRow(projectTeamRow) 

但是,這不是我真正想要的東西。我只需要將一個服務器相關資源添加到本地版本的項目中。換句話說:我正在尋找一種方法將SvcProject.ProjectTeamDataSet.ProjectTeamRow轉換爲Microsoft.Office.Interop.MSProject.Resource

我真的希望有人能幫助我,因爲我所有的研究都失敗了。

回答

1

從Project服務器添加資源到您的項目,你需要知道的資源(不GUID)的ID。此信息存儲在RES_ID列中。只需從服務器獲取資源並獲取ID即可。

如果您打算添加幾個資源 - 我會建議在本地緩存的資源列表。我使用這個查詢來組織我的附加內多個詞典:

ResourceDataSet resourceDs = new ResourceDataSet(); 

PSLibrary.Filter resourceFilter = new Microsoft.Office.Project.Server.Library.Filter(); 
resourceFilter.FilterTableName = resourceDs.Resources.TableName; 

resourceFilter.Fields.Add(new PSLibrary.Filter.Field(resourceDs.Resources.TableName, resourceDs.Resources.RES_IDColumn.ColumnName, PSLibrary.Filter.SortOrderTypeEnum.None)); 
resourceFilter.Fields.Add(new PSLibrary.Filter.Field(resourceDs.Resources.TableName, resourceDs.Resources.RES_UIDColumn.ColumnName, PSLibrary.Filter.SortOrderTypeEnum.None)); 
resourceFilter.Fields.Add(new PSLibrary.Filter.Field(resourceDs.Resources.TableName, resourceDs.Resources.RES_NAMEColumn.ColumnName, PSLibrary.Filter.SortOrderTypeEnum.None)); 
resourceFilter.Fields.Add(new PSLibrary.Filter.Field(resourceDs.Resources.TableName, resourceDs.Resources.RES_TYPEColumn.ColumnName, PSLibrary.Filter.SortOrderTypeEnum.None)); 
resourceFilter.Fields.Add(new PSLibrary.Filter.Field(resourceDs.Resources.TableName, resourceDs.Resources.RES_INITIALSColumn.ColumnName, PSLibrary.Filter.SortOrderTypeEnum.None)); 
resourceFilter.Fields.Add(new PSLibrary.Filter.Field(resourceDs.Resources.TableName, resourceDs.Resources.RES_EXTERNAL_IDColumn.ColumnName, PSLibrary.Filter.SortOrderTypeEnum.None)); 
resourceFilter.Fields.Add(new PSLibrary.Filter.Field(resourceDs.Resources.TableName, resourceDs.Resources.RES_IS_WINDOWS_USERColumn.ColumnName, PSLibrary.Filter.SortOrderTypeEnum.None)); 
resourceFilter.Fields.Add(new PSLibrary.Filter.Field(resourceDs.Resources.TableName, resourceDs.Resources.WRES_ACCOUNTColumn.ColumnName, PSLibrary.Filter.SortOrderTypeEnum.None)); 
resourceFilter.Fields.Add(new PSLibrary.Filter.Field(resourceDs.Resources.TableName, resourceDs.Resources.WRES_EMAILColumn.ColumnName, PSLibrary.Filter.SortOrderTypeEnum.None)); 
resourceFilter.Fields.Add(new PSLibrary.Filter.Field(resourceDs.Resources.TableName, resourceDs.Resources.RES_TIMESHEET_MGR_UIDColumn.ColumnName, PSLibrary.Filter.SortOrderTypeEnum.None)); 

resourceDs = ReadResources(resourceFilter.GetXml(), false); 

查詢被定義爲擴展ResourceClient類從PSI。

只要你知道資源的ID只需要執行:Application.EnterpriseResourceGet(resId, omissing);

應用爲Microsoft.Office.Interop.MSProject

該命令將從Project Server中將資源加載到Active Project中。哦,是的,請您在調用命令時檢查您的項目是否處於活動狀態。

+0

非常感謝!你能告訴我在哪裏可以找到像這樣的文檔。爲什麼很難找到... – user1781720

+0

http://msdn.microsoft.com/en-us/library/office/ee767707(v=office.14).aspx – melan