Calcular projeto programaticamente usando C#

Podemos calcular os cronogramas ou custos do projeto usando os modos de cálculo definidos nas opções do projeto para o Microsoft Project. Um cronograma de projeto mostra a data de início e término de todas as tarefas do projeto. O Microsoft Project permite o cálculo do projeto de forma manual ou automática. Como desenvolvedor C#, podemos definir facilmente o modo de cálculo do projeto em aplicativos .NET e calcular as propriedades do projeto. Neste artigo, aprenderemos como calcular um projeto programaticamente usando C#.

Os seguintes tópicos serão abordados neste artigo:

API C# para calcular o projeto programaticamente

Para definir os modos de cálculo do projeto, usaremos a API Aspose.Tasks for .NET. Ele fornece três modos de cálculo de projeto, para calcular os valores de propriedades dependentes. Esses modos de cálculo são:

  • Nenhum – define apenas as propriedades necessárias e não recalcula datas e custos do projeto.
  • Manual – define apenas propriedades de objetos dependentes sem recálculo de datas e custos do projeto.
  • Automático – recalcula as datas do projeto e as propriedades de custo automaticamente.

A API define os modos de cálculo mencionados acima na enumeração CalculationMode. A propriedade CalculationMode da classe Project permite definir ou obter o valor do CalculationMode. A API também permite manipular um projeto existente para adicionar algumas modificações. Além disso, facilita a execução de operações básicas e avançadas de gerenciamento de projetos sem problemas. Por favor, baixe a DLL da API ou instale-a usando NuGet.

PM> Install-Package Aspose.Tasks

Cálculo manual do projeto usando C#

Podemos definir o modo de cálculo para manual e verificá-lo seguindo as etapas abaixo:

  1. Em primeiro lugar, crie uma instância da classe Project.
  2. Em seguida, defina o modo de cálculo para Manual.
  3. Em seguida, especifique a data de início do projeto.
  4. Em seguida, adicione novas tarefas, por exemplo, Tarefa 1 e Tarefa 2.
  5. Em seguida, leia as propriedades da tarefa definidas no modo manual.
  6. Depois disso, inicialize um objeto da classe TaskLinks e vincule as tarefas.
  7. Por fim, verifique a data de início e término da Tarefa 2.

O exemplo de código a seguir mostra como calcular manualmente um projeto usando C#.

// Este exemplo de código demonstra como definir o modo de cálculo manual do projeto.
// Criar uma instância do projeto
Project project = new Project();

// Defina o modo de cálculo para Manual
project.CalculationMode = CalculationMode.Manual;

// Definir data de início do projeto
project.Set(Prj.StartDate, new DateTime(2015, 4, 15));

// Adicionar novas tarefas
Aspose.Tasks.Task task1 = project.RootTask.Children.Add("Task 1");
Aspose.Tasks.Task task2 = project.RootTask.Children.Add("Task 2");

// As propriedades necessárias são definidas no modo manual
Console.WriteLine("Task1.Id Equals 1 : {0} ", task1.Get(Tsk.Id).Equals(1));
Console.WriteLine("Task1 OutlineLevel Equals 1 : {0} ", task1.Get(Tsk.OutlineLevel).Equals(1));
Console.WriteLine("Task1 Start Equals 15/04/2015 08:00 AM : {0} ", task1.Get(Tsk.Start).Equals(new DateTime(2015, 4, 15, 8, 0, 0)));
Console.WriteLine("Task1 Finish Equals 15/04/2015 05:00 PM : {0} ", task1.Get(Tsk.Finish).Equals(new DateTime(2015, 4, 15, 17, 0, 0)));
Console.WriteLine("Task1 Duration Equals 1 day : {0} ", task1.Get(Tsk.Duration).ToString().Equals("1 day"));
Console.WriteLine("Task2 Start Equals 15/04/2015 08:00 AM : {0} ", task2.Get(Tsk.Start).Equals(new DateTime(2015, 4, 15, 8, 0, 0)));
Console.WriteLine("Task2 Finish Equals 15/04/2015 05:00 PM : {0} ", task2.Get(Tsk.Finish).Equals(new DateTime(2015, 4, 15, 17, 0, 0)));
Console.WriteLine("Task2 Duration Equals 1 day : {0} ", task2.Get(Tsk.Duration).ToString().Equals("1 day"));

// Vincular duas tarefas, suas datas não devem ser recalculadas no modo manual
TaskLink link = project.TaskLinks.Add(task1, task2, TaskLinkType.FinishToStart);

// Nenhuma mudança nas datas da Tarefa 2
Console.WriteLine("Task1 Start Equals Task2 Start : {0} ", task1.Get(Tsk.Start).Equals(task2.Get(Tsk.Start)));
Console.WriteLine("Task1 Finish Equals Task2 Finish : {0} ", task1.Get(Tsk.Finish).Equals(task2.Get(Tsk.Finish)));
Task1.Id Equals 1 : True
Task1 OutlineLevel Equals 1 : True
Task1 Start Equals 15/04/2015 08:00 AM : True
Task1 Finish Equals 15/04/2015 05:00 PM : True
Task1 Duration Equals 1 day : True
Task2 Start Equals 15/04/2015 08:00 AM : True
Task2 Finish Equals 15/04/2015 05:00 PM : True
Task2 Duration Equals 1 day : True
Task1 Start Equals Task2 Start : True
Task1 Finish Equals Task2 Finish : True

Cálculo automático de projetos usando C#

