vendredi 4 novembre 2011

Petit rappel sur l'utilisation du connecteur entre Team Foundation Server et Project Server

Ajouter les droits du compte de service de TFS dans le service de Project Server


 
Le compte de service de TFS doit pouvoir avoir un accès complet au service de Project Server et donc à toutes les instances de PWA.

 
Pour ajouter ce compte de service vous devez ouvrir l’administration centrale de SharePoint 2010.

 
  • Allez dans « Application Management », et cliquez sur « Manage service applications ».
  • Dans la page « Manage Service Application », cliquez sur la ligne « Project Server Service Application ».
  • Dans le ruban, cliquez sur « Permissions ».
  • Indiquez le nom du compte de service de TFS, et cliquez sur « Add ».
  • Dans la zone du bas, cliquez sur « Full Control », et cliquez sur « OK ».

 
Ajouter les droits du compte de service de TFS dans les instances de PWA.

 
  • Ouvrez votre ou vos instances PWA (http://PS2010/PWA).
  • Allez dans « Server Settings »
  • Cliquez sur « Manage Users »
  • Cliquez sur « New User »
  • Dans la zone « * Display Name » indiquez le nom du compte de service « Ex : Compte de service TFS »
  • Dans la zone « * User longon account : » saisissez le compte de service « Ex : PS2010\TFSService »
  • Dans la zone « Security Groups » sélectionnez « Administrators » et cliquez sur « Add »
  • Dans la zone « Security Categories » cliquez sur « Add All >> »
  • Pour chaque catégories, sélectionnez dans la liste « Set permissions with Template: » « Administrator » puis cliquez sur « Apply »
  • Dans la zone « Global Permissions », sélectionnez dans la liste « Set permissions with Template: » « Administrator » et cliquez sur « Apply »
  • Enfin cliquez sur « Save »

  
Enregistrement de l’instance de PWA

 
Chaque enregistrement d’instance de PWA et de TFS doit être enregistré dans le système de synchronisation.

 
Commande :

 
TfsAdmin ProjectServer /RegisterPWA /pwa:pwaUrl /TFS:tfsUrl
  • pwaUrl : Adresse de PWA, http://PS2010/Pwa
  • tfsUrl : Adresse de TFS, http://PS2010:8080/tfs

 Batch :

 

 
@echo off
set v_PWA="http://ps2010/pwa"
set v_TFS="http://ps2010:8080/tfs"

 
cd c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE
set /p v_Question= if you want to register an instance of PWA : %v_PWA% (y or n) ?

 
if not %v_Question%== y goto Suite
echo Register an instance of PWA : %v_PWA%

 
TfsAdmin ProjectServer /RegisterPWA /pwa:%v_PWA% /TFSServerURL:%v_TFS%

 
pause
:Suite


 

 

Enregistrement de la relation entre une instance de PWA et une collection de TFS

 
Toute collection de projet dans TFS 2010 contenant un ou plusieurs projets d’équipe lié à un projet d’entreprise dans PWA doit être mappée.

 
Commande

 
TfsAdmin ProjectServer /MapPWAtoCollection /pwa:pwaUrl /collection:tpcUrl
  • pwaUrl : Adresse de l’instance de PWA : http://PS2010/pwa
  • tpcUrl : Adresse de la collection de site : http://PS2010:8080/tfs/DefaultCollection

 Batch

  
@echo off
set v_PWA="http://ps2010/pwa"
set v_Collection="http://ps2010:8080/tfs/DefaultCollection"

 
cd c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE
set /p v_Question= if you want to map this collection project : %v_Collection% (y or n) ?

 
if not %v_Question%== y goto Suite

 
echo Map the PWA instance (%v_PWA%) with a team project collection (%v_Collection%)

 
TfsAdmin ProjectServer /MapPWAtoCollection /pwa:%v_PWA% /collection:%v_Collection%

 
pause

 
:Suite


Mise à jour du fichier de mapping

 
Les champs coté TFS doivent être mappé aux champs cotés Project Server. Attention la mapping est pour une collection de projet donc prévoyez tous les champs de tous les types de projets.

 
Commande

 
TfsAdmin ProjectServer /UploadFieldMappings /collection:tpcUrl /useDefaultFieldMappings
  • tpcUrl : Adresse de la collection de projet : http://PS2010:8080/tfs/DefaultCollection
  • useDafaultFieldMappings : Permet d’utiliser le mapping par défaut, il contient les champs obligatoire.
  • filePath : Permet de spécifier un fichier : c:\mapping.xml

 
Batch

 
@echo off
set v_Collection="http://ps2010:8080/tfs/DefaultCollection"


cd c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE

set /p v_Question= if you want to upload the mapping default : (y or n) ?

 
if not %v_Question%== y goto Suite

 
echo Upload default field mappings

 
TfsAdmin ProjectServer /UploadFieldMappings /collection:%v_Collection% /useDefaultFieldMappings

 
pause
:Suite

 
Associer un Project d’équipa TFS à un projet d’entreprise de PWA

 
Tout projet qui doit être synchronisé à un projet d’entreprise doit être enregistré. Attention vous ne pouvez pas mapper un projet de TFS si sa collection de projet d’appartenance n’est pas mappée.

 
Commande

 
TfsAdmin ProjectServer /MapPlanToTeamProject /collection:tpcUrl /enterpriseproject:PlanName /teamproject:ProjectName /workitemtypes:ListOfTypes

  • tcpUrl : Adresse de la collection de projet : http://PS2010:8080/tfs/defaultCollection
  • enterpriseProject : Nom du projet dans PWA : Agile Plan
  • teamProject : Nom du projet dans TFS : Agile Project Team
  • WorkitemTypes : Liste des type de WI à synchroniser : « User Story,Task »
Batch

 
@echo off

 
set v_Collection="http://ps2010:8080/tfs/DefaultCollection"
set v_WIType="User Story"
set v_EnterpriseProject = "Agile Plan"
set v_TeamProject = "Agile Team Project"

 
cd c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE

 
set /p v_Question= if you want to register an instance of PWA : %v_PWA% (y or n) ?

 
if not %v_Question%== y goto Suite

 
echo Associate an enterprise project plan (%v_EnterpriseProject%) with a team project(%v_TeamProject%), workitem (%v_WIType%)

 
TfsAdmin ProjectServer /MapPlanToTeamProject /collection:%v_Collection% /enterpriseproject:%v_EnterpriseProject% /teamproject:%v_TeamProject% /workitemtypes:%v_WIType%

 
echo Now you must to add team members to the enterprise resource pool !!!!

 
pause

 
:Suite
Désinscription

 
Vous pouvez à tout moment désinscrire une liaison entre projet, entre TFS et PWA et même désinscrire une instance de PWA. Les choses doivent être faite dans l’ordre, bien que la suppression d’une collection de projet et d’une instance de PWA peut désinscrire il faut faire les choses proprement.

 
Supprimer la liaison entre un projet d’équipe et un projet d’entreprise

 
Commande

 
TfsAdmin ProjectServer /UnmapPlanFromTeamProject/collection:tpcUrl /enterpriseproject:EnterpriseProjectName /teamproject:TeamProjectName

  •  tcpUrl : Adresse de la collection de projet : http://PS2010:8080/tfs/defaultCollection
  • enterpriseProject : Nom du projet dans PWA : Agile Plan
  • teamProject : Nom du projet dans TFS : Agile Project Team

 
Supprimer la liaison entre une collection de projet et une instance de PWA

 
Commande

 
TfsAdmin ProjectServer /UnMapPWAFromCollection /pwa:pwaUrl /collection:tpcUrl [/force]


 
Désinscrire une instance de PWA

 
Commande

 
TfsAdmin ProjectServer /UnregisterPWA /pwa:pwaUrl /TFSServerURL:tfsUrl

  •  tcpUrl : Adresse de TFS : http://PS2010:8080/tfs
  • pwaUrl : Adresse de l’instance de PWA : http://PS2010/pwa

 

 

 

jeudi 29 septembre 2011

Ajouter des jalons à une tâche dans le diagramme de GANTT

Une tâche peut déjà contenir une date de début, de fin et déchéance. Hors si je souhaite rajouter des jalons sur cette tâche, des jalons pour par exemple fixer des points de contrôle il me faut:

  • Soit créer des sous tâches
  • Soit ajouter ces dates dans ma tâche et les faire figurer sur mon GANTT

Bien entendu je vais vous montrer le deuxième choix qui permet de limiter le nombre de tâches Sourire

Ouvrez MS Project et créez une ou deux tâches, dans ma capture j’ai ajouté pour chaque tâche une date d’échéance :

image

Ajoutez une colonne de type “Start Date” je prend la 10 pour mon exemple et nommez la Milestone par exemple et ajoutez pour chaque tâche une date.

image

Ensuite effectuez un clic droit sur le diagramme de GANTT et sélectionnez “Bar Style”.

image

Dans la fenêtre qui s’ouvre  dans la colonne “Name” indiquez le nom. Dans la colonne “Appearance” définissez le visuel de votre indicateur. Dans la colonne “From” et “To” indiquez le nom du champ précédemment créé.

image

Ensuite vous pouvez visualiser le résultat dans votre diagramme de GANTT.

image

Si vous changez la date de la colonne “Milestone” naturellement les indicateurs bougent.

image

jeudi 15 septembre 2011

Jeu concours organisé par Microsoft : « Build Your Island » destiné aux étudiants et lycéens

 

Microsoft organise le concours « Build Your Island » destiné aux étudiants et lycéens.

 

 

 

 

Par équipe de 2 à 3, le principe du jeu consiste à mettre en pratique les concepts de management de projets du 24 octobre au 2 décembre 2011 et à utiliser Microsoft Project 2010 (téléchargeable gratuitement par les participants). Le principe est simple : optimiser son budget pour construire des hôtels et marinas sur une île artificielle et obtenir la meilleure rentabilité.

Les 5 premières équipes viendront alors soutenir leur stratégie dans les bureaux de Microsoft France, face à un jury de professionnels. Pour en savoir plus sur le concours, cliquez ici.

A gagner – un séjour au choix : Ibiza, Djerba, Grèce pour la meilleure équipe et un lot pour chacun des membres des 9 équipes suivantes !

Comment s’inscrire? Les participants devront constituer une équipe de 2 ou 3 étudiants ou lycéens et s’inscrire sur www.etudiants.ms/island entre le 15 septembre et le 20 octobre 2011.

samedi 6 août 2011

Méthode de calcul par USE CASE dans SharePoint 2010

J’utilise souvent cette méthode pour calculer la charge d’un projet. Comme j’utilise aussi Project Server 2010 je me suis dit qu’il serait sympa d’avoir une liste dans le portail de mon projet.
J’ai donc mis en place assez facilement une liste que vous trouverez ici :

Cette liste est simple :
listeSharepoint
et repose sur les informations que vous pouvez trouver sur une fiche de Use Case :
ExempleUseCase

Le formulaire de saisie peut être personnaliser avec InfoPath 2010. (Attention : je ne suis pas un designer pro Sourire )
Avant :
image
Après :
image
Ce cette manière j’ai toujours la charge d’origine dans le portail de mon projet Sourire

mercredi 6 juillet 2011

Comment mettre en couleur le titre d’une tâche

Je gère dans mon Gantt un certain nombre et type de tâche, notamment il m’arrive de faire un planning pour la gestion des anomalies et de certaine tâche de réalisation.

Dans mon cas, ce que je cherche à faire est de coloriser le fond de la cellule du titre si il contient le mot “Anomalie”

Tout d’abord ouvrir Visual Basic Editor :

image

Ensuite dans le fichier “ThisProject” ajouter le code suivant :

'Déclaration de la classe contenant les évènements de MS Prject
Dim e As New MyEvent

Private Sub Project_Open(ByVal pj As Project)
'Passage de l'application à la classe d'évènement
Set e.App = Application
'Passage du projet en cours à la classe d'évènement
Set e.Proj = Application.ActiveProject
End Sub

Créer un Module de Class nommé “MyEvent”

image

Et insérer le code suivant :

'Récupération des évènements sur l'application
Public WithEvents App As Application

'Récupération des évènements sur le projet
Public WithEvents Proj As Project

'---------------------------------------------------------------
'---------------------------------------------------------------
'
' Methode permettant d'effectuer des actions
' avant la modification d'une tâche, dans cet exemple
' je colori la ligne si dans le titre le mot 'Anomalie' est trouvé
'
'---------------------------------------------------------------
'---------------------------------------------------------------
Private Sub App_ProjectBeforeTaskChange(ByVal t As Task, ByVal Field As PjField, ByVal NewVal As Variant, Cancel As Boolean)
If (Field = pjTaskName) Then
If NewVal Like "*Anomalie*" Then
ActiveCell.CellColor = pjRed
Else
ActiveCell.CellColor = pjWhite
End If
End If
End Sub

Maintenant enregistrer le fichier, fermer MS Project et réouvrir MS Project et le projet en question. Ajouter une tâche contenant le mot “Anomalie” et regarder le résultat:


image

mardi 31 mai 2011

[DEV] Création d’un groupe dans Project Server

Dans cet article je vais vous expliquer comment créer simplement un nouveau groupe dans Project Server.

Dans un premier temps nous devons ajouter le web service de la gestion des groupes dans le projet:

http://MONSERVEUR/PWA/_vti_bin/PSI/Security.asmx

Ensuite nous allons initialiser le service et les autorisations, pour ce faire j’utilise une méthode que j’ai nommée “WS_InitiSecurity()”

Cette méthode est la suivante:

private void WS_InitiSecurity()
{
//Récupération de l'url du web service PSI Sécurité
String WS_SECURITY_Adress = Properties.Settings.Default.Url_PWA + "/_vti_bin/PSI/Security.asmx";
CredentialCache myCredentials = CredentialPSI(WS_SECURITY_Adress);
WS_Security = new WS_Security.Security();
WS_Security.CookieContainer = new CookieContainer();
WS_Security.Credentials = myCredentials;
WS_Security.Url = WS_SECURITY_Adress;
}



Maintenant créons notre méthode

public void CreateGroup(string grpName, string grpDesc)
{
...
}



Nous allons créer un DataSet dans le quel nous ajouterons notre groupe,

WS_Security.SecurityGroupsDataSet secuDs = new WS_Security.SecurityGroupsDataSet();
WS_Security.SecurityGroupsDataSet.SecurityGroupsRow groupRow =
secuDs.SecurityGroups.NewSecurityGroupsRow();



Ensuite nous allons donner les paramètres de base, Nom, Description

//Attribution des propriétés
groupRow.WSEC_GRP_DESC = grpDesc;
groupRow.WSEC_GRP_NAME = grpName;
groupRow.WSEC_GRP_UID = Guid.NewGuid();



Et pour finaliser nous allons enregistrer sur le serveur notre nouveau groupe.

//Ajout des paramètres dans le dataset (SecurityGroups)
secuDs.SecurityGroups.AddSecurityGroupsRow(groupRow);

//Création du groupe dans la base cible
WS_Security.CreateGroups(secuDs);



Et voilà, à vous la création de groupe.


Code complet,


 

        public void CreateGroup(string grpName, string grpDesc)
{
WS_InitiSecurity();

// Création du groupe
WS_Security.SecurityGroupsDataSet secuDs = new WS_Security.SecurityGroupsDataSet();
WS_Security.SecurityGroupsDataSet.SecurityGroupsRow groupRow =
secuDs.SecurityGroups.NewSecurityGroupsRow();

//Attribution des propriétés
groupRow.WSEC_GRP_DESC = grpDesc;
groupRow.WSEC_GRP_NAME = grpName;
groupRow.WSEC_GRP_UID = Guid.NewGuid();

//Ajout des paramètres dans le dataset (SecurityGroups)
secuDs.SecurityGroups.AddSecurityGroupsRow(groupRow);

//Création du groupe dans la base cible
WS_Security.CreateGroups(secuDs);
}

lundi 30 mai 2011

[DEV] Affecter un nouveau “Owner” à un projet avec les PSI

Dans cet article je vais vous montrer comment affecter un nouveau propriétaire à un projet. Nous allons donc créer une méthode appelée “AssignOwner”.

Nous devons également référencer le Web Service de PSI que nous avons besoin:

http://MONSERVEUR/SharedServices1/PSI/Project.asmx

Pour permettre de réutiliser ma méthode d’authentification j’ai créé une méthode nommée “WS_InitProject()” qui me permet d’initialiser mon service PSI:

/// <summary>
/// Initialisation du web service Project
/// </summary>
/// <param name="webServiceUrl"></param>
/// <param name="myCredentials"></param>
private void WS_InitProject()
{
//Récupération de l'url du web service PSI Sécurité
String WS_Project_Adress = "http://MONSERVEUR/SharedServices1/PSI/Project.asmx";

CredentialCache myCredentials = CredentialPSI(WS_Project_Adress);
svcProj = new WS_Project.Project();
svcProj.CookieContainer = new CookieContainer();
svcProj.Credentials = myCredentials;
svcProj.Url = WS_Project_Adress;
}



Dans cette méthode j’utilise une méthode nommé “CredentialPSI()” qui me permet de générer le credential du service Web.

private static CredentialCache CredentialPSI(String WS_SECURITY_Adress)
{
//Authentification sur le web service avec le compte
CredentialCache myCredentials = new CredentialCache();
myCredentials.Add(new Uri(WS_SECURITY_Adress), "NTLM", new NetworkCredential("Noham", "pass@word1", "SoDEMO"));
return myCredentials;
}



Maintenant que nous avons les éléments premier il nous reste à créer la méthode principale.

/// <summary>
/// Assignation d'un owner à un projet
/// </summary>
/// <param name="projectID">ID du projet dont on veut assigner un owner</param>
/// <param name="ownerID">ID de l'owner à assigner</param>
public void AssignOwner(Guid projectID, Guid ownerID)
{
}



Maintenant initialisons notre service:

WS_InitProject();

Puis appelons la méthode qui nous permet de renvoyer les informations du projet en passant en paramètre l’ID du projet et nous demandons de prendre le projet en publish.

// Récupère le projet passé en paramètre dans la base publish
dsProj = svcProj.ReadProject(projectID, PurgerCategories.WS_Project.DataStoreEnum.PublishedStore);

Maintenant initialisons nos GUID qui seront utilisés pour la publication des changements,

Guid sessionId = Guid.NewGuid();
Guid jobId = Guid.NewGuid();



En suite nous vérifions que le projet existe, et vérifions qu’il y a bien un projet:

  if (dsProj != null)
{
// Affectation de l'owner
if (dsProj.Project.Count > 0)
{


On extrait le projet,

//On extrait le project
if (CheckOutProject(projectID, sessionId, "Affect Owner"))
{



Ensuite c’est simple on attribut l’ID du nouveau “Owner” et on fait un chek-ou du projet et un publish.

//Affectation valeur
dsProj.Project[0].ProjectOwnerID = ownerID;

bool validateOnly = false;
//On archive le projet avec les dernières modifications
svcProj.QueueUpdateProject(jobId, sessionId, dsProj, validateOnly);

System.Threading.Thread.Sleep(4000);

svcProj.QueueCheckInProject(jobId, projectID, true, sessionId, "Affect Owner - Check-in");
svcProj.QueuePublish(Guid.NewGuid(), projectID, true, Properties.Settings.Default.PurgerCategories_Url_PWA);



Et voilà.


Code complet de la méthode

        /// <summary>
/// Assignation d'un owner à un projet
/// </summary>
/// <param name="projectID">ID du projet dont on veut assigner un owner</param>
/// <param name="ownerID">ID de l'owner à assigner</param>
public void AssignOwner(Guid projectID, Guid ownerID)
{
WS_InitProject();

Guid sessionId = Guid.NewGuid();
Guid jobId = Guid.NewGuid();

// Récupère le projet passé en paramètre dans la base publish
dsProj = svcProj.ReadProject(projectID, PurgerCategories.WS_Project.DataStoreEnum.PublishedStore);

if (dsProj != null)
{
// Affectation de l'owner
if (dsProj.Project.Count > 0)
{
//On extrait le project
if (CheckOutProject(projectID, sessionId, "Affect Owner"))
{
//Affectation valeur
dsProj.Project[0].ProjectOwnerID = ownerID;

bool validateOnly = false;
//On archive le projet avec les dernières modifications
svcProj.QueueUpdateProject(jobId, sessionId, dsProj, validateOnly);

System.Threading.Thread.Sleep(4000);

svcProj.QueueCheckInProject(jobId, projectID, true, sessionId, "Affect Owner - Check-in");
svcProj.QueuePublish(Guid.NewGuid(), projectID, true, Properties.Settings.Default.PurgerCategories_Url_PWA);
}
}
}
}

dimanche 29 mai 2011

[DEV] Supprimer une ou plusieurs catégories de Project Server avec les PSI

Dans cet article je vais vous montrer comment en développement .net nous pouvons très facilement supprimer une ou plusieurs catégories de PWA en utilisant les PSI de Project Server.
Tout d’abord il vous faut ajouter la référence au service web dans votre projet .Net, dans mon exemple j’ai pris l’adresse suivante : http://MONSERVEUR/PWA/_vti_bin/PSI/Security.asmx
Maintenant nous allons pouvoir créer notre méthode “DeleteCategories”:

/// <summary>
/// Suppression une catégories sur l'instance PWA spécifiée
/// </summary>
/// <param name="name"> Nom des catégories</param>
public void DeleteCategories(string[] NameCategories)
{
}

Maintenant j’ai pour habitude de redonner toujours l’adresse et l’authentification lors de l’appel au PSI, cela permet de modifier facilement si vous le mettez dans l’app.config.

//Récupération de l'url du web service PSI Sécurité
String WS_SECURITY_Adress  = "http://MONSERVEUR/PWA/_vti_bin/PSI/Security.asmx";

//Authentification sur le web service avec le compte
CredentialCache myCredentials = new CredentialCache();
myCredentials.Add(new Uri(WS_SECURITY_Adress), "NTLM", new NetworkCredential("Noham", "pass@word1", "SoDEMO"));

WS_Security = new Svc_Security.Security();
WS_Security.CookieContainer = new CookieContainer();
WS_Security.Credentials = myCredentials;
WS_Security.Url = WS_SECURITY_Adress;  

Maintenant que nous sommes authentifié sur le bon webservice nous allons appeler la méthode permettant de récupérer les catégories pour récupérer les GUID des catégories souhaitées.

//Récupération de la liste des catégories 
DS_Cat = WS_Security.ReadCategoryList();

Maintenant nous allons utiliser LINQ pour récupérer un Array de l’ensemble des GUID tes catégories que nous souhaitons supprimer.

//Création et remplissage d'une list des GUID de catégories
var list = (from search in DS_Cat.SecurityCategories.AsEnumerable()
where NameCategories.Contains(search["WSEC_CAT_NAME"].ToString()) 
select new Guid(search["WSEC_CAT_UID"].ToString())).ToArray();

Maintenant nous allons appeler la méthode de PSI permettant de supprimer une liste Array de catégories, cette liste ne doit contenir que des GUID.

//Suppression de l'ensemble des catégories contenues dans le tableau
WS_Security.DeleteCategories(list);

Code complet:

/// <summary>
/// Suppression une catégories sur l'instance PWA spécifiée
/// </summary>
/// <param name="name"> Nom des catégories</param>
public void DeleteCategories(string[]  NameCategories)
{
//Récupération de l'url du web service PSI Sécurité
String WS_SECURITY_Adress  = "http://MONSERVEUR/PWA/_vti_bin/PSI/Security.asmx";

//Authentification sur le web service avec le compte
CredentialCache myCredentials = new CredentialCache();
myCredentials.Add(new Uri(WS_SECURITY_Adress), "NTLM", new NetworkCredential("Noham", "pass@word1", "SoDEMO"));

WS_Security = new Svc_Security.Security();
WS_Security.CookieContainer = new CookieContainer();
WS_Security.Credentials = myCredentials;
WS_Security.Url = WS_SECURITY_Adress;  

//Récupération de la liste des catégories 
DS_Cat = WS_Security.ReadCategoryList();

//Création et remplissage d'une list des GUID de catégories
var list = (from search in DS_Cat.SecurityCategories.AsEnumerable()
where NameCategories.Contains(search["WSEC_CAT_NAME"].ToString()) 
select new Guid(search["WSEC_CAT_UID"].ToString())).ToArray();

//Suppression de l'ensemble des catégories contenues dans le tableau
WS_Security.DeleteCategories(list);

}

mardi 17 mai 2011

Service Pack 1 pour Project 2010 et Project Server 2010

Après plusieurs mois voici le SP1 de Project Server 2010 et MSProject, ce SP1 prend en compte tous les correctifs mais également certaine évolution dont une de taille coté navigation qui est le suport de plusieurs navigateurs.

Plus de possibilité également sur l'édition dans PWA des projets.

Bref je ne vais aps retranscrire les améliorations regarder sur le site officiel.

http://blogs.msdn.com/b/project/archive/2011/05/16/project-2010-sp1.aspx

Bonne mise à jour :)

mardi 19 avril 2011

jeudi 17 mars 2011

TechDays 2011

Voici la vidéo de ma session aux TechDays 2011, présentation du connecteur TFS 2010 <-> Project Server, session co-animé avec Nathalie Hesters.

Get Microsoft Silverlight


Implémenter Project Server 2010 avec les possibilités du client Project Web App, Par Nathalie Hesters (Microsoft), Vincent Capitaine (Teamsquare, MVP Microsoft Project) & Xavier Moquin (Bolloré Africa Logistics)

Get Microsoft Silverlight


Présentation et retours d’expérience sur Project 2010 client et serveur, par Nathalie Hesters (Microsoft), Xavier Trottin (Campana & Schott) & Trutz-Sebastian Stephani (Campana & Schott)

Get Microsoft Silverlight

dimanche 13 mars 2011

La BI dans Project Server 2010

Super vidéo de Franck Mercier, à voir absolument.

jeudi 24 février 2011

Calculer une durée cumulée des tâches

Pourquoi calculer une durée cumulée des tâches dans MS Project ? Tout simplement pour connaitre la durée total d’un projet :) dans le contexte où nous gérons un projet par la durée et non par la charge il n’ai pas possible sans un petit champ personnalisé.

Prenons comme exemple le petit projet suivant, la durée du projet est de 12 jours mais sa durée cumulée est de 26 jours.

image

Insérez une colonne de type « Durée 1 » et personnaliser le champ en créant la formule suivante :

Durée1 = [Durée]
Cocher "Report" et choisir "Somme":

image

mercredi 23 février 2011

Calculer le retard d'une tâche par rapport à la date d'état lorsque l'on saisi l'avancement

Pour permettre d’ajouter le retard d’une tache nous allons personnaliser un champ type "texte" d’un projet MS Project.

image

Dans ce champs nous allons saisir la formule suivante :

IIf([Durée restante]=0 Or [Stop]=ProjDateValue('NC'),0,ProjDateDiff([Stop],[Date d'état],"standard")/[Minutes par jour])

Attention : cette formule est valide pour un MS Project en version FR :)

Renommez ce champs “Retard avancement/Date d’état” ou tout autre nom vous permettant de vous y retrouver. Ajouter cette nouvelle colonne à votre vue par défaut, et si tout est bon vous devriez avoir quelque chose proche de l’image suivante :

image

Bon calcul,

vendredi 4 février 2011

Stpsoft Requirements Definer Add-in pour VISIO 2010

Dans ma recherche de gestion des exigences avec TFS (Team Foundation Server) j’ai trouvé un Add-In à MS VISIO 2010.

Il vous permet de modéliser sous forme de diagramme votre application, les exigences fonctionnelles de votre application. Il est assez facile, grâce à ce composant, de définir le besoin avec votre client. Une personne de ma société me disait qu’il n’était pas toujours simple pour le client de comprendre les spec (spécifications) fonctionnelles, et comprendre un graphique ?

Vous pouvez créer votre diagramme:

002

Pour chaque élément vous allez pouvoir définir le type de WI de chaque forme et cela grâce au ruban:

001

Pour chaque forme du diagramme vous pouvez par exemple définir un diagramme de séquence:

005 

Ce diagramme de séquence va être traduit en “Test case” et donc chaque étapes va être traduit en étape de tests.

Cette add-in permet également la génération intelligente de spec via Word.

Si nous allons un peu plus loin, en utilisant les autres avantages de MS VISIO 2010, par exemple l’utilisation de la liaison de données, nous allons pouvoir suivre l’avancement.

Créé un fichier Excel avec la liste des Workitems :

009

Dans VISIO créez la liaison :

010

Définissez les icones permettant de représenter l’état de la tâche:

011

NOTE : Cette liaison peut être effectuée avec la base de données directement !

L’effet final est super, avoir un Dashboard VISIO de surveillance et de pilotage de la réalisation de l’application.

012

Dans mon exemple j’ai :

  • Deux WI en état “Active”
  • Deux en état “Proposal”
  • Deux en état '”Resolved”

Je vous le conseil vivement.

Lien : http://www.stpsoft.co.uk/definer/index.html

Effectivement ce composant à un cout, mais je pense que le temps et la qualité que ce composant peut vous apporter mérite un petit investissement.

Pour plus d’information : choulant(@)gmail(.)com

Témoignage dans Programmez

Pour ceux qui ne l'on pas vu :) j'ai fait un petit témoignage sur TFS 2010 dans le magazine Programmez

lundi 31 janvier 2011

Les Tech-days c'est dans quelques jours

Les Tech-days c'est dans quelques jours. Comme je l'ai déjà annoncé, j'anime une Session aux Tech-days 2011 avec Nathalie Hesters.

Cette session se nomme "Intégrer Team Foundation Server et Project Server vous en rêviez ? Project l'a fait !  (PRO202)". Je vous invite à me rejoindre, l'année dernière j'avais présenté une session théorique il est maintenant tant de passer à la pratique. Durant cette session il y aura peu de blabla et beaucoup de démo. Les scénarios sont près comme vous le montre l'image ci-dessous.




Venez nombreux : http://www.microsoft.com/france/mstechdays/programmes/Session.aspx?CellID=7df954b4-b09a-4009-a825-c9d507e01eaf&DomID=2b8b5257-75a5-4d07-9b2f-173740e7f56b

L'avantage de passer en dernier la première journée c'est qu'à la suite de la session je serai disponible pour d'autre démonstration ou des Q&R, alors inscrivez vous.

lundi 17 janvier 2011

Synchroniser les projets d'équipe et les projets d'entreprise

Dans la gestion de la synchronisation de TFS et de PWA il est normalement obligatoire d'extraire le projet dans MS Project puis de le publier et enfin de le fermé pour que les éléments soit mis à jour dans PWA.

Il y a quelque temps j'avais développé un composant nommé UIPS2010 (http://code.msdn.microsoft.com/UIPS2010), ce composant s'ajout dans le ruban du centre des projets dans PWA et permet de mettre à jour les indicateurs sans devoir ouvrir et publier chaque projet.

Ce composant permet également de mettre à jour les projets quand des "User Story" sont ajout ou mis à jour dans TFS. Attention, il se peut que certaine informations ou calcule nécéssite tout de même une ouverture dans MS Project 2010.

Ajout d'une "User Story" :

 Visualisation du projet dans PWA avant mise à jour:

Sélection du projet à mettre à jour, puis cliquez sur le bouton dans le rubant:

 Après l'opération, la fenêtre vous informe de la mise à jour:

Vérification dans le détail du projet, la nouvelle tâche est bien présente:

Mise à jour du mapping entre PS2010 et TFS 2010

Toujours à la découverte du connecteur entre Project Server 2010 et Team Foundation Server 2010, je souhaite partager avec vous la personnalisation du mapping entre les deux outils.

Pour que ce connecteur puisse fonctionner il faut bien lui indiquer les éléments à prendre d'un côté et la destination de l'autre. Vous pouvez récupérer ce fichier avec la ligne suivante :

TfsAdmin ProjectServer /DonwloadFieldMappings /collection:tpcUrl /filePath:"C:\Mapping.XML"

Dedans figure des éléments indispensables au bon fonctionnement de l'outil comme le titre.

Ajouter la section suivante dans le fichier :


Il vous faut avoir créé le champs d'entreprise suivant "Area Project" avant de mettre à jour le fichier.
Dans ce nouvel élément vous définissez :
  • Le champ coté TFS : System.AreaPath
  • Le champ pour l'envoi : ProjectServerStatusQueue
  • Le champ pour le retour : ProjectServerPublished
Ce qui est super mise à part cette synchronisation, c'est que coté WI ce mapping se met automatiquement dans l'interface graphique.

samedi 8 janvier 2011

Initialisation de ma VM pour le connecteur PS2010 <-> TFS 2010

Je suis entrain de préparer ma VM pour le connecteur PS2010 <-> TFS2010, pour ce faire j’ai développé une application me permettant d’automatiser la création des collections de projets et les projets coté TFS 2010 et la création d’un instance de PWA coté Project Server.

image             image

Il me reste à terminer l’automatiser de la création des users.

Reste encore à automatiser le mapping du connecteur.

Pour info les log de mon application :

MSG    08/01/2011 18:34:34    Start configuration Demo:
MSG    08/01/2011 18:34:34    Deserialiez data xml
INF    08/01/2011 18:34:34    Get information for TFS Demo...
INF    08/01/2011 18:34:34    Get information for PWA Demo...
INF    08/01/2011 18:34:34    Delete PWA Instance -url "http://PS2010/PWATEST"
WAR    08/01/2011 18:34:34    New windows for command
INF    08/01/2011 18:34:48    Drop database PWA in PS2010\SharePoint
MSG    08/01/2011 18:34:48    Drop DB PWA_TEST_Publish
MSG    08/01/2011 18:34:49    Drop DB PWA_TEST_Reporting
MSG    08/01/2011 18:34:49    Drop DB PWA_TEST_Archive
MSG    08/01/2011 18:34:49    Drop DB PWA_TEST_Draft
INF    08/01/2011 18:34:49    Create PWA Instance -url "http://PS2010/PWATEST"
WAR    08/01/2011 18:34:49    New windows for command
INF    08/01/2011 18:39:01    Get list User Demo...
MSG    08/01/2011 18:39:01    Adding NT account : Noham Choulant2
WAR    08/01/2011 18:39:05    Delete user because existing
MSG    08/01/2011 18:39:05    Created NT Account : Noham Choulant2
MSG    08/01/2011 18:39:05    Add NT account in PWA
WAR    08/01/2011 18:39:05    New windows for command
MSG    08/01/2011 18:39:14    Added nchoulant2 in group Team Members
WAR    08/01/2011 18:39:14    New windows for command
INF    08/01/2011 18:39:15    Added NT account in PWA
MSG    08/01/2011 18:39:15    Adding NT account : Valerie Florence
WAR    08/01/2011 18:39:15    Delete user because existing
MSG    08/01/2011 18:39:15    Created NT Account : Valerie Florence
MSG    08/01/2011 18:39:15    Add NT account in PWA
WAR    08/01/2011 18:39:15    New windows for command
MSG    08/01/2011 18:39:19    Added vflorence in group Team Members
WAR    08/01/2011 18:39:19    New windows for command
INF    08/01/2011 18:39:20    Added NT account in PWA
MSG    08/01/2011 18:39:20    Adding NT account : Antonin Florence 2
WAR    08/01/2011 18:39:20    Delete user because existing
MSG    08/01/2011 18:39:20    Created NT Account : Antonin Florence 2
MSG    08/01/2011 18:39:20    Add NT account in PWA
WAR    08/01/2011 18:39:20    New windows for command
MSG    08/01/2011 18:39:24    Added aflorence2 in group Team Members
WAR    08/01/2011 18:39:24    New windows for command
INF    08/01/2011 18:39:25    Added NT account in PWA
INF    08/01/2011 18:39:25    Get information for collection projects Demo...
INF    08/01/2011 18:39:25    Create collection projets for TFS Demo :http://PS2010:8080/tfs...
WAR    08/01/2011 18:39:29    Delete existing collection projets :Collection_One_2...
WAR    08/01/2011 18:39:29    New windows for command
INF    08/01/2011 18:40:17    Create collection projets :Collection_One_2...
INF    08/01/2011 18:43:53    Map collection project with PWA
MSG    08/01/2011 18:43:53    Finish collection projets :Collection_One_2
INF    08/01/2011 18:43:53    Create projets in collection :Collection_One_2
INF    08/01/2011 18:43:53    Create projets :Agile Project
WAR    08/01/2011 18:43:53    New windows for command
INF    08/01/2011 18:45:03    Created projets :Agile Project
INF    08/01/2011 18:45:03    Create projets :CMMI Project
WAR    08/01/2011 18:45:03    New windows for command
INF    08/01/2011 18:46:43    Created projets :CMMI Project
WAR    08/01/2011 18:46:43    Delete existing collection projets :Collection_Two_2...
WAR    08/01/2011 18:46:44    New windows for command
INF    08/01/2011 18:47:11    Create collection projets :Collection_Two_2...
INF    08/01/2011 18:48:48    Map collection project with PWA
MSG    08/01/2011 18:48:48    Finish collection projets :Collection_Two_2
INF    08/01/2011 18:48:48    Create projets in collection :Collection_Two_2
INF    08/01/2011 18:48:48    Create projets :Agile Project 2
WAR    08/01/2011 18:48:48    New windows for command
INF    08/01/2011 18:49:50    Created projets :Agile Project 2
INF    08/01/2011 18:49:50    Create projets :CMMI Project 2
WAR    08/01/2011 18:49:50    New windows for command
INF    08/01/2011 18:50:59    Created projets :CMMI Project 2
INF    08/01/2011 18:50:59    Finish !!

Créer une instance de PWA avec Power Shell

 

Dans Project Server 2010 comme me l’a dit Christophe FIESSINGER (blog:http://blogs.msdn.com/b/chrisfie/) il faut vivre dans le future Sourire.

Donc je souhaite vous proposer une petite série de poste sur l’utilisation des cmdlet de Project Server 2010.

Certaines limites ne permettent pas encore de tout faire, comme la gestion des utilisateurs, des catégories ou encore des groupes.

Je vous propose de découper le post avec la présentation de l’outil “stsadm.exe” et la présentation des “cmdlet”.


Avec Stsadm.exe

Dans la version Project Server 2007 il fallait utiliser stsadm.exe présent dans le répertoire :

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN

Pour permettre la création d’une instance il vous faut utiliser l’option suivante:

-o projcreatepwainstance

Cette option à besoin d’un certain nombre d’option:

Option Description
-url Url souhaitée pour l’instance :http://PS2010/Pwa
-adminaccount Compte administrateur
-primarydbserver Serveur de la base de donnée
-publisheddbname Nom de la base de donnée Publish
-draftdbname Nom de la base de donnée Draft
-archivedbname Nom de la base de donnée Archive
-reportingdbserver Serveur de la base de donnée de reporting
-reportingdbname Nom de la base de donnée reporting
-wait Yes permet d’attendre la fin de création, si non No

Exemple :

stsadm -o projcreatepwainstance –url “http://ps2010/pwa” –adminaccount “PS2010\Administrateur” –primarydbserver “”PS2010 –publisheddbname “PWA_Publish” –draftdbname “PWA_Draft” –archivedbname “PWA_Archive” –reportingdbserver “PS2010” –reportingdbname “PWA_Reporting” -wait yes"


Avec les commandes Power Shell

Les paramètres sont identiques, seul la manière de les implémenter change. Deux solutions vont vous permettre d’exécuter les commandes, soit vous utilisez l’invite de commande “SharePoint 2010 Management Shell” situé dans le menu :

Démarrer –> Tous les programmes –> Microsoft SharePoint 2010 Products 

Soit en ouvrant l’invite de commande Power Shell situé soit dans votre menu :

Demarrer –> Tous les programmes –> Accessoires –> Windows PowerShell –> Windows PowerShell

Si vous choisissez cette méthode vous devez personnaliser votre profile Power Shell pour qu’il prenne en considération les commandes Project Server.

  • Créez un répertoire nommé “WindowsPowershell” dans “Document”
  • Créez un fichier nommé '”Profil.ps1”
  • Dans ce fichier inscrivez la ligne suivante “Add-PsSnapin Microsoft.SharePoint.PowerShell”
  • Enregistrez le fichier

Exemple :

New-SPProjectWebInstance -Url http://PS2010/pwa -AdminAccount "PS2010\Administrateur" -PrimaryDbserver "PS2010\SharePoint" -PublishedDbname "DEMO_ProjectServer_Published" -ArchiveDbname "DEMO_ProjectServer_Archive" -DraftDbname "DEMO_ProjectServer_Draft" -ReportingDbserver "PS2010\SharePoint" –ReportingDbname "DEMO_ProjectServer_Reporting" -Wait

Powershell