Il est possible de récupérer les informations de MDS de différentes manières : Portail Web, Excel, requêter les vues en base de données et par Web service.
Sur ce post, nous allons voir comment consommer le Web service que Microsoft nous met à disposition sur MDS.
Activation des Web services
Par défaut, les Web services de MDS sont désactivés. Pour les activer, il faut modifier le fichier Web.config du site Web MDS :
- Aller dans le répertoire du site MDS
- Ouvrir le fichier Web.config
- Rechercher l’élément contenant mdsWsHttpBehavior
- Sous celui-ci, passer l’attribut httpGetEnabled à true si vous être en HTTP. Si vous êtes en HTTPS, c’est l’attribut httpsGetEnabled qu’il faut passer à true
Construction de la requête
Dans un premier temps, il faut ajouter une référence au web service en utilisant l’URL suivante : https://serveur:port/chemin-d’accès-virtuel/service/service.svc
Nous allons maintenant construire une requête pour récupérer les éléments d’une entité. Pour cela, nous allons utiliser la méthode EntityMembersGet
//Création de l'objet contenant les critères de recherche MDSServiceReference.EntityMembersGetCriteria criteria = new MDSServiceReference.EntityMembersGetCriteria() { EntityId = new MDSServiceReference.Identifier() { Name = "MyEntity" }, ModelId = new MDSServiceReference.Identifier() { Name = "MyModel" }, VersionId = new MDSServiceReference.Identifier() { Name = "MyVersion" }, MemberReturnOption = MDSServiceReference.MemberReturnOption.DataAndCounts }; MDSServiceReference.EntityMembersInformation information = null; MDSServiceReference.OperationResult result = null; //Connexion au web service en précisant le Endpoint paramétré dans le fichier de configuration MDSServiceReference.ServiceClient client = new MDSServiceReference.ServiceClient("MDS_Endpoint"); client.Open(); MDSServiceReference.EntityMembers members = client.EntityMembersGet( null, criteria, out information, out result); client.Close(); //On vérifie s'il y a des erreurs dans le retour du web service if (result.Errors != null && result.Errors.Length > 0) { Console.WriteLine(result.Errors[0].Description); } else { //On parcourt chaque membre trouvé sur l'entité foreach (MDSServiceReference.Member member in members.Members) { //On récupère le code et le libellé Console.WriteLine(string.Format("Code : {0} --- Libellé : {1}", member.MemberId.Code, member.MemberId.Name)); //On récupère les autres attributs foreach (MDSServiceReference.Attribute attribute in members.Members[0].Attributes) { Console.Write(string.Format("{0} : {1} --- ", attribute.Identifier.Name, attribute.Value)); } Console.WriteLine(); } } Console.ReadKey();
Attention de bien préciser l’attribut MemberReturnOption
, sinon l’objet retourné ne contiendra que les propriétés de l’entité mais pas ses membres.
La méthode EntityMembersGet
prend les arguments suivants :
International
: contient les informations de culture. Peut être nullMembersGetCriteria
: contient les critères de recherche.EntityMembersInformation
: paramètre de sortie qui contient les informations de l’entité. On peut retrouver par exemple, l’indentifiant technique de l’entité.OperationResult
: paramètre de sortie qui contient le résultat de la requête et éventuellement l’erreur.
Pagination des résultats
Si la quantité de ligne retournée est trop grande, il se peut que le web service renvoie une erreur. Dans ce cas, il faut paginer le résultat. Pour cela, on va préciser les PageNumber
et PageSize
de l’objet EntityMembersGetCriteria
:
//Création de l'objet contenant les critères de recherche MDSServiceReference.EntityMembersGetCriteria criteria = new MDSServiceReference.EntityMembersGetCriteria() { EntityId = new MDSServiceReference.Identifier() { Name = "MyEntity" }, ModelId = new MDSServiceReference.Identifier() { Name = "MyModel" }, VersionId = new MDSServiceReference.Identifier() { Name = "MyVersion" }, MemberReturnOption = MDSServiceReference.MemberReturnOption.DataAndCounts, PageNumber = 0, PageSize = 20 }; MDSServiceReference.EntityMembersInformation information = null; MDSServiceReference.OperationResult result = null; //Connexion au web service en précisant le Endpoint paramétré dans le fichier de configuration MDSServiceReference.ServiceClient client = new MDSServiceReference.ServiceClient("MDS_Endpoint"); client.Open(); MDSServiceReference.EntityMembers members = null; do { members = client.EntityMembersGet(null, criteria, out information, out result); } while ((criteria.PageNumber++)<information.TotalPages); client.Close();
Grâce au paramètre de sortie EntityMembersInformation
, on peut connaître le nombre total de membre et le nombre de page. Ainsi, on peut récupérer tous les membres en bouclant sur chaque page.
Annexe
Activation du web service MDS : https://technet.microsoft.com/fr-fr/library/ff486972(v=sql.105).aspx
Description du web service : https://msdn.microsoft.com/en-us/library/microsoft.masterdataservices.aspx
0 commentaires