Decideo - Actualités sur le Big Data, Business Intelligence, Data Science

Abonnez-vous gratuitement à Decideo !


Decideo


 
Forums, dernières contributions

Changer la formule d'une variable Webi via le sdk

 Fabien
Jeudi 9 Octobre 2008

Version imprimable
[Ignorer]
Bonjour,

J'aimerais savoir s'il est possible de modifier la formule d'une variable Webi via le SDK BO.
En fait j'ai un grand nombre de rapports qui ont la même variable (même nom) mais dont la formule varie. Je voudrais avoir la même formule pour tous les rapports.
Je pensais donc faire un script BO SDK qui ouvre tous les rapports un à un et qui modifie la formule de cette variable.
Est ce que c'est possible ? Et si oui quelles sont les sdk BO à utiliser (les librairies) ?

Merci pour votre aide

Fabien
 Loïc Baspin
Vendredi 10 Octobre 2008

Version imprimable
[Ignorer]
Salut Fabien,

oui c'est tout à fait possible.Il te faut donc le BOE SDK (pour se connecter) et le ReportEngine SDK (pour modifier les rapports).
Je n'ai plus les codes développés sous la main pour te dire exactement les librairies nécessaires, mais en fouillant dans ces 2 SDKs tu trouveras ton bonheur.
PS : Si Joël passe par là, il te dira (presque) tout cela de tête ;-)


Loïc Baspin
Consultant Décisionnel
Advanced-Schema
 fabien
Vendredi 10 Octobre 2008

Version imprimable
[Ignorer]
Salut Loic,

Je viens de regarder l'object model du reportengine SDK et effectivement il doit falloire faire un documentInstance.getDictionnary();
On obtient un objet de type ReportDictionnary à partir duquel on peut récupérer les variables du doc.

Maitenant je me demande comment exécuter mon script. En fait j'ai lu sur le site BO qu' apparement il ne support que le jsp. Il n'est pas possible de faire ce script en java ?
Je continue à chercher de mon côté :-)

Fabien
 Joel Da Costa
Vendredi 10 Octobre 2008

Version imprimable
[Ignorer]
Salut Loic et Fabien,

En effet avec le dictionnaire d'un report on a la liste des variables qu'on peut modifier, après c'est du texte (juste attention au parsing lors du setValue qui peut renvoyer une exception si la formule est fausse).

Sinon tu peux tout a fait faire un programe java normal pour exécuter ton script, c'est toujours ainsi que j'ai fait.
Il suffit de faire un programme java de base (en ligne de commande) un bon vieux main et hop tu crée ta connexion, tu récupère les report engines, la liste de tes docs, tu boucles et tu ouvres objet par objet.

Par contre penses bien a fermer tes documents à la fin de chaque traitement, sinon ton serveur BOE va vite tomber (vu que tu dois avoir dans les 400 rapports a traiter :D )

Il faut juste que dans ton prog java sous eclipse tu aie pensé a bien importer les jar nécéssaires.

Mais tu as l'air en bonne voie en tout cas, dans ton contexte je pense que tu vas très vite apprendre le SDK BOE sur le bout des doigts.

A+
Joël
 Joel Da Costa
Vendredi 10 Octobre 2008

Version imprimable
[Ignorer]
PS fabien, Loic connait bien aussi ton contexte, il avait bossé avec moi sur une partie du sujet :D
 fabien
Lundi 13 Octobre 2008

Version imprimable
[Ignorer]
Salut Joel et Loic,

Donc ca y est j'ai un code java qui tourne et qui me permet de changer la formule d'une variable dans tous mes docs.
Par contre chose bizarre lorsque j'essaye de modifier l'Orientation d'un rapport en passant de portrait à paysage la modification n'est pas prise ne compte;

Voila le code que j'utilise

IInfoObject iObj = (IInfoObject) webiDocuments.get(j);
docInst = reportEngine.openDocument(iObj.getID());

ReportElementContainer reportStructure = docInst.getStructure();
ReportContainer report = (ReportContainer) reportStructure.getReportElement(0);
report.getPageInfo().setOrientation(Orientation.LANDSCAPE);

docInst.save();
docInst.closeDocument();


Tant que je n'ai pas fermé le doc et que je fais un report.getPageInfo().getOrientation() celui ci me renvoie bien la valeur LANDSCAPE.
Si je réouvre le doc en utilisant le SDK je vois que le modif n'est pas prise en compte.

C'est comme si la méthode save() n'enregistrait pas la modification(alors que pour le formule de la variable cela fonctionne)

Ca vous dis quelque chose ??

Fabien

 Joel Da Costa
Lundi 13 Octobre 2008

Version imprimable
[Ignorer]
Bonjour fabien,

Quand on touche à la mise en forme en SDK il ne faut pas oublier d'appliquer les modifs avant de sauvegarder, sinon c'est perdu en effet.

