Ресурсы в надстройке MSProject: добавьте ресурс, связанный с сервером, в локальную версию проекта.
В настоящее время я занимаюсь разработкой AddIn для MS Project 2010.
В этой надстройке пользователь фильтрует всех сотрудников, хранящихся в виде ресурсов MS Project на Project Server, по нескольким критериям. После нахождения подходящего человеческого ресурса пользователь должен иметь возможность добавить этот ресурс к выбранной задаче.
К сожалению, я не нахожу связь между добавлением ресурса локально
_activeProject.Resources.Add("ResourceName")
и ресурс хранится на сервере. "ResourceName", показанное в Project, не имеет связи с "ResourceName" на сервере.
Я пытался загрузить Microsoft.Office.Interop.MSProject.Resource
каким-то образом с сервера через PSI и добавить его в команду проекта:
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). Эта информация хранится в столбце RES_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.
Как только вы узнаете идентификатор ресурса, просто выполните: Application.EnterpriseResourceGet(resId, omissing);
Приложение от Microsoft.Office.Interop.MSProject
,
Эта команда загрузит ресурс из Project Server в активный проект. О да, пожалуйста, не забудьте проверить, что ваш проект активен, когда вы вызываете команду.