Академия Специальных Курсов по Компьютерным Технологиям
    Главная страница Послать письмо
 
AskIt.ru  
   
   
   
   
   
   
 
 
  Главная / Заказные курсы / Программирование в Microsoft Office для пользователей
 
 

Получить учебные материалы по этому курсу


<-- Назад Читать дальше -->

15.2. Коллекция Projects , объект Project и вложенные объекты

Объекты Project, Task, Resource, работа с проектами на Project Server из VBA, корпоративный пул ресурсов

После того, как объект Application создан (а значит, Projeсt открыт — программно или вручную), нам нужно создать или открыть в нем проект.

Создание проекта может выглядеть очень просто, при помощи метода Add() коллекции Projects:

Dim oProj As Project

Set oProj = Projects.Add()

Дополнительные необязательные параметры метода Add() позволяют создать новый проект на основе шаблона или открыть окно для выбора шаблонов.

Если нужно открыть существующий проект, то нам может встретиться два варианта этой задачи:

  • Нужно открыть локальный проект (из файла *. 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

Нужно открыть проект с сервера 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"

 

   
   
   
   
   
   
   
   
   
   
 
<-- Назад Читать дальше -->

Получить учебные материалы по этому курсу


 
© 2004-2016, Академия Специальных Курсов
по Информационным Технологиям
.
Все права защищены.

Разработка NevaStudio
г. Санкт-Петербург, Васильевский остров,
20-я линия, д. 7
Офис 101, 2-й этаж
Телефон: 8(812)922-47-60
E-mail: info@askit.ru