Podemos definir o modo de cálculo para automático e verificá-lo seguindo os passos abaixo:

  1. Em primeiro lugar, crie uma instância da classe Project.
  2. Em seguida, defina o modo de cálculo como Automático.
  3. Em seguida, defina a data de início do projeto.
  4. Agora, adicione novas tarefas, por exemplo, Tarefa 1 e Tarefa 2.
  5. Depois disso, inicialize um objeto da classe TaskLinks e vincule as tarefas.
  6. Por fim, verifique as datas recalculadas.

O exemplo de código a seguir mostra como calcular o projeto automaticamente usando C#.

// Este exemplo de código demonstra como definir o modo de cálculo automático do projeto.
// Criar uma instância do projeto
Project project = new Project();

// Defina o modo de cálculo para Automático
project.CalculationMode = CalculationMode.Automatic;

// Definir data de início do projeto
project.Set(Prj.StartDate, new DateTime(2015, 4, 15));

// Adicionar novas tarefas
Aspose.Tasks.Task task1 = project.RootTask.Children.Add("Task 1");
Aspose.Tasks.Task task2 = project.RootTask.Children.Add("Task 2");

// Vincular tarefas
TaskLink link = project.TaskLinks.Add(task1, task2, TaskLinkType.FinishToStart);

// Verifique as datas recalculadas
Console.WriteLine("Task1 Start + 1 Equals Task2 Start : {0} ", task1.Get(Tsk.Start).AddDays(1).Equals(task2.Get(Tsk.Start)));
Console.WriteLine("Task1 Finish + 1 Equals Task2 Finish : {0} ", task1.Get(Tsk.Finish).AddDays(1).Equals(task2.Get(Tsk.Finish)));
Console.WriteLine("RootTask Finish Equals Task2 Finish : {0} ", task2.Get(Tsk.Finish).Equals(project.RootTask.Get(Tsk.Finish)));
Console.WriteLine("Project Finish Date Equals Task2 Finish : {0} ", task2.Get(Tsk.Finish).Equals(project.Get(Prj.FinishDate)));
Task1 Start + 1 Equals Task2 Start : True
Task1 Finish + 1 Equals Task2 Finish : True
RootTask Finish Equals Task2 Finish : True
Project Finish Date Equals Task2 Finish : True

Nenhum modo de cálculo de projeto em C#

Podemos definir o modo de cálculo para automático e verificá-lo seguindo os passos abaixo:

  1. Em primeiro lugar, crie uma instância da classe Project.
  2. Em seguida, defina o modo de cálculo como Nenhum.
  3. Em seguida, especifique a data de início do projeto.
  4. Em seguida, adicione uma nova tarefa, por exemplo, Tarefa 1.
  5. Em seguida, leia as propriedades da tarefa.
  6. Depois disso, defina a duração da tarefa em dias.
  7. Por fim, verifique a data de início e término da Tarefa.

O exemplo de código a seguir mostra como definir o cálculo do projeto como nenhum usando C#.

// Este exemplo de código demonstra como definir o modo de cálculo do projeto como nenhum.
// Criar uma instância do projeto
Project project = new Project();

// Defina o modo de cálculo como Nenhum
project.CalculationMode = CalculationMode.None;

// Adicionar uma nova tarefa
Aspose.Tasks.Task task = project.RootTask.Children.Add("Task");

// Observe que os ids pares não foram calculados
Console.WriteLine("Task.Id Equals 0 : {0} ", task.Get(Tsk.Id).Equals(0));
Console.WriteLine("Task.OutlineLevel Equals 0 : {0} ", task.Get(Tsk.OutlineLevel).Equals(0));
Console.WriteLine("Task Start Equals DateTime.MinValue : {0} ", task.Get(Tsk.Start).Equals(DateTime.MinValue));
Console.WriteLine("Task Finish Equals DateTime.MinValue : {0} ", task.Get(Tsk.Finish).Equals(DateTime.MinValue));
Console.WriteLine("Task Duration Equals 0 mins : {0} ", task.Get(Tsk.Duration).ToString().Equals("0 mins"));

// Definir propriedade de duração
task.Set(Tsk.Duration, project.GetDuration(2, TimeUnitType.Day));
Console.WriteLine("Task Duration Equals 2 days : {0} ", task.Get(Tsk.Duration).ToString().Equals("2 days"));
Console.WriteLine("Task Start Equals DateTime.MinValue  : {0} ", task.Get(Tsk.Start).Equals(DateTime.MinValue));
Console.WriteLine("Task Finish Equals DateTime.MinValue  : {0} ", task.Get(Tsk.Finish).Equals(DateTime.MinValue));
Task.Id Equals 0 : True
Task.OutlineLevel Equals 0 : False
Task Start Equals DateTime.MinValue : True
Task Finish Equals DateTime.MinValue : True
Task Duration Equals 0 mins : True
Task Duration Equals 2 days : True
Task Start Equals DateTime.MinValue  : True
Task Finish Equals DateTime.MinValue  : True

Obtenha uma licença gratuita

Você pode obter uma licença temporária gratuita para experimentar a biblioteca sem limitações de avaliação.

Conclusão

Neste artigo, aprendemos como definir os modos de cálculo do projeto programaticamente. Também vimos como os valores das propriedades dependentes são calculados em cada modo de cálculo usando C#. Além disso, você pode aprender mais sobre Aspose.Tasks for .NET API usando a documentação. Em caso de qualquer ambiguidade, não hesite em contactar-nos no fórum.

Veja também