Récupérer la liste des espaces de travail

recupwsPour ce nouvel épisode de notre série sur l’utilisation des services Web dans Mezzoteam, nous allons apprendre comment récupérer la liste des espaces de travail de Mezzoteam auxquels l’utilisateur courant a accès. En effet, Mezzoteam fonde les principes de sa gestion de la sécurité et le calcul des droits des utilisateurs à l’intérieur d’un espace de travail. Toute action (récupération de liste de documents, création de document, attachement de fichiers, workflows…) s’effectue une fois que l’utilisateur a changé d’espace de travail et que Mezzoteam a pu calculer ses droits spécifiques.

La plupart clients riches Mezzoteam affichent donc, une fois la connexion établie, la liste des espaces de travail de l’utilisateur, afin que celui-ci puisse ensuite naviguer vers l’espace de travail souhaité.

Pour cet exercice, nous allons partir de l’exemple que nous avions créé à l’épisode précédent. Comme nous l’avions vu alors, après la connexion de l’utilisateur, Mezzoteam calcule une clé de session (SessionKey) qui va nous servir pour identifier la session de l’utilisateur courant dans toutes ses actions sur Mezzoteam.

Nous allons utiliser cette clé de session pour initialiser un nouveau service web, le service directory.

Le service web Directory
Le service web Directory permet au développeur de manipuler les objets suivants dans Mezzoteam :

  • Espace de travail (objet Worksapce)
  • Utilisateur (objet User)
  • Groupe (objet Group)
  • Organisation (objet Organization)

Pour chacun de ces objets, on trouve des méthodes pour en récupérer la liste, créer de nouveaux objets, en supprimer, etc.

Créons donc notre nouveau service web :

// Création d'un objet Directory
directory myDirectoryWs = new directory();

// On passe la clé de sécurité calculée lors de la connexion
myDirectoryWs.CredentialSoapHeaderValue = new CredentialSoapHeader();
myDirectoryWs.CredentialSoapHeaderValue.SecurityKey = myLogon.SecurityKey;

Pour récupérer la liste des espaces de travail, nous utiliserons la méthode WorkspaceGetList, qui récupère la collection d’espaces de travail de l’utilisateur dont on passe l’identifiant en paramètre.

// Création d'un objet Workspace[] pour récupérer la liste des espaces de travail
Workspace[] myWorkspaceList;
// La méthode de récupération de la liste des espaces de travail prend comme paramètre
// le login de l'utilisateur
myWorkspaceList = myDirectoryWs.WorkspaceGetList(myDirectoryWs.UserGetFromLogin(textBox1.Text));

Il existe d’autres méthodes pour récupérer une liste d’espaces de travail, et en particulier des méthodes retournant des objets DataSet plutôt qu’une collection d’objets Workspace. Ces méthodes sont à priori moins coûteuses lors de l’exécution, et ej vous encourage à les utiliser plutôt que celles qui retournent les objets métier de Mezzoteam. Néanmoins, pour ce premier exemple, nous irons à la facilité !

Nous afficherons ensuite certaines des propriétés des epsaces de travail sur les 5 premiers espaces de travail de l’utilisateur, en procédant de la manière suivante :

// On calcule le nombre d'espaces de travail récupérés
int rowCount = myWorkspaceList.Count();
// On limite a au plus 5
if (rowCount > 5)
{
rowCount = 5;
}
// On affiche les informations de titre et de volume des 5 premiers
// espaces de travail
for (int iCounter = 0; iCounter < rowCount - 1; iCounter++)
{
MessageBox.Show("Titre : " + myWorkspaceList[iCounter].Title + " Volume de fichiers :" + myWorkspaceList[iCounter].TotalFileSize.ToString());
}

Je vous encourage à explorer les propriétés d’un espace de travail en utilisant le mode pas à pas de Visual Studio. Dans le prochain épisode, nous verrons comment naviguer vers un espace de travail, et en récupérer la liste des documents.

Le code de cet épisode est disponible ici.

5 réponses
  1. BEN
    BEN dit :

    Encore une question :

    Comment afficher à l’utilisateur un comboBox contenant les documents d’une vue ?
    Explication :
    J’ai un champ de type Document dont les valeurs sont dans une vue personnalisée ‘Partenaires’.
    Via WebServices, je suis arrivé à l’étape de recherche de la vue :

    DocumentsWebReference.documents adoc = new DocumentsWebReference.documents();
    adoc.CredentialSoapHeaderValue =
    new DocumentsWebReference.CredentialSoapHeader();
    adoc.CredentialSoapHeaderValue.SecurityKey = _securityKey;
    adoc.Url = « monurlServices »;
    View v = adoc.ViewGet(dataSource.Parameters);

    C’est la bonne vue, mais comment récupérer une liste des documents de cette vue ?

    Merci d’avance.

    Répondre
  2. BEN
    BEN dit :

    J’ai l’impression que l’on ne peut pas récupérer la liste des « Organisation » d’un espace de travail !!
    La fonction suivante retourne tous les groupes d’utilisateurs non seulement les Organisations !!
    Group[] groups = dir.GroupGetList(_currentWorkspaceId, GroupTypes.StandardOrganization);

    Comment dois-je procéder pour ce faire ?
    Par ailleurs, une 2ème question :
    Est-il possible de récupérer « automatiquement » la liste des groupes auxquels appartient un utilisateur ?
    Merci d’avance.
    BB.

    Répondre
  3. Emmanuel Netter
    Emmanuel Netter dit :

    Il suffit d’utiliser la propriété URL des services web de Mezzoteam. Vous modifiez le code de la manière suivante :

    string baseWsURL = « http://www.monserveur.fr/ws/ »;
    security mySecurityWs = new security();
    mySecurityWs.Url = baseWsURL + « security.asmx »;

    Vous faites la même chose lors de la déclaration de chaque web service (ci-dessus myDirectoryWs) ; évidemment, dans une appli en prod, vous mettrez baseWsUrl en préférences, modifiable par l’utilisateur…

    Répondre
  4. BEN
    BEN dit :

    Bonjour,

    Je voudrais récupérer la liste des « workspaces » d’un utilisateur mezzoteam sur un site mezzoteam « interne » (de test). Je me suis servi de votre code. Cela marche seulement si le site est http://www.mezzoteam.com et ça ne marche pas avec notre site à nous.
    J’ai une exception SoapException ‘UNKNOWN_SESSION’ avec la ligne de code :
    userworkspaces = myDirectoryWs.WorkspaceGetList(myDirectoryWs.UserGetFromLogin(login));

    Que dois-je faire ?
    Merci d’avance.

    Répondre

Répondre

Se joindre à la discussion ?
Vous êtes libre de contribuer !

Répondre à Emmanuel Netter Annuler la réponse

Votre adresse e-mail ne sera pas publiée.