|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : avril 2008 Messages : 36 ![]() |
Bonjour à tous,
Voilà, je souhaite utiliser la possibilité d'exporter un programme JAVA sur le référentiel. Sachant que le programme doit pouvoir :
QuestionS : Quel SDK utiliser ? Quelle variables d'environnement je dois fixer ? (s'il y a lieu) Est-ce que quelqu'un peut me donner une trame d'application, peu importe l'appli, mais que je puisse m'appuyer dessus. J'ai beau avoir lu la doc, je galère un peu... Le tout étant orienté web... http://devlibrary.businessobjects.co...n/devsuite.htm Merci !! ___________________ Après quelques jours de recherches et de boulot (et oui je ne sis pas expert BO..) j'ai enfin réussi ce que je voulais. ![]() Consulter le 5ème post
|
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : avril 2008 Messages : 36 ![]() |
Merci
Mais ça m'a l'air assez spécifique. Néanmoins j'ai finalement réussi à faire ce que je voulais (du moins je commence), une fois que j'aurais fini, je posterais le source commenté et j'expliquerai les fondements, vu que le forum n'en parle pas... Je dois bien ça aux participants du forum
|
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : septembre 2004 Messages : 33 ![]() |
Salut,
le post que tu viens de lancer me passionne aussi et tu viens de me faire découvrir cette possibilité. En attendant ton code pour voir l'application je vais me plonger dans les 2 liens qui ont été fourni. merci à vous |
|
|
00
|
|
|
#5 | ||||||||||||||||||||||||||||||
|
Invité régulier
![]() Inscription : avril 2008 Messages : 36 ![]() |
Bonjour à tous,
Me voilà donc tout content. Je vais donc comme dit plus haut expliquer comment structurer un programme JAVA qu'on souhaite faire exécuter par BO (et donc panifiable), et au passage faire quelques interactions avec le référentiel. Comprenez bien, il ne s'agit en aucun cas d'une appli web en JSP, mais bien d'un programme codé en JAVA que j'exporte sur le référentiel depuis la CMC : Objets -> Nouvel Objet -> Programme -> Type de programme : JAVA. Commençons par le commencement : J'avais besoin de :
Je pars donc d'un rapport DesktopIntelligence de base (un fichier .rep) ayant une invite : un numéro de demande (Je fais toute cette moulinette car je n'ai pas le choix...) Il faut dans un premier temps exporter le rapport qu'on souhaite actualiser sur le référentiel, celui-ci ce nomme ici "Bilan_Activité_Service". Une fois fait on peut se lancer dans la programmation JAVA en partant du principe que la procédure stockée est déjà codée et présente sur le serveur Oracle. J 'ai utilisé Eclipse pour faire le tout, utilisez ce que vous voulez... Créer donc un nouveau projet sans oublier de préciser l'utilisation de JAVA 1.4.2 (dans le cas de BO Xi SP2) : Lors de la définition du projet : Utiliser une compatibilité propre au projet : 1.4 Intégrer ensuite le JRE 1.4.2 au projet afin d'avoir l'auto-complétion. Faites de même avec les fichier JARs du dossier C:\Program Files\Business Objects\common\3.5\java\lib en utilisant ajouter des fichiers JAR externes. Cela permet d'avoir également une assistance lors de la programmation. Tous les fichiers ne sont évidemment pas utilisé, mais j'ai vu large... et cela n'a pas posé de problème. Créer ensuite un nouveau fichier dans votre projet : une classe Et là je vais paraître bourrin mais voilà le code source que je commente : Les importations nécessaires, je ne m'attarde pas dessus si vous êtes déjà perdu abandonnez.... Code :
Nom de la classe à préciser lors de la planification Processus -> Paramètres -> Classe a exécuter (ici Bas) La classe doit implémenter l'interface IProgramBase, ainsi le Program Job Server (en charge d'exécuter les programmes exportés sur le référentiel) pourra faire son boulot... Code :
Les parametres sont passés par le Program Job server :
Code :
Les vérifications pourraient être améliorées.... Code :
![]() Comme je l'ai expliqué je souhaitait lancer des requêtes et exécuter une procédure, le tout étant stockées sur une base de donnée, qui est en réalité la même que celle utilisée par BO, mais l'implémentation qui suit fonctionnerait pour n'importe quelle base de données auquel le serveur BO peut avoir accès. La base en question est sur un serveur Oracle. J'avais alors besoin de l'implémentation du driver permettant l'accès au serveur. Le fichier étant une bibliothèque sous forme de .jar. Sachez que vous devez rajouter ces nouvelles bibliothèques dans le répertoire : C:\Program Files\Business Objects\common\3.5\java\lib C'est dans ce répertoire que le Program Job Server va taper pour chercher les .class nécessaire à l'exécution du JAVA Code :
A présent quelques interactions avec BO ![]() Code :
Code :
Code :
Pourquoi : Les rapports que je rafraîchi concernent un et un seul service. Néanmoins l'utilisateur pourra par les arguments créer les instances de rapport pour plusieurs services. Par exemple pour avoir un rapport sur les activités des services 0800 4000 et 6700 entre le 1er janvier 07 et le 31 décembre 07 on tapera : 01/01/2007 31/12/2007 0800;4000;6700 Vous l'avez peut être compris précédemment j'extrais les numéros de services dans un tableau. Je boucle donc pour créer un rapport par service. Code :
J'appelle à présent la procédure PL/SQL Code :
Elle met environ 5 minutes à s'exécuter. Durant cette période la procédure garde la main. A présent que du lourd ![]() Le rapport Deski de base (qui n'est donc pas une instance) est donc sur le référentiel, celui-ci étant nommé Bilan_Activité_Service Code :
La classe correspondante est IFullClient. Code :
Il faut maintenant que je fixe l'invite comme je le souhaite. Donc je la récupère pour affichage test puis je la fixe. Code :
Maintenant nous allons planifier le rafraîchissement du rapport. Planifier n'est pas vraiment le bon mot... En fait l'utilisateur au lieu de planifier le rafraîchissement du rapport planifiera le lancement du programme JAVA. C'est pourquoi les paramètres de planification qui suivent font en sorte de lancer la création de l'instance lorsque le programme JAVA est lancé Code :
Ici une petite méthode que j'avais mis en place pour afficher des infos sur un rapport Deski. (Plus trop utile) Code :
Comme vous avez pu le voir, j'ai tracé le code comme un taré grâce à des System.out..... cela permet de repérer où cela plante (ben oui l'utilisateur est bête.... il arrivera à faire planter le tout...) Ces affichages seront lisibles dans l'instance du programme JAVA créée sur le référentiel. Le rapport sera consultable dans l'historique de l'objet Bilan_Activité_Service ! On a donc 2 instances crées : une de programme JAVA et une de rapport Deski. Si vous avez des questions n'hésitez pas !!!! J'ai codé le tout donc je le comprend... L'ensemble du programme a été posté. Par contre rdv dans la doc Bo pour explorer un peu plus les interactions possible ! |
||||||||||||||||||||||||||||||
|
|
00
|
|
|
#6 |
|
Membre confirmé
![]() Inscription : novembre 2007 Messages : 322 ![]() |
Merci de nous avoir fait profiter de tes recherches.
|
|
|
00
|
|
|
#7 |
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 185 ![]() |
Génial !
Enfin on apprend quelque chose
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!" |
|
|
00
|
|
|
#8 |
|
Membre confirmé
![]() Inscription : novembre 2007 Messages : 322 ![]() |
Avec ta permission Demangef peut être qu'on peut le rajouter à la FAQ, qu'est ce que tu en dis Bruno?
|
|
|
00
|
|
|
#9 |
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 185 ![]() |
Je lui ai effectivement proposé Article ou FAQ.
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!" |
|
|
00
|
|
|
#10 | |||||
|
Membre confirmé
![]() Inscription : novembre 2007 Messages : 322 ![]() |
Envoyé par Bruno2r
Citation:
![]() Envoyé par Demangef Citation:
Citation:
Si j’ai bien compris, dans ton SGBD tu as tes informations de l’hôpital + les identifiants des utilisateurs de BO. MEDI = BDD MUBO=Table de la BDD CDHOP et CDUTIL = Champs de la table MUBO Tu te connectes comment sous DESKI ( mode ENTERPRISE ?) Citation:
Citation:
Ça ne serait pas plutôt SELECT s_dgs.CURRVAL qui returne la valeur courante de la séquence ? Félicitation pour le programme, n’étant pas expert en java j’ai du m’y prendre plusieurs fois pour comprendre le code, heureusement que tu as bien détaillé ! ![]() En fait tu t'es aidé de quel documentation de BO notamment pour savoir les objets BO a utilisé en java et les importations ? |
|||||
|
|
00
|
|
|
#11 | ||||
|
Invité régulier
![]() Inscription : avril 2008 Messages : 36 ![]() |
Citation:
D'un coté tu as les comptes BO, créés sous BO donc sur une table propre au logiciel BO. De l'autre on a une deuxième table (admettons sur une autre base de données) Celle-ci contient un champs CDUTIL (DUPONT, DUPUIS...) et un champs CHHOP (01, 39, 30...) Cette table est utilisée par plusieurs appli en fait.... Dans mon cas, l'utilisateur qui planifie le travail sous BO se connecte (Enterprise). Je récupère son identifiant. Identifiant que je retrouve dans la table MUBO. Je récupère donc un code hôpital que je passe à la procédure stockée. Je me répète, je me connecte en Enterprise Citation:
Citation:
Mais j'ai besoin que la séquence soit incrémenté puis de récupérer la nouvelle valeur. Nextval fait ça très bien Citation:
Au niveau de la documentation : La doc des SDK BO Vous y trouvez des tutos, la JAVADOC des API, des exemples (orientés principalement JSP, mais exploitables) Un forum anglo-saxon consacré à BO : BOB (Trahisooooon !!! )La documentation sur la CMC pour mettre en place le programme sur le référentiel (j'ai appris à utiliser BO il y a 5 semaines grâce à ce document également...) |
||||
|
|
00
|
|
|
#12 |
|
Membre confirmé
![]() Inscription : novembre 2007 Messages : 322 ![]() |
Merci pour les infos
|
|
|
00
|
|
|
#13 |
|
Invité de passage
![]() Inscription : mai 2008 Messages : 6 ![]() |
bonjour,
pas mal effectivement cet article ... mais y'a un truc qui me travaille : le programme java planifié peut planter pour un tas de raisons, comme tu l'anticipes.vu que toutes les SDKException sont catchées, le truc apparaît comme réussi dans l'historique j'ai tenté de rebalancer SDKException en cas d'erreur : throw new SDKException.Unexpected(e); j'ai bien dans le log : Error running the program. avec l'exception trouvée, mais le statut est toujours "Réussite"... comment faire admettre à BO que le jar a planté et lui faire afficher "Echec" ? toute aide sera la bienvenue -- Joseph |
|
|
00
|
|
|
#14 | |
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 185 ![]() |
Citation:
Si tu as quelque chose à ajouter à ce sujet fais une réponse et ensuite on te demande un espace d'hébergement sur DVP pour que tu puisses le publier en article. ![]() ![]()
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!" |
|
|
|
00
|
|
|
#15 |
|
Invité de passage
![]() Inscription : mai 2008 Messages : 6 ![]() |
bonjour,
pour préciser, j'ai tenté un plantage sévère (appel d'une classe absente du classpath): j'obtiens dans le log le "NoClassDefFoundError" attendu, mais le résultat de l'exécution est "Réussite" bug connu ? "feature" ? une idée ? merci -- Joseph |
|
|
00
|
|
|
#16 |
|
Invité régulier
![]() Inscription : avril 2008 Messages : 36 ![]() |
Bonjour à tous !
Ca fait un moment que je ne suis plus passé sur le forum, vu que j'ai fini mon stage sur BO et que je suis en vacs ![]() Mais concernant le statut "Réussite" en cas de plantage, j'étais aussi confronté à ce problème... Le comportement est logique dans un sens : Le programme JAVA est exécuté. A ce moment l'instance du programme JAVA n'existe pas encore. Ce n'est qu'une fois l'exécution terminée que l'instance est créée (je ne sais plus si je l'avais constaté ou lu...) Donc dans ce cas comment fixer le statut d'une instance alors qu'elle n'existe pas encore.... Je pense qu'on est face à un problème sans solution directe.... Par contre dans mon projet, j'ai effectué tous ces catch, cela permet de faire des System.out pour tracer l'exécution dans le log, que ca soit en cas d'Exception ou lorsqu'il n'y a pas de problème... En détaillant suffisamment les messages d'erreurs l'utilisateur final peut s'en sortir... Voila voila.... Travaillez bien
|
|
|
00
|
|
|
#17 |
|
Invité régulier
![]() Inscription : septembre 2007 Messages : 31 ![]() |
Bonjour à tous,
Ces explications sont effectivement très intéressantes. une question me vient de suite à l'esprit : savez-vous s'il est possible de faire la même chose en .NET ? Merci. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com