dimanche 14 novembre 2010

PSI : Récupérer la liste des feuilles temps de Project Server 2010

Dans cette article je vais m’efforcer de vous présenter les possibilités de connexion à Project Server 2010 avec les web service (.asmx) afin de récupérer les feuilles de temps.

Dans un premier temps il faut ce connecter à Project Server, pour ce faire j’utilise la DLL “ProjectServerServices.dll” vous trouverez à cette adresse la méthode de génération (http://msdn.microsoft.com/en-us/library/aa568853.aspx)

Une fois cette DLL générée il est possible de ce connecter à n’importe quel instance de PWA car pour la connexion nous personnaliserons l’adresse des Web Service.

SvcTimeSheet _TimeSheetClient = new SvcTimeSheet.TimeSheetClient(GetBinding(),new EndpointAddress(“http://project.contoso.com/pwa”));
_TimeSheetClient.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
_TimeSheetClient.ChannelFactory.Credentials.Windows.ClientCredential =
                    new System.Net.NetworkCredential(“adamb”, “pass@word1”, “Contoso”);

La méthode GetBinding() me permet de générer le protocole de communication :

private static BasicHttpBinding GetBinding()
{
BasicHttpBinding basicHttpBinding = new BasicHttpBinding();
basicHttpBinding.MaxBufferPoolSize = 50000000;
basicHttpBinding.MaxBufferSize = 50000000;
basicHttpBinding.MaxReceivedMessageSize = 50000000;
basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
return basicHttpBinding;
}

Ensuite vous pouvez utiliser la méthode “ReadTimesheetList” de l’objet _TimeSheetClient pour récupérer une liste de feuille de temps pour une ressource donnée et dans un temps donnée.

TimesheetListDataSet ds = _TimeSheetClient.ReadTimesheetList(ressource.Guid, this.Start, DateTime.Now, 31);

L’élément 31 permet de récupérer toutes les feuilles de temps, vous avez d’autre options:

  • 1 : Permet de sélectionner les feuilles de temps avec le statut “En progression”.
  • 2. Permet de sélectionner les feuilles de temps avec le statut “Envoyé”.
  • 4 : Permet de sélectionner les feuilles de temps avec le statut “Accepté”
  • 8. Permet de sélectionner les feuilles de temps avec le statut “Approuvé”
  • 16. Permet de sélectionner les feuilles de temps avec le statut “Rejeté”
  • 32 : Sélectionner l'ensemble des feuilles de temps, plus un dossier vide pour chaque période sans feuille de temps.
  • 64. Permet de sélectionner les feuilles de temps créé par l’utilisateur connecté

Ensuite pour chaque ligne dans la feuille de temps il est possible de récupérer les informations:

TimesheetDataSet tds = _TimeSheetClient.ReadTimesheet(TimeSheet.Guid));
foreach (var item in tds.Lines)
{
    line.Guid = item.TS_LINE_UID.ToString();
    line.Name = item[8].ToString(); // Nom de la tâche
    line.Project = item[9].ToString(); // Nom du projet au quel est rattaché la tâches
}

Voici les autres informations possible pour une ligne :

  • TS_LINE_UID
  • TS_UID
  • ASSN_UID
  • TASK_UID
  • PROJ_UID
  • TS_LINE_CLASS_UID
  • TS_LINE_COMMENT
  • TS_LINE_VALIDATION_TYPE
  • TS_LINE_CACHED_ASSIGN_NAME
  • TS_LINE_CACHED_PROJ_NAME
  • TS_LINE_CACHED_PROJ_REVISION_COUNTER
  • TS_LINE_CACHED_PROJ_REVISION_RANK
  • TS_LINE_IS_CACHED
  • TS_LINE_ACT_SUM_VALUE
  • TS_LINE_STATUS
  • TS_LINE_TASK_HIERARCHY
  • TS_LINE_CLASS_NAME
  • TS_LINE_CLASS_NEED_APPROVAL
  • TS_LINE_CLASS_TYPE

Je suis sur un projet dont voici une première capture :

image

1 commentaire:

soget a dit…

Bonjour Noham,
Merci beaucoup pour ton partage .
Mais j'ai une erreur lors de la connection .
J'ai un message du type : {"La demande HTTP n’est pas autorisée avec un modèle d’authentification client « Anonymous ». L’en-tête d’authentification reçu du serveur était « NTLM »."}
J'ai bien utilisé ta méthode "basicHttpBinding" avec NTML . J'ai utilisé exactement tout ton code mais cela ne fonctionne pas .
Si tu as une idée.
Merci d'avance
Paul