donc il te manque un docInst.applyFormat(); juste avant ton save.

Joël
 fabien
Mardi 14 Octobre 2008

Version imprimable
[Ignorer]
Merci Joël.
Effectivement ca marche mieux après un applyFormat() :-)

Fabien
 gaston
Mercredi 17 Décembre 2008

Version imprimable
[Ignorer]
Bonjour,

Je travaille dans la même optique que Fabien : ouvrir les docs 1 par 1 pour scanner leur contenu. Je travaille avec un code java coté client (cf Joel da costa) et non jsp, car je ne peux travailler sur le serveur...Avec le code java suivant qui me semble ok, j'ai un plantage (compilation ok! execution ko!) à la ligne suivante :

DocumentInstance boDocumentInstance = webiReportEngine.openDocument(infoObject.getID());

Le message d'erreur est : 'Exception occured : com.businessobjects.rebean.wi.CommunicationException: Impossible dinitialiser le serveur du moteur de rapports. (Erreur : RWI 00226)'
Si je retire di code la section 'Traitement d'un document donné', le code s'execute sans pb!
Quelqu'un a t il une idée du pourquoi ? est un pb de version de jsdk (je compile avec j2sdk1.4.2_08)?

Merci,
Gaston




IEnterpriseSession enterpriseSession = null;

String sUserName = *****;
String sUserPass = ******;
String sCMSName = *****';
String sAuthType = 'secEnterprise';
String webiDocName = '_tata';

////Connexion à WebIntelligence
ISessionMgr sessionMgradmin = CrystalEnterprise.getSessionMgr();
//System.out.println('sessionMgradmin : ' + sessionMgradmin);
enterpriseSession = sessionMgradmin.logon(sUserName, sUserPass, sCMSName, sAuthType);
//System.out.println('enterprise session : ' + enterpriseSession);

////Requete sur l'Infostore
IInfoStore iStore = (IInfoStore)enterpriseSession.getService('InfoStore');
String boQuery = 'SELECT * FROM CI_INFOOBJECTS WHERE SI_KIND= 'Webi' AND SI_INSTANCE=0 AND SI_NAME='' + webiDocName + ''';
IInfoObjects boInfoObjects = iStore.query(boQuery);
IInfoObject infoObject = (IInfoObject) boInfoObjects.get(0);
int docID = infoObject.getID();
String docType = infoObject.getKind();
System.out.println('Document: ' + 'Type=' + docType + ' ' + 'ID='+ String.valueOf(docID));

////Instanciation du report engine approprié
ReportEngines RepEngines = (ReportEngines) enterpriseSession.getService('ReportEngines');
ReportEngine webiReportEngine = RepEngines.getService(ReportEngines.ReportEngineType.WI_REPORT_ENGINE);
//ReportEngine fcReportEngine = RepEngines.getService(ReportEngines.ReportEngineType.FC_REPORT_ENGINE);

////Traitement d'un document donné
DocumentInstance boDocumentInstance = webiReportEngine.openDocument(infoObject.getID());
//DocumentInstance boDocumentInstance = webiReportEngine.openDocument(docID);
boDocumentInstance.closeDocument();
boDocumentInstance = null;

////Fermeture du reportengine
webiReportEngine.close();
webiReportEngine = null;

////Déconnexion de WebIntelligence
enterpriseSession.logoff();
enterpriseSession = null;
 Joel Da Costa
Jeudi 18 Décembre 2008

Version imprimable
[Ignorer]
Bonjour,

Et en passant par l'infoview en direct, le rapport en question s'ouvre bien , on peut le modifier ?

Car en regardant le code rapidement j'ai pas vu d'erreur notoire, donc peux être que tout simplement votre WIReportServer est en vrac.

Autre chose, les jar que vous avez importé dans votre projet correspondent bien à exactement la même version que votre serveur (même version de SP et de FP) ?

Cordialement,
Joël Da Costa
 gaston
Jeudi 18 Décembre 2008

Version imprimable
[Ignorer]
Bonjour Joël,

Merci pour ton éclairage.
Le rapport s'ouvre bien dans infoview et on peut le modifier. C'est un rapport banalissime avec un seul objet(!), construit exprès pour tester mon code Java (puis généraliser). Je suis en XIR2 Sp2 coté client et serveur. Même erreur en copiant coté client les jar du serveur qui sont dans Business Objectscommon3.5javalib.
Je ne comprend pas pourquoi, je ne peux piloter le WIReportServer avec les api fournies alors que ce dernier fonctionne bien quand je manipule le rapport en interactif ... les joies de BOBJ.
Bon, je continue mes recherches.

cdt,
Gaston


Twitter
Rss
LinkedIn
Facebook
Apple Podcast
App Store
Google Play Store