Dynamic action - execute pl/sql code
Hi All and thanks fro any assistance.
I am trying to Execute the following pl/sql Code in a dynamic action however get the following error - AJAX call returned server error ORA-01403: no data found for Execute PL/SQL code.
I have all page items iin the page items to submit section.
declare
l_file_comments IMM_DOCUMENTS.FILE_COMMENTS%type;
l_file IMM_DOCUMENTS.FILE_BLOB%type;
l_filename IMM_DOCUMENTS.FILENAME%type;
l_mimetype IMM_DOCUMENTS.FILE_MIMETYPE%type;
l_charset IMM_DOCUMENTS.FILE_CHARSET%type;
begin
select f.blob_content,
f.filename,
f.mime_type,
nvl(f.file_charset, f.dad_charset)
into l_file,
l_filename,
l_mimetype,
l_charset
from wwv_flow_files f
where f.name = :P80_FILE;
if l_file is not null then
insert into IMM_DOCUMENTS
sub_id,
document_type_id,
filename,
file_blob,
file_comments,
file_mimetype,
file_charset
values
:P80_SUB_ID,
:P80_DOCUMENT_TYPE_ID,
l_filename,
l_file,
:P80_FILE_DESCRIPTION,
l_mimetype,
l_charset
delete from wwv_flow_files where name = :P80_FILE;
end if;
end;
Hi Marie,
as Matthew says, the only part of the code that could result in that error is the select into statement. This is because, in pl/sql, a select into statement is expected to return one row only. If it returns no rows it raises a no data found exception and if it returns more than one row it raises a too many rows error.
If it is acceptable that this query may return no rows, then you have to handle this situation. The two methods that you can use would be firstly to use a named cursor and fetch a row from this, if there is no data then it does not raise an exception. The other method would be to put in an exception handler around the select statement.
EG - prefered, mainly because I think it is better to code in a way that minimises exception handling.
declare
l_file_comments IMM_DOCUMENTS.FILE_COMMENTS%type;
l_file IMM_DOCUMENTS.FILE_BLOB%type;
l_filename IMM_DOCUMENTS.FILENAME%type;
l_mimetype IMM_DOCUMENTS.FILE_MIMETYPE%type;
l_charset IMM_DOCUMENTS.FILE_CHARSET%type;
CURSOR file_cur IS
select f.blob_content,
f.filename,
f.mime_type,
nvl(f.file_charset, f.dad_charset)
from wwv_flow_files f
where f.name = :P80_FILE;
begin
OPEN file_cur;
FETCH file_cur INTO
l_file,
l_filename,
l_mimetype,
l_charset;
CLOSE file_cur;
if l_file is not null then
insert into IMM_DOCUMENTS
sub_id,
document_type_id,
filename,
file_blob,
file_comments,
file_mimetype,
file_charset
values
:P80_SUB_ID,
:P80_DOCUMENT_TYPE_ID,
l_filename,
l_file,
:P80_FILE_DESCRIPTION,
l_mimetype,
l_charset
delete from wwv_flow_files where name = :P80_FILE;
end if;
end;
OR
declare
l_file_comments IMM_DOCUMENTS.FILE_COMMENTS%type;
l_file IMM_DOCUMENTS.FILE_BLOB%type;
l_filename IMM_DOCUMENTS.FILENAME%type;
l_mimetype IMM_DOCUMENTS.FILE_MIMETYPE%type;
l_charset IMM_DOCUMENTS.FILE_CHARSET%type;
begin
BEGIN
select f.blob_content,
f.filename,
f.mime_type,
nvl(f.file_charset, f.dad_charset)
into l_file,
l_filename,
l_mimetype,
l_charset
from wwv_flow_files f
where f.name = :P80_FILE;
EXCEPTION
WHEN no_data_found THEN
NULL;
END;
if l_file is not null then
insert into IMM_DOCUMENTS
sub_id,
document_type_id,
filename,
file_blob,
file_comments,
file_mimetype,
file_charset
values
:P80_SUB_ID,
:P80_DOCUMENT_TYPE_ID,
l_filename,
l_file,
:P80_FILE_DESCRIPTION,
l_mimetype,
l_charset
delete from wwv_flow_files where name = :P80_FILE;
end if;
end;Note : code is untested.
Regards
Andre
Similar Messages
-
Executing dynamic action JS then plsql code with checkbox.
All,
I have a checkbox which when clicked i want to run javascript expression then next plsql code in that sequence. But iam getting the first issue here when i put in JS an expression like document.getElementById("P111_CHECK1").value ... or even document.getElementById("P111_CHECK1").checked i always get undefined error. So how can i determine if the checkbox is checked or unchecked in DA? thanks in advance.Hi,
still stuck here on how do i check/uncheck a single checkbox in Apex i tried via dynamic action JS expression like this but doesnt work ==> document.getElementById("P111_CHECKBOX1").checked = true/false; Any help on this pls? -
Access to triggering element in a Dynamic Action from PL/SQL ?
Hi,
I have a form that is used to calculate the volume of a (large) number of tanks based on entered tank heights.
I have a PL/SQL procedure that performs the calculation - it is given the name of the tank and the height and calculates the volume (each tank may have different physical characteristics).
I didn't want to create a Dynamic Action per tank (I'm lazy and the number of tanks is large!). I currently have a Dynamic Action that is triggered whenever any of the tank heights on the form change. The action PL/SQL calls the calculation for each tank. E.G.
:P1_TANK1_VOL := tank.vol('TANK1', :P1_TANK1_HEIGHT);
:P1_TANK2_VOL := tank.vol('TANK2', :P1_TANK2_HEIGHT);
:P1_TANK50_VOL := tank.vol('TANK50', :P1_TANK50_HEIGHT);
This works but involves performing 50 calculations whenever a single one is required and can appear to be slow.
Is there a way to identify the triggering element from the PL/SQL action? E.G.
IF TriggeringElement = 'P1_TANK1_HEIGHT' THEN
:P1_TANK1_VOL := tank.vol('TANK1',:P1_TANK1_HEIGHT);
END IF;
Any ideas?Very neat, many thanks.
I now have a 'Set Value' 'Javascript Expression' action of 'this.triggeringElement.id;' to set a hidden *but unprotected* page item. This is followed by the 'Execute PL/SQL' action which simply calls a package procedure and passes the name of the triggering item. The procedure then sets the session state(s) as required.
Thank you! -
Success message in dynamic action with pl/sql
Hi, I want to know how to display the message "action proceed" in the "inline notification" from my block pl / sql is a dynamic action.
Like this :
Declare
Begin
Delete RSCLASSE_ACTIVITE
Where ROWID = :P_DELETE_ROWID;
-- here --->
-- I want display a info message in notification message "This recors is deleted". --
Exception
When NO_DATA_FOUND Then
Pck_Suivi_Traitement.Prc_Log_Erreur('APEX Application : ' || :APP_ID || ' Alias:' || :APP_ALIAS || ' page :' || :APP_PAGE_ID ,Null,
'Erreur dans la suppression d''un enregistrement RSCLASSE_ACTIVIE No_data_found '
,Substr(Sqlerrm,1,200));
When Others Then
Pck_Suivi_Traitement.Prc_Log_Erreur('APEX Application : ' || :APP_ID || ' Alias:' || :APP_ALIAS || ' page :' || :APP_PAGE_ID ,Null,
'Erreur dans la suppression d''un enregistrement RSCLASSE_ACTIVIE '
,Substr(Sqlerrm,1,200));
End;
I found only APEX_ERROR.ADD_ERROR....in the api.If you want to do this from a DA, does that mean you don't want to refresh the page?
If the page won't be refreshed and you want to make the message display you could do this technique taken from Dan McGhan's Modal plugin.
$('#messages')
.hide()
.append("Your Success Message Here")
.slideDown('slow');
This approach is dependent on the Theme you're using. Here your inline notification is inside an ID of #messages, you may need to change this.
The code finds your messages div/section/element, then hides it, in case there's an old one. Then the new message is added and displayed with slideDown.
You may also want to add more to your message to style it in the same fashion as your themes message.
For example: <div class="success">Your message here</div>
Let me know if this doesn't get you close.
Thanks
-Jorge
http://rimblas.com/blog/ -
Problem setting a hidden item value when button clicked with dynamic action or pl/sql process
Apex 4.1
Oracle 11g
I have a page that consists of a main region and several sub regions. I have a pl/sql process in After Header SET_DISPLAY(:P400_DISPLAY :='MAIN';)
Three subregions have a contional display where P400_DISPLAY = STORE. This works in hiding the sub regions.
Now I want to change the P400_DISPLAY value to STORE to show the subregions when I hit a button.
I tried creating a dynamic action for on click of the add button but get the following error:
The selected button uses a 'Button Template' that does not contain the #BUTTON_ID# substitution string
I went to the templates and found:
Substitution Strings
Substitution strings are used within sub templates to reference component values. This report details substitution string usage for this template.
Substitution String
Referenced
From
Description
#LINK#
Yes
Template
To be used in an "href" attribute
#JAVASCRIPT#
No
To be used in an "onclick" attribute
#LABEL#
Yes
Template
Button Label
#BUTTON_ATTRIBUTES#
No
Button Attributes
#BUTTON_ID#
No
Generated button ID will be either the button's Static ID if defined, or if not will be an internally generated ID in the format 'B' || [Internal Button ID]
I then tried creating a page process, pl/sql, :P400_DISPLAY :='STORE'; when the appropriate button is pressed. The button action is submit page. However, it does not change the P400_DISPLAY value and the subregions stay hidden.
Suggestions please on how to fix the template or change the P400_DISPLAY value?The root issue is that, although you change the value of your page item, it isn't visible to other areas of the page until it is in the session. So, any other action based on the value of your page item; the visibility of a control, a report based on the item's value, etc. will all be unaffected by changing the value of the page item until it has been changed in the session. Even after this the items are stored in the session, you must thereafter do something to cause the value to be reevaluated. To see the effect of this, observe that your page loads and evaluates the value of your page item, it sees that is "MAIN" and hides the regions. However, it doesn't reevaluate them after this.
So; your choices to get this value set in the session are to either Submit the page, or use JavaScript to set the value in the session. If you use the latter of these, you'll have to do some further work to cause the visibility tests to be re-run, So, let's stick with with the submit method.
What you've done above sounds correct for this but, there are a lot of decisions you could have made that might have caused things not to happen in the correct sequence.
Firstly, let's confirm that what I describe above is your problem. From the development environment, load the page, click the button to change the value and submit. Now, click the link labelled Session. Is it still set to MAIN? If so; this is your issue.
Let's start with the your After Header computation. Did you set it to *only* run if the current value of your page item is NULL??? If not, that's your problem.
Load Page -> Item set to 'Main' by Computation -> Click Button -> Item set to STORE -> Submit -> Load Page -> Item set to 'Main' by Computation
See the problem?
Assuming this isn't the issue, you created a Branch to the same page, right? What is your process point for the Branch? Is it *After* Validation, Computation etc? Because if not, you aren't changing the value before the submit happens.
I bet it is the first issue but, take a look at these.
Cheers,
-Joe -
Execute all SQL code as individual Oracle user, not APEX_PUBLIC_USER
Is it possible to get APEX to execute SQL code as the user's existing Oracle database user instead of APEX_PUBLIC_USER?
Besides having all of the security already defined for each of the existing users at the database level, the existing application also handles generating audit trails with triggers that pull the username executing the SQL instead of accepting passed values. At the moment APEX_PUBLIC_USER is plastered everywhere as the user that generated the changes.rcy_evdriver wrote:
Is it possible to get APEX to execute SQL code as the user's existing Oracle database user instead of APEX_PUBLIC_USER? No. See:
{message:id=926724}
{message:id=1224601}
{message:id=1606515}
Application Express and parsing of SQL
Besides having all of the security already defined for each of the existing users at the database level, the existing application also handles generating audit trails with triggers that pull the username executing the SQL instead of accepting passed values. At the moment APEX_PUBLIC_USER is plastered everywhere as the user that generated the changes.Using DAD Credentials Verification will cause the database user to be returned by the <tt>USER</tt> pseudo-column. (However just because you can do this, it doesn't mean you should.)
{message:id=9680421}
Why are you asking this? +"At the moment APEX_PUBLIC_USER is plastered everywhere as the user that generated the changes"+ indicates that it might be a bit late to be making fundamental discoveries about APEX and database security? -
Dynamically open/execute a .sql file
Is it possible to dynamically open a .sql file?
Specifically, if the user's input will determine which file to open, how can I open the corresponding file?
For example, if the user's options are 1, 2, 3, 4, 5 and their selection will determine whether to open file1.sql, file2.sql, file3.sql, file4.sql, or file5.sql, how do I open the correct file?
Let me know if additional information is needed.
Thanks!Can you take a step back and explain exactly what you're trying to accomplish here?
Are you trying to give users some sort of menu-based system in SQL*Plus that will execute scripts? Will those scripts be on the user's machine? Or on the server?
If this is your goal, you are generally better served using a shell script on a central server to present the menu, process the choice, and invoke SQL*Plus or putting some sort of thin web-based GUI on top of the scripts.
Justin -
How to use dynamic action to fill multi item on a page ?
Hi..
I want to fill multi items on a page so I build a dynamic action ( Execute PL/SQL Code ) to do it .The problem is that when the page loads I can't see any data and I tried to see the session values using debug and I found data. Moreover when I save the row I got these data saved.
So what is the magic there?
ThanksFirstly, to get the multi-select populated with "pre-selected" values the easiest approach is to use Computation or Process at a process point On Load Before Header or After Header or Before Regions.
All you need to do is populate your "Select List " page Item with : (colon) separated list of selected values. E.g is you want A,B and C out of A,B,C,D,E selected then get A:B:C into the Page Item.
If you have used Dynamic Actions, what is your event on which the action fires? For Dynamic-Actions the page (HTML DOM) needs to be existing , so it must fire after the page has loaded.
Regards, -
Issue in execution of Dynamic action on change event
Hi,
Greetings.
I have scenario, where I have one select list (P_CATEGORY) and one shuttle control (P_ROOMS) on page.
The values of the shuttle list is being populated based on the selected value in select list.
The left pane of shuttle control's value based on LOV and source of the shuttle item is a plsql function, which returning colon separated value list.
So that returned values shown in the right pane of shuttle.
The LOV values are getting being populated using cascading LOV i.e based on the of Select List item. But the Shuttle source values not getting auto refresh and for achieving that I've created a dynamic true action on change event of Select list.
The dynamic action is with :
Action : Set Value
Set Type : PL SQL funciton body
Page items to submit : P_CATEGORY (this is select list)
Escape Special Character : Yes
Suppress Change event : Yes
Affected Elements -
Selection type : Item(s)
Item(s) : P_ROOMS
This is perfectly working on Firefox but not working on IE9 & Google Chrome.
I've debugged in both IE9 & Google chrome and found the dynamic action get executes ajax call and the values get back but not rendering on the screen. i.e not assigning to the item.
So can you please advice me what will be a workaround for this issue?
I am using Application Express 4.1.0.00.32 .
I'll appreciate your prompt response.
Thanks & Regards,
Jaydipsinh RauljiI don't understand why this is not working withouth seeing an example, there might be multiple processes working on the item.
Anyway if the value is returned check if the value is in the session aswell. If it is in the session but not on the page that means you will need to find a way to bring it from the DB to the page. You can do this by adding an action to your DA:
Action: Execute PL/SQL code
PL/SQL code: NULL;
Page Items to Return: your shuttle item -
Hi,
I have a requirement like after entering the date of birth in the item. then age value should be set dynamically.
how can i set the value?Hi Tulasi,
Follow the below steps
Click on create button-Dynamic action
select Advanced type
Give some name
event - On change
selection type - item
item(s) - your page item(used to select date of birth)
condition - no condition
action - Execute PL/SQL code
Fire on page load - blank
PL/SQL code -
declare
v_age varchar2(100);
v_dob date;
v_sysdate date;
begin
select sysdate into v_sysdate from dual;
v_dob := :P1_DOB; //here P1_dob is a page item from where i am selecting date of birth.
select trunc(to_char((v_sysdate - v_dob)/365)) into v_age from dual;
:P1_AGE := v_age; // i have created one item named P1_AGE to display the calculated age.
end;Page Items to Submit = P1_DOB // replace with your datepicker page item
Page Items to Return = P1_AGE // replace with your item.
Hope this will give you some idea.
Thanks and Regards,
Jitendra -
About creating an AJAX page with DML procedures using dynamic actions
About creating an AJAX page with DML procedures in APEX using dynamic actions. Help with limitations.
I want to share my experience, creating AJAX procedures in APEX 4.0.
LIMITATIONS
• How Can I Hide UPDATE button while I press NEW button. ??
• How Can I Hide CREATE button while I’m UPDATING A RECORD. ??
• How can I avoid multiple Inserts or Updates. ??
Here are the steps to create an AJAX Updatable Form using the sample table DEPTS. You can see the demo here: [http://apex.oracle.com/pls/apex/f?p=15488:1]
1) Create a blank page
2) Add a Report Region for departments (It shows the columns deptno, dname and loc).
3) Add an HTML Region and create the elements to edit a Department.
a. P1_DEPTNO (Hidden to store PK)
b. P1_DNAME (Text Field)
c. P1_LOC (Text Field)
4) You also have to create a hidden element called P1_ACTION. This will help to trigger dynamic actions to perform DMLs.
5) Open Page Attributes and in the HTML Header Section include the following code.
<script>
function doSelect(pId){
$x_Value(‘P1_DEPTNO’,pId);
$x_Value(‘P1_ACTION’,’SELECT’);
</script>
6) Modify the column DEPTNO in the report, to add column link. In the link text you can use #DEPTNO# , in target you must select ‘URL ‘ and in the URL field write javascript:doSelect(#DEPTNO#);
7) Create the following Buttons in the Form Region.
CANCEL Redirects to URL: javascript:$x_Value(‘P150_ACTION’,’CANCEL’);
NEW Redirects to URL: javascript:$x_Value(‘P150_ACTION’,’NEW’);
SAVE Redirects to URL: javascript:$x_Value(‘P150_ACTION’,’UPDATE’);
CREATE Redirects to URL: javascript:$x_Value(‘P150_ACTION’,’CREATE’);
8) Create the following Dynamic Action to Select a Department
Name: Select Dept
Event: Change
Selection Type: Item(s)
Item(s): P1_ACTION
Condition: equal to
Value: SELECT
Action: Execute PL/SQL Code
PL/SQL Code:
SELECT dname, loc
INTO :P1_DNAME, :P1_LOC
FROM dept
WHERE deptno = :P1_DEPTNO;
Page Items to Submit: P1_DEPTNO, P1_DNAME, P1_LOC
Don’t include any false action and create the Dynamic Action.
The first limitation, the value of page elements don’t do refresh so I added the following true actions to the dynamic action AFTER Execute PL/SQL Code.
Action: Set Value
Unmark *‘Fire on page load’* and *‘Stop execution on error’*
Set Type: PL/SQL Expression
PL/SQL Expression: :P1_DNAME
Page Items to submit: (none) (leave it blank)
Affected Elements: Item P1_DNAME
Action: Set Value
Unmark *‘Fire on page load’* and *‘Stop execution on error’*
Set Type: PL/SQL Expression
PL/SQL Expression: :P1_LOC
Page Items to submit: (none) (leave it blank)
Affected Elements: Item P1_LOC
These actions allow refresh the items display value.
9) Create the following Dynamic Action to Update a Department
Name: Update Dept
Event: Change
Selection Type: Item(s)
Item(s): P1_ACTION
Condition: equal to
Value: CREATE
Action: Execute PL/SQL Code
PL/SQL Code:
UPDATE dept SET
dname = :P1_DNAME,
loc = :P1_LOC
WHERE deptno = :P1_DEPTNO;
Page Items to Submit: P1_DEPTNO, P1_DNAME, P1_LOC
Don’t include any false action and create the Dynamic Action.
Include the following True Actions BEFORE the Execute PL/SQL Code true Action.
Action: Set Value
Unmark ‘Fire on page load’ and ‘Stop execution on error’
Set Type: PL/SQL Expression
PL/SQL Expression: :P1_DNAME
Page Items to submit: P1_DNAME
Affected Elements: Item P1_DNAME
Action: Set Value
Unmark *‘Fire on page load’* and *‘Stop execution on error’*
Set Type: PL/SQL Expression
PL/SQL Expression: :P1_LOC
Page Items to submit: P1_LOC
Affected Elements: Item P1_LOC
These actions allow refresh the items display value.
Finally to refresh the Departments report, add the following true action at the end
Action: Refresh
Affected Elements: Region Departments
10) Create the following Dynamic Action to Create a Department
Name: Create Dept
Event: Change
Selection Type: Item(s)
Item(s): P1_ACTION
Condition: equal to
Value: CREATE
Action: Execute PL/SQL Code
PL/SQL Code:
INSERT INTO dept(deptno,dname,loc)
VALUES (:P1_DEPTNO,:P1_DNAME,:P1_LOC);
Page Items to Submit: P1_DEPTNO, P1_DNAME, P1_LOC
Don’t include any false action and create the Dynamic Action.
Include the following True Actions BEFORE the Execute PL/SQL Code true Action.
Action: Set Value
Unmark *‘Fire on page load’* and *‘Stop execution on error’*
Set Type: PL/SQL Function Body
PL/SQL Function Body:
DECLARE
v_pk NUMBER;
BEGIN
SELECT DEPT_SEQ.nextval INTO v_pk FROM DUAL;; -- or any other existing sequence
RETURN v_pk;
END;
Page Items to submit: P1_DEPTNO
Affected Elements: Item P1_DEPTNO
Action: Set Value
Unmark *‘Fire on page load’* and *‘Stop execution on error’*
Set Type: PL/SQL Expression
PL/SQL Expression: :P1_DNAME
Page Items to submit: P1_DNAME
Affected Elements: Item P1_DNAME
Action: Set Value
Unmark ‘Fire on page load’ and ‘Stop execution on error’
Set Type: PL/SQL Expression
PL/SQL Expression: :P1_LOC
Page Items to submit: P1_LOC
Affected Elements: Item P1_LOC
These actions allow refresh the items display value.
Finally to refresh the Departments report, add the following true action at the end
Action: Refresh
Affected Elements: Region Departments
11) Create the following Dynamic Action to delete a department
Name: Delete Dept
Event: Change
Selection Type: Item(s)
Item(s): P1_ACTION
Condition: equal to
Value: DELETE
Action: Execute PL/SQL Code
PL/SQL Code:
DELETE dept
WHERE deptno = :P1_DEPTNO;
Page Items to Submit: P1_DEPTNO
Don’t include any false action and create the Dynamic Action.
Include the following True Actions AFTER the Execute PL/SQL Code true Action.
Action: Refresh
Affected Elements: Region Departments
Action: Clear
Unmark ‘Fire on page load’
Affected Elements: Items P1_DEPTNO, P1_DNAME, P1_LOC
12) Finally Create the following Dynamic Action for the NEW event
Name: New Dept
Event: Change
Selection Type: Item(s)
Item(s): P1_ACTION
Condition: equal to
Value: NEW
Action: Clear
Unmark *‘Fire on page load’*
Affected Elements: Items P1_DEPTNO, P1_DNAME, P1_LOCI need some help to solve this issues
• How Can I Hide UPDATE button while I press NEW button. ??
• How Can I Hide CREATE button while I’m UPDATING A RECORD. ??
• How can I avoid multiple Inserts or Updates. ?? -
Call a Automatic Row Fetch from a Dynamic Action
Hi,
can I execute the Automatic Row Fetch from a dynamic action?
I only found this post (Dynamic Actions to call Automatic Row Processing (DML) but the link where the solution is does not work :(
Thanks,
Edited by: Elena.mtc on 09-nov-2012 5:46Elena.mtc wrote:
I forgot to say, for several reasons, I don't want to submit the page. So that's where I find the complexity in calling the ARf.
Thanks.You cannot fire the ARF because it is designed to run when the page is rendered and it cannot be called as a standalone
Create a dynamic action as follows to fetch the form detials
Action: Execute PL/SQL Code
PL/SQL Code:
begin
select ename, job, mgr, hiredate, sal
into :P4_ENAME, :P4_JOB, :P4_MGR, :P4_HIREDATE, :P4_SAL
from emp
where empno = :P4_EMPNO;
exception
when others then
null;
end;
Page Items to Submit: P4_EMPNO
Page Items to Return: P4_ENAME,P4_JOB,P4_MGR,P4_HIREDATE,P4_SAL
See this working example: http://apex.oracle.com/pls/apex/f?p=32940:4
Login as test/test
If you want to make it more dynamic you can query the APEX metadata to find the form items on your current page
select * from apex_application_page_db_items
where page_id =:APP_PAGE_ID
and application_id = :APP_ID; -
Display item with HTML affected by dynamic action
Hi,
I'm using APEX 4.1.1
I have a item P1_TEST set as "Display only", escaping special characters "no", and the source as pl/sql expression of
'hello <b>world</b>'I then create a dynamic action executing PL/SQL on click of a button.
P1_TEST is listed in both "page items to submit" and "page items to return", and it doesn't matter what happens in the pl/sql code - it could just be null;
When opening the page, I see
hello world
as desired.
After clicking the button, the field contents become escaped and I see hello <b>world</b>which is not desired.
Is this expected behaviour / a bug? Is there a workaround?
Cheers
ScottHi Scott,
This was indeed a change of behaviour from 4.1.1 to 4.2 and has to do with how APEX handles input escaping (or when saving values into session state). I should say, we plan to revisit the current behaviour to make this more transparent and obvious, but that won't be for 4.2, for your information.
As you identified, the escaping is happening as part of the 'Page Items to Submit' functionality, so in other words when the item value is saved in session state. APEX has some predefined rules about when and when not to do input escaping based on the item type, and this is what has changed slightly from 4.1.1 to 4.2.
In 4.1.1, regardless of whether item values are set via the URL or via an Ajax call, the same rules applied for when APEX does input escaping. We always input escape the 'safe' item types. These types used to be documented in the 3.2 documentation, here: http://docs.oracle.com/cd/E14373_01/appdev.32/e11838/sec.htm#CDDBBECI
(Obviously the item types have changed slightly with the consolidation of some of those into single items, with different settings. But hopefully that is still of use, and we no longer cite them in the same way in recent documentation so I couldn't link to something more recent.)
In 4.2, this behaviour was 'relaxed' slightly, such that this logic only kicks in when setting values over the URL, not for Ajax calls. This is why this is no longer an issue with your DA, because we no longer obey the same item type escaping in the context of an Ajax call.
As a workaround for 4.1.1, I would suggest to use a non-safe item type to set your value into (eg a 'Hidden' type), then use JavaScript just to copy that over to your displayed item. The 'unescape' function didn't work, because that does URL unescaping, not HTML unescaping.
Hope that helps,
Anthony. -
Refresh report title with dynamic action
Hi all,
I have a report that is refreshed with an dynamic action. When the refresh is performed, first the value of two hidden variables are set (P2_ID and P2_NAME) and are submitted (using a dynamic action type 'pl/sql', with code 'null;' and page items to submit: P2_ID,P2_NAME).
In the query of the report, i use :P2_ID in the where-clause. That's all working like a charm! The one thing that doen't work, is the title of the region: that's defined as 'Properties of &P2_NAME.', but the title isn't refreshed when the report gets refreshed.
Is there a solution for this? I hope I'm clear enough.See Re: Dynamic action - Refresh
So you are right; the native Refresh action just refreshes the report content, it does not perform &ITEM. substitutions everywhere in the region.
What you could do is use a named SPAN as the title like <span id="my_title">&P2_NAME.</span> and add a TRUE action to your Dynamic Action to set the title using Execute Javascript code $s('my_title',$v('P2_NAME'));Hope this helps. -
Hi Everyone, I have posted this question in the past and made huge progress with Denes Kubicek's help: https://apex.oracle.com/pls/apex/f?p=31517:294:115851992029365::::: based on my earlier question posted: https://forums.oracle.com/forums/thread.jspa?threadID=2537494
I am struggling with one item in my tabular form. It is a radio button. The choices all appear properly, but the value is not saved in the collection (and hence, not saved in the table). All other items in the tabular form save properly.
here is what I have for the query. It is item c024 (which maps to ;'f03'), which is defined as a radio LOV based on an existing LOV.
Currently I have:
2 page items:
P110_ID
P110_VALUE
Dynamic action called CHANGE COLUMN:
event: CHANGE
selection type: jQUERY Selector
jQuery:
jQuery Select = input[name='f03'],select[name'f08'],select[name='f09'],input[name='f10'],input[name='f11'],input[name='f12'],select[name='f40'],input[name='f21'],input[name='f22'],input[name='f23'],input[name='f50']
event scope: Dynamic
true action#1: set value P110_ID javascript expression this.triggeringElement.id
true action#2: set value P110_VALUE javascript expression this.triggeringElement.value
true action#3: execute pl/sql code
declare
v_member number;
v_seq number;
begin
v_member := TO_NUMBER (SUBSTR (:p110_id, 2, 2));
select ltrim(substr(:p110_ID,5,4),'0') into v_seq from dual;
safis_collections.update_column(v_seq,
v_member,
:p110_value);
true ation#4 refresh region :LANDINGS_COLLECTION
the tabular form is based on the query:
SELECT
apex_item.text(1,seq_id,'','','id="f01_'||seq_id,'','') "DeleteRow",
seq_id,
seq_id display_seq_id,
apex_item.text_from_LOV(c004,'SPECIES')||'-'||apex_item.text_from_LOV(c005,'GRADE')||'-'||apex_item.text_from_LOV(c006,'MARKETCODE')||'-'||apex_item.text_from_LOV_query(c007,'select unit_of_measure d, unit_of_measure r from species_qc') unit,
apex_item.select_list_from_LOV(8,c008,'DISPOSITIONS','onchange="getAllDisposition('||seq_id||')"','YES','0',' -- Select Favorite -- ','f08_'||seq_id,'') Disposition,
apex_item.select_list_from_LOV(9,c009,'GEARS','style="background-color:#FBEC5D; "onFocus="checkGearPreviousFocus('||seq_id||');"onchange="getAllGears('||seq_id||')"','YES','3333','-- Select Favorite --','f09_'||seq_id,'') Gear,
apex_item.text(10,TO_NUMBER(c010),5,null, 'onchange="setTotal('||seq_id||')"','f10_'||seq_id,'') Quantity,
apex_item.text(11,TO_NUMBER(c011),5,null,'onchange="getPriceBoundaries('||seq_id||')"','f11_'||seq_id,'') Price,
apex_item.text(12, TO_NUMBER(c012),5,null, 'onchange="changePrice
('||seq_id||')" onKeyDown="selectDollarsFocus('||seq_id||',event);"','f12_'||seq_id,'') Dollars,
decode(c013,'Y',apex_item.text(14, c014,30,null,'style="background-color:#FBEC5D;" onClick="onFocusAreaFished('||seq_id||');"','f14_'||seq_id,''),'N','N/A') Area_Fished,
decode(c017,'Y',apex_item.text(18, c018,4,null,'style="background-color:#FBEC5D; "onBlur="setUnitQuantity('||seq_id||')"','f18_'||seq_id,''),'N','N/A') UNIT_QUANTITY,
decode(c017,'Y',apex_item.text(19,'CN',3,null,'readOnly=readOnly;','f19_'||seq_id,''),'N','N/A') UNIT_COUNT,
c024 hms_flag,
decode(c050,'Y',apex_item.checkbox(21,'Y','id="f21_'||seq_id||'" style="background-color:#FBEC5D; " onClick="alterYes('||seq_id||');" onKeyPress="alterYes('||seq_id||');"',c021),'N','N/A') FinsAttached,
decode(c050,'Y',apex_item.checkbox(22,'N','id="f22_'||seq_id||'" style="background-color:#FBEC5D;" onClick="alterNo('||seq_id||');" onKeyPress="alterNo('||seq_id||');"',c022),'N','N/A') FinsNotAttached,
decode(c050,'Y',apex_item.checkbox(23,'U','id="f23_'||seq_id||'" style="background-color:#FBEC5D;" onClick="alterUnk('||seq_id||');" onKeyPress="alterUnk('||seq_id||');"',c023),'N','N/A') FinsUnknown,
decode(c050,'Y',apex_item.textarea(28,c028,3,null,null,'f28_'||seq_id,''),'N','N/A') Explanation,
decode(c024,'N',apex_item.select_list_from_LOV(29,c029,'HMSNATURE','onchange="saveNature('||seq_id||')"','YES','A','-- Select Nature of Sale --','f29_'||seq_id,''),'U',apex_item.select_list_from_LOV(29,c029,'HMSNATURE','onchange="saveNature('||seq_id||')"','YES','A','-- Select Nature of Sale --','f29_'||seq_id,''),'Y','N/A') Nature_Of_Sale,
decode(c020,'Y',
apex_item.select_list_from_LOV(40,c040,'HMS_AREA_CODE','style="background-color:#FBEC5D;"',null,null,null,'f40_'||seq_id,''),
'N','N/A') HMS_AREA_CODE,
c020,c050,
decode(c020,'Y',
apex_item.text(41,TO_NUMBER(c041),5,null,null,'f41_'||seq_id,''),
'N','N/A') Sale_Price
from apex_collections
where collection_name = 'SPECIES_COLLECTION' order by seq_id
I have noticed the following:
when I change column C011 (price) the following values are set in the dynamic action:
P110_ID = f11_1
P110_VALUE = whatever I change the price to.
when I change the column C024 (hms_flag), the following values are set:
P110_ID = f03_0001
P110_VALUE = whatever I change hms_flag to.
the region is refreshed in my dynamic action, and the change for hms_flag does not hold. I have tested the SQL query that generates the value for v_SEQ in the dynamic action. In both a change to price and HMS_FLAG it appears valid
select ltrim(substr(:p110_ID,5,4),'0') into v_seq from dual;
if f11_1, v_seq:= 1
if f03_0001, v_seq := 1
thank you!solved. sort of.
field c024 references f03.
the Dynamic ACtion, step 4 calculates v_member by taking a substring of P110_ID...and in all other fields, the column and the field (fxx) are the same value....except for c024.
I am not certain exactly how to resolve, but see the problem.
Maybe you are looking for
-
I downloaded IOS 7.1 on my ipad. Now I can't open Game Center or access my friends lists in the games I play. My ipad is about 3 years old. What is the fix?
-
Hi, Something went wrong when i tried to upgrade to 10.5 and now I can't use iTunes. It says that the folder My Music contains an invalid character and although I've tried uninstalling all apple software and re-installing I can't uninstall/repai
-
Oracle Virtual Box SOA/BPM
Hi All, Excuse me if i am on wrong category. I am trying to install Oracle SOA Suite/BPM Suite VirtualBox Appliance and download all the part of zip files oel5u5-64bit-soabpm-11gr1-ps5-2-0-M.7z.001 oel5u5-64bit-soabpm-11gr1-ps5-2-0-M.7z.002 oel5u5-64
-
IMovies in my 'Movies' folder don't appear in "Media Movies" in iDVD
I am creating a DVD with 16 small iMovie files. They have been saved into the 'Movies' folder on my computer and play fine. When I am in iDVD, I can't add these movies. I have tried importing them from iDVD, they don't import. I have tried dragging t
-
Black Circle on Laptop Monitor
I recently purchased a W520 with 6 GB of RAM and the Nvidia Quadro 1000M Graphics Card. Occasionally a black circle appears in the upper left hand corner of my laptop monitor as shown in the enclosed image. Does anyone know what this is from? It app