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