Arquivo

Archive for the ‘Project Server’ Category

Mapeando Custom Fields com FluentPS

Enterprise custom fieldsNo post anterior aprendemos como utilizar a biblioteca FluentPS, que facilita o trabalho de manipular informações do Project Server.

Nesse post vamos ver como recuperar informações de campos personalizados do Project Server, os Enterprise Custom Fields.

O que são Enterprise Custom Fields?

Enterprise Custom Fields permitem extender os campos fornecidos por padrão pelo Project Server, podendo ser associados às entidades Projeto, Recurso e Tarefas. Eles são geralmente utilizados para atender a alguma necessidade específica da empresa/organização.

Os Enterprise Custom Fields são armazenados no Banco de Dados do próprio Project Server.

Onde estão os Enterprise Custom Fields?

Configurações do ServidorOs campos personalizados podem ser encontrados no PWA site, através do link Configurações do Servidor.

Agora navegue até a seção Dados da Empresa.

Selecione a opção Campos Personalizados da Empresa e Tabelas de Pesquisa para ver os campos cadastrados do servidor.

Seção Dados da Empresa

Nosso Exemplo

A nossa aplicação vai recuperar os dados do campo Departamento de um determinado projeto. Para isso, vamos criar a entrada Departamento de TI nesse campo.

Observação: lembre que você deve associar ao projeto o valor do campo Departamento que acabamos de criar, utilizando, por exemplo, o Microsoft Project Professional.

Usando o código do post anterior, vamos modificar a classe ProjectInfo. Criaremos a propriedade ProjectDepartment da seguinte forma:

[PSLookupField("9d77d62a-a92e-4d40-adc8-446c90eb7456", LookupTableUid="e7397277-1ab0-4096-b2dd-57029a055ba4",
FieldName = "Departamentos do Projeto", LookupTableName = "Departamento")]
public string ProjectDepartment { get; set; }

Para mapearmos o campo Departamento, utilizamos o atributo PSLookupField, recebendo em seu construtor os seguintes parâmetros: o ID do campo, o ID da tabela de lookup (tabela de pesquisa, em Português), o nome do campo e o nome da tabela de lookup.

Para recuperar o ID do campo, basta clicar no campo

Campo personalizado Departamento do Projeto

e copiar o GUID na parte inferior da página:

ID do campo DepartamentoDa mesma forma, para acessar o ID da tabela de lookup Departamento basta clicar nela,

Tabela de pesquisa Departamento

naveguar até a parte inferior da pagina e copiar o GUID:

GUID da tabela de lookup DepartamentoAgora altere a classe Program.cs para exibir o nome do Departamento associado ao projeto.

Console.WriteLine("Project Department: {0}", project.ProjectDepartment);

Pronto! Agora é só executar o código e o Departamento do projeto será exibido.

Novamente, se quiser mais informações sobre o FluentPS e o mapeamento de Custom Fields, acesse http://www.projectserver2010blog.com

Categorias:.NET, Project Server

Usando FluentPS

fluentPS logo

FluentPS é uma biblioteca open source que tem o objetivo de simplificar o desenvolvimento de aplicações na plataforma Project Server 2010. Ela lembra bastante o FluentNHibernate, bem parecida com ORM (mapeamento objeto-relacional), provendo uma interface para o PSI (Project Server Interface).

No desenvolvimento de aplicações para Project Server sem usar o FluentPS, era preciso adicionar várias referências a WebServices que permitiam o acesso a informações dos arquivos de Projeto que estavam publicados no Portal PWA. Com o FluentPS, essa tarefa não é mais necessária. Toda a comunicação com o Project Server é feita através de objetos compilados na Plataforma .NET.

Agora que sabemos o que é o FluentPS vamos à prática!

Esse exemplo é bem simples e apenas recupera as informações referentes ao ID e Nome dos Projetos que estão publicados no Portal PWA.

Baixe as dlls do FluentPS do site http://fluentps.codeplex.com/. Para esse exemplo estou usando a versão 2.0.

Vamos criar um projeto Console com o nome de FluentPSTestApplication. Adicione as referências para as dlls do FluentPS que você acabou de baixar.

referências fluentps

Configure o a propriedade Target Framework do projeto para .NET Framework 3.5, clicando com o botão direito sobre o projeto e escolhendo a opção Properties.

Versão do .NET Framework

Agora, adicionamos a classe ProjectInfo que mapeará os campos referentes a um projeto do Project Server.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FluentPS.Attributes;
using FluentPS.Consts;

namespace FluentPSTestApplication
{
public class ProjectInfo
{
[PSEntityUidField(ColumnName=ProjectCustomFieldsColumnNames.PROJ_UID)]
public Guid ProjectUid { get; set; }

[PSEntityUidField(ColumnName=ProjectCustomFieldsColumnNames.PROJ_NAME)]
public string ProjectName { get; set; }
}
}

O atributo PSEntityUidField realiza o mapeamento de um campo padrão de um projeto. Nesse exemplo, os campos padrões são o ID e o Nome do Projeto.

Na classe Program, adicione o seguinte trecho de código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FluentPS.Services.Impl;
using FluentSP.Services.Impl;
using FluentPS.WebSvcCustomFields;
using FluentPS.WebSvcLookupTable;

namespace FluentPSTestApplication
{
class Program
{
static void Main(string[] args)
{
var logService = new LogService();
var sessionService = new PSSessionService();
var psiContextService = new PsiContextService();
var psiSvcsFactory = new PSISvcsFactory(sessionService, psiContextService);

var lookupTableService = new PSLookupTableService(
logService,
psiSvcsFactory.CreateSvcClient());

var svcCustomFields = psiSvcsFactory.CreateSvcClient();
var svcLookupTable = psiSvcsFactory.CreateSvcClient();
var svcView = psiSvcsFactory.CreateSvcClient();

var environmentService = new EnvironmentService();
var customFieldService = new PSCustomFieldService(logService,
svcCustomFields,
svcView,
environmentService,
lookupTableService);

var projectsService = new PSProjectService(
logService,
lookupTableService,
customFieldService,
psiSvcsFactory.CreateSvcClient());
var projects = projectsService.GetAll();

foreach (var project in projects)
{
Console.WriteLine("Project Name: {0}", project.ProjectName);
Console.WriteLine("Project Uid: {0}", project.ProjectUid);
Console.WriteLine();
}

Console.ReadKey();
}
}
}

Basicamente, o que o código acima faz é instanciar os objetos do FluentPS que servem para mapear os WebServices do Project Server.

O comando abaixo, retorna todos os projetos publicados no Portal do PWA.

var projects = projectsService.GetAll();

Fácil, não? Se você quiser mais informações sobre o FluentPS, acesse o site http://www.projectserver2010blog.com. Exemplo concluído e até o próximo post.

Categorias:.NET, Project Server