In previous blog posts (like this, this and this one) I explained how you can integrate (or embed) Oracle Forms within an APEX Page. But yesterday I stumbled upon this question on the Oracle APEX Forum. There someone was looking for a solution how to access an APEX Page from an Oracle Form - so exactly the other way round. And, after some trial-and-error I came up with this solution:
1. Copy the basejpi.htm (or whatever html file you're using in the formsweb.cfg) on your application server to (something like) forms2apex-jpi.htm and reference that in your formsweb.cfg.
2. Edit the forms2apex-jpi.htm and add an IFRAME tag just before the closing BODY tag:
3. In the same file, add a javascript function between the HEAD-tags, to call the APEX page (in this example it is an IR and I add a parameter to the call):
4. In your Form add some code to a button or - in this example - to the WHEN-NEW-RECORD-INSTANCE trigger:
Of course there are some limitations: It works best when you're using SSO or a Public APEX Page, otherwise APEX will present a login screen first...
1. Copy the basejpi.htm (or whatever html file you're using in the formsweb.cfg) on your application server to (something like) forms2apex-jpi.htm and reference that in your formsweb.cfg.
2. Edit the forms2apex-jpi.htm and add an IFRAME tag just before the closing BODY tag:
<IFRAME src="http://localhost:7778/pls/apex/f?p=104" style="width:800px;height:450px;visibility:hidden" name="APEX" id="APEX" scrolling="auto" marginwidth="1" marginheight="1" frameborder="1" vspace="1" hspace="1" />where the src references your APEX app.
3. In the same file, add a javascript function between the HEAD-tags, to call the APEX page (in this example it is an IR and I add a parameter to the call):
<script type="text/javascript"> function ShowApexPage( pPage, pID ){ vFrame = document.getElementById("APEX"); vFrame.src = "http://localhost:7778/pls/apex/f?p=104:"+pPage+"::::RP,"+pPage+",RIR:IR_CUSTOMER_ID:"+pID; vFrame.style.visibility = "visible"; } </script>and save the file.
4. In your Form add some code to a button or - in this example - to the WHEN-NEW-RECORD-INSTANCE trigger:
ShowApexPage( 12, :CUSTOMERS.CUSTOMER_ID );and define that ShowApexProcedure as a Program Unit (in your Form or Library):
PROCEDURE ShowApexPage ( p_page_no number , p_id number ) IS BEGIN web.show_document('javascript:ShowApexPage( '||p_page_no||','||p_id||');', '_self'); END;And now you're ready to roll....
Of course there are some limitations: It works best when you're using SSO or a Public APEX Page, otherwise APEX will present a login screen first...
Comments