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);
}
}
}
}

Aucun commentaire: