Bonjour Monsieurs,
Je voudrais faire communiquer ma db 11g avec forms 10gR2.
J'ai trouver sur le net un exemple avec les pjc http://forms.pjc.bean.over-blog.com/...e-4168506.html.
J'ai tester apparemment ça marche lorsqu'il s'agit d'une seule forms.
Dans mon cas c'est un projet (une application), alors j'ai essayé d'adapter.
A l'ouverture de l'appli j'ouvre le socket au cas où c'est pas encore fait
Le code de mon bean est sensiblement le meme que celui du lien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 If Name_In('Global.InitServer') = '0' Then Message('Open Socket Server on the Port ' || To_Char(Port) || ' on Localhost', no_acknowledge); Set_Custom_Property( 'LAF_BLOCK.SOCKET', 1, 'INIT_SERVER', to_char(Port) ); Copy('1','Global.InitServer'); End If;
Lorsque je suis sur la première forms ( forms d'accueil) ça marche il m'affiche le message dans la forms.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 Declare eventName Varchar2(30) := :System.custom_item_event; eventValues ParamList; eventValueType Number; LC$Msg Varchar2(512); LC$Value Varchar2(256); V_Poste Varchar2(100); V_Msg Varchar2(500); Begin If (eventName='SENDMSG') Then eventValues := get_parameter_list(:System.custom_item_event_parameters); get_parameter_attr(eventValues,'MESSAGEVALUE',eventValueType, LC$Msg); -- Display the message -- --:BL.MSGS := :BL.MSGS || LC$Msg || Chr(10) ; --Synchronize ; --Select Substr(LC$Msg,1,Instr(LC$Msg,'#@$')-1), -- Substr(LC$Msg,Instr(LC$Msg,'#@$')+3) -- Into V_Poste,V_Msg --From Dual; V_Poste := Substr(LC$Msg,1,Instr(LC$Msg,'#@$')-1); V_Msg := Substr(LC$Msg,Instr(LC$Msg,'#@$')+3); If :Toolbar.Pc = V_Poste Then Pb_Display_Msg(V_Msg); End If; Synchronize ; End If; End;
Java Plug-in 1.6.0_43
Utilisation de la version JRE 1.6.0_43-b01 Java HotSpot(TM) Client VM
Répertoire d'accueil de l'utilisateur = C:\Documents and Settings\Administrator
----------------------------------------------------
c: effacer la fenêtre de la console
f: finaliser les objets de la file d'attente de finalisation
g: libérer la mémoire
h: afficher ce message d'aide
l: vider la liste des chargeurs de classes
m: imprimer le relevé d'utilisation de la mémoire
o: déclencher la consignation
q: masquer la console
r: recharger la configuration des politiques
s: vider les propriétés système et déploiement
t: vider la liste des threads
v: vider la pile des threads
x: effacer le cache de chargeurs de classes
0-5: fixer le niveau de traçage à <n>
----------------------------------------------------
proxyHost=null
proxyPort=0
connectMode=HTTP, native.
La version Forms Applet est : 10.1.2.0
! DrawLAF1: *** ***
! DrawLAF1: *** Look and Feel Project v1.7.7.2 ***
! DrawLAF1: *** ***
ServerSocket is running
outLine=657#@$Bon de Caisse Fonds à l'ACCD Disponible
Sendmessage=657#@$Bon de Caisse Fonds à l'ACCD Disponible
outLine=657#@$Bon de Caisse Fonds à l'ACCD Disponible
Sendmessage=657#@$Bon de Caisse Fonds à l'ACCD Disponible
Mais une fois que je quitte la forms de connexion pour une autre, meme si je reviens sue la forms, j'ai un souci
le code du SendMessageJava Plug-in 1.6.0_43
Utilisation de la version JRE 1.6.0_43-b01 Java HotSpot(TM) Client VM
Répertoire d'accueil de l'utilisateur = C:\Documents and Settings\Administrator
----------------------------------------------------
c: effacer la fenêtre de la console
f: finaliser les objets de la file d'attente de finalisation
g: libérer la mémoire
h: afficher ce message d'aide
l: vider la liste des chargeurs de classes
m: imprimer le relevé d'utilisation de la mémoire
o: déclencher la consignation
q: masquer la console
r: recharger la configuration des politiques
s: vider les propriétés système et déploiement
t: vider la liste des threads
v: vider la pile des threads
x: effacer le cache de chargeurs de classes
0-5: fixer le niveau de traçage à <n>
----------------------------------------------------
proxyHost=null
proxyPort=0
connectMode=HTTP, native.
La version Forms Applet est : 10.1.2.0
! DrawLAF1: *** ***
! DrawLAF1: *** Look and Feel Project v1.7.7.2 ***
! DrawLAF1: *** ***
ServerSocket is running
outLine=657#@$Bon de Caisse Fonds à l'ACCD Disponible
Sendmessage=657#@$Bon de Caisse Fonds à l'ACCD Disponible
outLine=657#@$Bon de Caisse Fonds à l'ACCD Disponible
Sendmessage=657#@$Bon de Caisse Fonds à l'ACCD Disponible
java.lang.NullPointerException
at oracle.forms.handler.JavaContainer.customActionPerformed(Unknown Source)
at oracle.forms.ui.BeanManager.dispatchCustomEvent(Unknown Source)
at oracle.forms.ui.VBean.dispatchCustomEvent(Unknown Source)
at oracle.forms.fd.SocketServer.SendMessage(SocketServer.java:117)
at oracle.forms.fd.SocketServer.run(SocketServer.java:76)
at java.lang.Thread.run(Unknown Source)
Merci pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125 package oracle.forms.fd; import oracle.forms.handler.IHandler; import oracle.forms.ui.VBean; import oracle.forms.properties.ID; import oracle.forms.ui.CustomEvent; /** * A Bean to transform the Forms module * into a socket server * * @author Francois Degrelle * @version 1.1 * * tried only with the Sun Java Plugin */ public class SocketServer extends VBean implements Runnable { // variables public final static ID initServer = ID.registerProperty("INIT_SERVER"); public final static ID stopServer = ID.registerProperty("STOP_SERVER"); private static final ID SEND_MSG = ID.registerProperty("SENDMSG"); private static final ID MESSAGEVALUE = ID.registerProperty("MESSAGEVALUE"); static Thread runner ; public static boolean bMsg = false ; public static String sMessage = "" ; private static IHandler mHandler; private Server server ; // special class that init the socker server public void init(IHandler handler) { mHandler = handler; super.init(handler); } // we start the thread here private void startThread() { if (runner == null ) { runner = new Thread(this); runner.start(); } } // we stop the thread here private static void stopThread() { if (runner != null ) { runner = null; } } // Start the thread public void run() { Thread theThread = Thread.currentThread(); while (runner == theThread) { // well we need sleep to release processor for do any thing else try { theThread.sleep(1000); } catch (InterruptedException e) { System.err.println("Error : " + e); e.printStackTrace(); } // tell Forms that a message is incoming if( bMsg ) { System.out.println("Sendmessage="+sMessage); SendMessage(sMessage) ; -- Ligne 76 bMsg = false ; if( sMessage.equalsIgnoreCase("BYE.")) stopThread() ; } } } /* * Set some properties */ public boolean setProperty(ID property, Object value) { // Start the socket server on the given port if( property == initServer ) { int iPort = Integer.parseInt((String)value) ; server = new Server(iPort); server.start(); startThread() ; return true ; } // Stop the socket server else if( property == stopServer ) { server.close(); stopThread() ; return true ; } else { return super.setProperty(property, value); } } // send message back to Forms public void SendMessage( String sMessage ) { try{ CustomEvent ce = new CustomEvent(mHandler, SEND_MSG); mHandler.setProperty( MESSAGEVALUE, sMessage ); dispatchCustomEvent(ce); --Ligne 117 } catch (Exception e) { e.printStackTrace(); } } }
Partager