|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
24.2. Коллекция Projects, объект Project и вложенные объектыСоздание средствами VBA проектов, задач и ресурсов, программная публикация проектов на Project Server 2003 После того, как объект Application создан (а значит, Projeсt открыт - программно или вручную), нам нужно создать или открыть в нем проект. Создание проекта может выглядеть очень просто, при помощи метода Add коллекции Projects: Dim oProj As Project Set oProj = Projects.Add() Дополнительные необязательные параметры метода Add позволяют создать новый проект на основе шаблона или открыть окно для выбора шаблонов. Если нужно открыть существующий проект, то нам может встретиться два варианта этой задачи: 1) нужно открыть локальный проект (из файла *.mpp). Здесь все просто: Application.FileOpen ("D:\Project1.mpp") А затем ловим объектную ссылку на этот проект (поскольку сам метод FileOpen нам ее не возвращает): For Each Project In Application.Projects If Project.Name = "project1.mpp" Then Set oProj = Project Exit For End If Next MsgBox oProj.Name 2) нужно открыть проект с сервера Project Server. Здесь все выполняется точно так же, за исключением того, что мы используем метод FileOpen с параметром с хитрым синтаксисом: Application.FileOpen ("<>\Забор.Опубликовано") "<>\Забор.Опубликовано" - это, конечно, имя проекта на сервере Project Server. К этому серверу мы должны подключиться в момент запуска Project. При этом при запуске Project указать сервер, к которому мы подключаемся, не получится. Придется идти сильно в обход: работать с коллекцией Profiles объекта Application, который позволяет просмотреть профили, создать новый профиль, настроить параметры подключения (путь к серверу, имя и тип учетной записи), сделать его профилем по умолчанию и т.п. Например, если мы работаем из внешнего приложения, можно создать нужный профиль, сделать его профилем по умолчанию, подключиться к Project Server - а потом вернуть все обратно. Но чаще все-таки пользователь автоматически при входе подключается к Project Server и заниматься нам этим не нужно. Такой же синтаксис ("<>\Забор.Опубликовано") можно будет использовать и потом, при сохранении проекта на Project Server (методом SaveAs объекта Project). После того, как мы создали проект, можно работать с его элементами - задачами, ресурсами и назначениями. Добавление задачи в проект может выглядеть так: Dim oTask As Task Set oTask = oProj.Tasks.Add("Задача 1") У объекта Task огромное количество свойств, которые позволяет настроить любые параметры задачи. Например, у этого объекта есть свойство ActualStart, ActualFinish, ActualDuration и т.п. Но догадаться, как каждое из этих свойств соотносится с нужным нам полем на графическом экране, очень сложно. Обычно намного удобнее после создания задачи использовать не ее свойства, а специальный метод SetTaskField объекта Application. Отличие этого метода - в том, что он принимает в качестве параметров имя свойства (на русском - так, как оно выглядит на графическом экране), значение, и в качестве одного из необязательных параметров - TaskId. Например, начало и длительность созданной нами задачи можно установить так: Application.SetTaskField "Начало", Date, False, False, oTask.ID Application.SetTaskField "Длительность", "2д", False, False, oTask.ID В принципе, средствами этого метода можно сразу создавать задачи, но это обычно не самый удобный способ. Есть возможность также просто после настройки нужного параметра на графическом экране сохранить проект в XML (или получить его в XML cредствами Project Data Services - об этом ниже) и посмотреть информацию о настроенных параметрах элементов. Другой важный элемент любого проекта - ресурсы. Работа с ресурсами включает в себя несколько задач. Первая задача - работа с корпоративным пулом ресурсов. Заполнение корпоративного пула, отслеживание изменений в нем и обеспечение актуальности - один из самых трудоемких компонентов работы с Project Server. Часто информацию о ресурсах нужно синхронизировать с внешними источниками данными (обычно с базами данных). Это можно сделать средствами Project Data Services, а можно - средствами VBA. Открыть корпоративный пул ресурсов можно так: Application.EnterpriseResourcesOpen EUID:="", OpenType:=pjReadWrite Если передать этому методу значения всех параметров (они необязательные), то глобальный корпоративный пул ресурсов будет открыт без каких-либо диалоговых окон. Далее обычным способом (указанным выше) ловим объектную ссылку на проект, имя которого - "Извлеченные корпоративные ресурсы" и создаем в нем ресурсы, а потом сохраняем и закрываем. Другая возможность - импортировать ресурсы в глобальный корпоративный пул при помощи специального метода Application.EnterpriseResourcesImport(), которому передается ID локального ресурса. Другая задача - создать локальные ресурсы. Здесь все просто. В объекте Project предусмотрена коллекция Resources с методом Add, которая состоит из объектов ресурсов. Единственная проблема - то, что свойств у ресурсов тоже очень много. Но на помощь нам приходит метод SetResourceField, аналогичный уже рассмотренному: Dim oRes As Resource Set oRes = oProj.Resources.Add("Иванов Иван") Application.SetResourceField "Тип", "Трудовой", False, False, oRes.ID Можно, конечно, использовать и стандартные свойства объекта: oRes.StandardRate = 100 Разновидность этой задачи - поместить в локальный проект ресурсы из корпоративного пула. Для этой цели проще всего использовать метод Application.EnterpriseResourceGet(), которому нужно передать ID глобального ресурса и ID локального ресурса. Предварительно ID глобального ресурса можно получить, пройдя по нему циклом и выбрав нужные ресурсы по значению определенных полей. Следующая задача обычно - произвести назначения. Это можно сделать множеством разных способов: · первый способ - воспользоваться коллекцией Assignments и ее метод Add: oTask.Assignments.Add oTask.ID, oRes.ID · второй способ - применить метод Application.ResourceAssignment(). Он хорош тем, что позволяет назначать ресурсы одновременно нескольким задачам, но эти задачи должны быть выделены (пользователем или программным способом, что снижает надежность этого метода) · третий способ - воспользоваться уже знакомым нам методом SetTaskField(): SetTaskField Field:="Названия ресурсов", Value:="Иванов Иван[100%]" Последнее, о чем нужно поговорить - о назначении настраиваемых кодов структуры и корпоративных полей. Если обязательный настраиваемый корпоративный код структуры для проекта, задачи или ресурса не определен, то проект просто нельзя будет сохранить на сервере. Настраиваемые коды структуры и корпоративные поля настраиваются как обычные свойства. Если для задач и ресурсов они доступны напрямую (например, oRes.EnterpriseText1 = "Мой текст"), а для проекта - через свойство SummaryTask: ActiveProject.ProjectSummaryTask.EnterpriseCost1 = "500.00"
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Получить учебные материалы по этому курсу
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||