jeudi 10 octobre 2013

Gite à Colmar au cœur de la ville de Bartholdi

Je vous présente votre gite à Colmar si vous souhaitez passer des vacances en Alsace !!!

http://www.gite-reiset.com


Nous vous accueillons dans notre gite au cœur de Colmar tout au long de l'année.
Situation :
Le gîte Reiset, confortable et ré-équipé à neuf, est situé au 3 ème étage d'une copropriété datant du 19ème siècle. Il vous séduira par sa position géographique car il se trouve:
  • Au calme (rue piétonne)
  • En plein cœur du centre ville de Colmar, chargé d'Histoire.
  • Proche de toutes commodités (supermarché à 50 m, rue commerçante)
  • A 200 m du Musée Unterlinden et du Théatre
  • A 100 m de la bibliothèque de Colmar au cœur du Cloître des Dominicains
Lors des fêtes de fin d'année vous pourrez profiter pleinement du cadre chaleureux des 5 marchés de Noël dont 2 sont situés à moins de 400 mètres.
“Pour votre confort, nous vous proposons gratuitement un garage fermé à 2 min à pied du gîte.“
La vie dans la location :
Le gÎte profite d'une grande source de lumière avec la cuisine et la salle de bain orientée plein Est et le salon plein Ouest.
Aucun vis-à-vis, mais une vue sur les toits de Colmar et sur la Cathédrale, permettant ainsi le matin en été de prendre le petit déjeuner au chant des cigognes.
“A votre arrivée au gîte, vous trouverez un «panier de Bienvenue » pour déguster quelques spécialités alsaciennes.“

http://www.gite-reiset.com

lundi 21 janvier 2013

Récupérer le nom du PC managé par un utilisateur de l’AD en powershell

Voici un petit script permettant de récupérer par utilisateur le ou les pc managé par ce dernier.

Clear

$OUDomain = "OU=Utilisateurs,DC=CODAMA,DC=fr"
$users = Get-QADUser -searchRoot $OUDomain

foreach($user in $users)
{
    if($user.AccountIsDisabled -eq $false)
    {
        Write-host "----------------------------------------------------"
        Write-host "sAMAccountName :", $user.SamAccountName
        Write-host "User Name :", $user.name
        Write-host "Display name :", $user.displayname
        Write-host "Mail :", $user.mail
        $ListPC = Get-QADUser -SamAccountName $user.SamAccountName  -IncludeAllProperties
        if($ListPC.managedObjects -ne $null)
        {
            $DetailPC =  $ListPC.managedObjects
            if($DetailPC.GetType().Name -ne "String")
            {
                foreach($Detail in $DetailPC)
                {
                $infoAD = Get-QADComputer -SearchRoot $Detail
                Write-host "PC :", $infoAD.Name
                }
            }
            else
            {
                $infoAD = Get-QADComputer -SearchRoot $DetailPC
                Write-host "PC :", $infoAD.Name
            }
        }
       
        Write-host "----------------------------------------------------"
    }
}

mardi 8 janvier 2013

Récupérer la liste des fichier et la date de modification

Voici un petit script qui permet de récupérer la liste des fichiers ayant pour extension ".pdf"


$fichier = Get-Childitem -Path "c:\" –recurse
foreach($f in $fichier)
{
    if($f.VersionInfo.FileName -ne $Null)
    {
        if($f.extension -eq ".pdf")
        {
            $f.Name + " ;" + $f.LastWriteTime + ";" + $f.extension
        }
    }
}

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.