vendredi 9 novembre 2012

Web Service RS : modifier des propriétés de rapports

A toujours faire des billets qui expliquent comment faire en sorte que les choses fonctionnent, j’ai envie d'en faire un pour expliquer comment elles ne fonctionnent pas : ça changera. Récemment, chez mon client préféré du moment, nous nous sommes aperçus que le format appliqué aux données dans nos rapports RS n'était pas le bon (date et chiffre au format anglais entre autre). Du coup, je décide de modifier les paramètres de région du serveur (mode bourrin) : surprise, ça ne fonctionne pas. J'ai tout essayé (enfin je crois) et je ne comprends pas pourquoi ça ne passe pas. Je ferai un autre billet sur ce point plus tard.


Il reste alors une solution : modifier la propriété Language de mes rapports. Problème, il y en a 800 éparpillés dans toute une arborescence bien complexe. Un ajout en masse de la balise Language dans le code XML du rapport ne pose pas de soucis, mais le déploiement sera fastidieux.
Du coup, sur les conseils éclairés d’un collègue (François pour ne pas le nommer) : on peut faire un truc sale qui consiste à modifier les paramètres du rapport à son lancement (en gros, écrire dans le XML). Chose facilité par le fait que l’exécution de ces 800 rapports est géré via du C#. Cool, une grosse partie du boulot est fait : on va utiliser les classes et méthodes du WSDL référencé dans le projet pour l’exécution des rapports. Ah, premier soucis, on utilise le Web Service ReportService2005 pour lequel je ne trouve pas de méthode de modification des paramètres d’un rapport. Un petit tour sur la MSDN (http://msdn.microsoft.com/en-us/library/ms155398.aspx et au passage il y a une erreur dedans, ce n’est pas le full path qui est nécessaire pour leurs méthodes, juste l’arborescence RS jusqu’au rapport) pour s’apercevoir qu’en fait, il existe trois Web Service différents. Super pratique d’en faire autant quand même !! Donc, celui qui permet de tout faire, sauf de l’exécution de rapport c’est ReportService2010. Je vous passe les classes et méthodes pour ne retenir que SetProperties() de ReportingService2010. On se fait une petite méthode de ce type :

private void ModifyProperty (string propertyName, string propertyValue, string reportPath)
        {
            Property[] props=new Property[1];
            Property setProp=new Property();

            setProp.Name=propertyName;
            setProp.Value=propertyValue;
            props[0]=setProp;
myReportingService2010.SetProperties(reportPath, props)
        }

On exécute et… on se rend compte que la propriété Language est Read-only. 

System.Web.Services.Protocols.SoapException: The property 'Language' is read-only and cannot be modified or deleted.

Pourquoi ? Bonne question, je n’ai pas trouvé de documentation, donc si vous en avez, je suis preneur. En tous cas, les prochains qui tenteront le coup sont maintenant prévenus (je vous rassure quand même elles ne sont pas toutes inaccessibles).

Aucun commentaire:

Enregistrer un commentaire