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

}

Aucun commentaire: