0

現在、MS Project 2010 のアドインを開発しています。

このアドインでは、ユーザーは Project Server に MS Project Resources として保存されているすべての従業員をいくつかの基準でフィルター処理します。一致する人材を見つけた後、ユーザーはこのリソースを選択したタスクに追加できるはずです。

残念ながら、リソースをローカルに追加することの間のリンクが見つかりません

 _activeProject.Resources.Add("ResourceName") 

サーバーに保存されているリソース。プロジェクトに表示されている「ResourceName」は、サーバー上の「ResourceName」に接続されていません。

Microsoft.Office.Interop.MSProject.ResourcePSIを介してサーバーから何とかロードし、プロジェクトチームに追加しようとしました:

    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つまり、 aを aに変換する方法を探していMicrosoft.Office.Interop.MSProject.Resourceます。

私の研究はすべて失敗したので、誰かが私を助けてくれることを本当に願っています.

4

1 に答える 1

1

Project サーバーからプロジェクトにリソースを追加するには、リソースの ID (GUID ではない) を知る必要があります。この情報は、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);

クエリは、PSI のResourceClientクラスの拡張として定義されています。

リソースの ID がわかったらすぐに実行します。Application.EnterpriseResourceGet(resId, omissing);

お申し込みは からMicrosoft.Office.Interop.MSProject

このコマンドは、リソースを Project Server から Active Project に読み込みます。そうそう、コマンドを呼び出すときにプロジェクトがアクティブであることを確認することを忘れないでください。

于 2012-11-28T04:44:19.327 に答える