quinta-feira, 20 de outubro de 2011

Como instanciar aplicação do Project Professional 2010

Mostrarei aqui como instanciar a aplicação do Project Professional 2010 programaticamente utilizando um projeto Windows Forms do C# com Visual Studio 2010.
Muitas vezes se torna necessário fazer inserções ou alterações de dados diretamente pela interface do Project já que o PSI (Project Server Interface) não atende 100% das ações realizadas no Project.

Bom, mostrarei aqui como instanciar o Project, criar tarefas, recursos e atribuições.


Lembrando que você deve ter o Project Professional instalado.

Começaremos criando um projeto Windows Forms:



Criei um botão no formulário para podermos fazer os testes com o Project:



Agora você deve adicionar a referência “Microsoft.Office.Interop.MSProject”:


Com isso vamos à ação de click do botão e adicionar o código abaixo:


//Iniciamos o Project Professional
Microsoft.Office.Interop.MSProject.Application app = new Microsoft.Office.Interop.MSProject.Application();

//Deixamos a aplicação visível
app.Visible = true;

//Abrimos um novo projeto em branco
app.FileNew();

//Buscamos aqui o projeto ativo na aplicação
Microsoft.Office.Interop.MSProject.Project project = app.ActiveProject;

//Adicionar tarefa
Microsoft.Office.Interop.MSProject.Task task = project.Tasks.Add();
task.Name = "Tarefa 01";

//Adicionar recurso
Microsoft.Office.Interop.MSProject.Resource resource = project.Resources.Add();
resource.Name = "Recurso 01";

//Adicionar atribuição
Microsoft.Office.Interop.MSProject.Assignment assignment = task.Assignments.Add(task.ID, resource.ID);



O código acima está todo comentado podendo ser facilmente entendido mas é importante lembrar que para criar uma atribuição você deve indicar o ID da tarefa e do recurso para que o Project faça esta conexão.
Agora basta você rodar a aplicação e clicar no botão e verá o Project Professional abrindo, criando uma tarefa, um recurso e faz uma atribuição.

4 comentários:

  1. Olá Matheus,

    Será que me pode ajudar em algumas dúvidas? Eu estou desenvolvendo um add-in para o MSProject 2010 em C#, mas estou com bastantes dificuldades.

    Por exemplo, eu quero criar tarefas e atribuir-lhes recursos. Isso eu já consegui. O meu objetivo agora é definir a quantidade de recursos (Material) que cada tarefa tem e ser capaz de consultar esse valor.

    Agradeço desde já a sua atenção.

    Cumprimentos,

    André Guedes

    ResponderExcluir
    Respostas
    1. Olá André,

      Para realizar a inserção de unidades, no caso de recursos do tipo material, você deve utilizar a linha abaixo após criar a atribuição, pois a quantidade está relacionada à atribuição e não ao recurso.

      assignment.Units = 10;

      Para consultar este valor também é simples, basta acessar a atribuição em questão e terá este valor dentro da propriedade Units, como acima.


      Matheus Dias

      Excluir
    2. Olá Matheus,

      Obrigado pela resposta.
      Entretanto surgiram mais algumas dúvidas. Espero que me possa ajudar.

      Uma delas é a seguinte: sabendo que existe apenas um recurso, MSProject.Resources[1], que está atribuido a várias tarefas, por exemplo 5 unidades à tafefa1, 6 à tarefa 2, etc. Como faço para saber quantas unidades desse recurso (material) estão sendo usadas numa determinada data?

      Outra dúvida é como eu faço para definir o calendário 24h em código?

      Obrigado pela sua atenção. Se não for muita intrusão, gostaria de deixar-lhe o meu email para possa responder diretamente para mim (afm.guedes@gmail.com).

      Cumprimentos,


      André Guedes

      Excluir
    3. André,

      Para pegar informações distribuídas no tempo você deverá utilizar função TimeScaleData, onde você poderá não somente buscar esta informação como também atribuir valores à data desejada.

      Já para fazer a alteração de calendário utilize ChangeWorkingTimeEx.


      Matheus Dias

      Excluir