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 :
1 commentaire:
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
Enregistrer un commentaire