ADF UIX - confirm delete via javascript

Hi <once again>
I have an UIX web page with a delete button as follows:
<submitButton text="Delete" model="${bindings.Delete}" id="Delete1" event="action" onClick="javascript:confirmDelete()"/>
When the user clicks the button the following javaScript fires:
<script>
<contents>
function confirmDelete()
return confirm("Okay to delete record?");
</contents>
</script>
It's my understanding if the user clicks the delete button, then clicks the "cancel" button in the javascript confirmation, the function should return false and the delete operation will not occur.
However in testing this, clicking on either option in the javascript confirmation results in the delete executing.
What am I doing wrong?
My environment is JDev 9.0.5.2.
Cheers,
CM.

Hi Rade,
just extend your event handler for the "Delete" event:
    <event name="action" source="Delete0">
      <compound>
        <invoke method="doIt" javaType="oracle.jbo.uicli.binding.JUCtrlActionBinding" instance="${bindings.Delete}"/>
        <invoke method="doIt" javaType="oracle.jbo.uicli.binding.JUCtrlActionBinding" instance="${bindings.Commit}"/>
      </compound>
    </event>Regards,
Georg

Similar Messages

  • ADF UIX - programmatically deleting rows

    Hi gang
    I'm attempting to programmatically delete rows from an exposed VO client-method as follows:
    public void deleteRecord(String cesId) {
      ApplicationModule am = this.getApplicationModule();
      ViewObject voCes = am.findViewObject("ClinicalDataElementSetsView1");
      ViewObject voDcv = am.findViewObject("DacCesView1");
      Object [] keyValues = new Object[1];
      keyValues[0] = cesId;
      Row[] rowsCes = voCes.findByKey(new Key(keyValues), 1);
      Row deleteRowCes = rowsCes[0];
      voCes.setCurrentRow(deleteRowCes);
      voCes.removeCurrentRow();
      Row currentRowDcv = voDcv.getCurrentRow();
      voDcv.removeCurrentRow();  
      am.getTransaction().commit();
    }However when requerying the UIX screen that shows the relating data, the records are still there? What am I doing wrong? Should I be calling voCes.removeCurrentRowFromCollection() instead?
    Any help appreciated.
    Cheers,
    CM.
    PS. JDev 10.1.2

    I got around this by retreiving the DBTransaction and executing a SQL Delete statement on the data.

  • Confirmation pop-ups - only via javascript?

    I want to have a confirmation box pop-up when I have changed a field in a form and pressed the submit button.
    Looking through this forum, all I've found is confirming deletions with javascript via a URL target:
    javascript:confirmDelete('Are you sure you want to change the password?');
    This gives me a deletion error:
    ORA-20001: Invalid action DELETE on this object. (U)
    Error Unable to process row of table USERS.
    OK
    presumably because I'm not deleting anything - I just want to confirm my change.
    Do we always need to use javascript for confirmation pop-ups?
    If not, how else can we achieve this?
    How do we make the pop-up dependent upon at least one field value being changed?
    How do I get the pop-up to ask for a Yes/No response instead of Cancel/Yes options?
    Any help on this would be greatly appreciated.

    "Looking through this forum, all I've found is confirming deletions with javascript via a URL target:
    javascript:confirmDelete('Are you sure you want to change the password?');
    This gives me a deletion error... presumably because I'm not deleting anything - I just want to confirm my change."
    The definition of the javascript function is: function confirmDelete(msg,req). It takes an optional second parameter called req. This specifies the REQUEST value that should be set when the user clicks OK on the confirm pop-up. If you omit this second parameter in your call to the javascript function a request value of 'Delete' is set. This is why you are receiving your error. You should set the second parameter to be some custom REQUEST value.
    "Do we always need to use javascript for confirmation pop-ups?"
    For popups of this sort the answer, in short, is "yes". There are no other client-side languages that work cross-browser like javascript. You could avoid javascript (and popups) altogether if you wanted by just having an intermediary Apex page with buttons representing whatever actions you want the user to be able to perform, e.g. "Yes", "No" and "Cancel".
    "How do I get the pop-up to ask for a Yes/No response instead of Cancel/Yes options?"
    See this thread for a discussion on this topic: Re: Javascript Yes & No buttons
    Andy

  • Making a delete commit automatically with ADF BC, Struts and ADF UIX

    I'm trying to create a delete action that commits to the database automatically using ADF Business Components, Struts and ADF UIX.
    I have a browse page from which the user can view all records in the table, and perform edit, create and delete actions on the data.
    When the user selects a record and clicks edit they are taken to a screen where they can amend the details of that record. Create works in a similar way, but the create action on the view object is invoked before taking the user to the edit page (this is done by linking the browse page to an ADF DataAction (bound to Create) on the Struts page flow diagram, and then linking the ADF DataAction to the edit page).
    When the user clicks submit on the edit page, the container follows a forward from the edit page to an ADF DataAction bound to the Commit method, and then from there a forward back to the browse page.
    This seems to work fine for edit and create, but when I try to do something similar for delete, it behaves unpredictably - sometimes the delete is committed to the database, sometimes not.
    To be more specific, the way I have tried to implement the auto commit delete is as follows:
    There is a UIX submitButton on the browse page called Delete. When clicked, this button triggers an event, which is caught by an event handler inside the page. The event handler causes the UIX servlet to take a forward to an ADF DataAction bound to the Delete method on the relevant view object. It thens follows a forward from the previously mentioned DataAction to another ADF DataAction bound to the Commit method for the application module. There is then a forward leading back to the browse page.
    Has anyone else encountered similar problems?

    did you figure this out?

  • ADF UIX and Javascript

    Hello,
    I am new in ADF UIX...
    I have a table in ADF UIX and I would like to use some my javascript functions. I know I have to set: <table proxied="true">....</table> but where I can write my functions, in an included file ? I mean, how does the interaction between the XML configuration file and javascript work ?
    Thank in advance,
    Henry

    Hi Rade Todorovich,
    As mentioned previously, if you had placed the javascript as indexed child of head element it would be fine.
    <Head> is named child of <metaContainer> which inturn is named child of <document> element. The example below should make it clear.
    This is how the UIX document would be
    <?xml version="1.0" encoding="windows-1252"?>
    <page xmlns="http://xmlns.oracle.com/uix/controller"
    xmlns:ui="http://xmlns.oracle.com/uix/ui"
    xmlns:ctrl="http://xmlns.oracle.com/uix/controller"
    xmlns:html="http://www.w3.org/TR/REC-html40"
    expressionLanguage="el">
    <content>
    <dataScope xmlns="http://xmlns.oracle.com/uix/ui">
    <provider>
    <!-- Add DataProviders (<data> elements) here -->
    </provider>
    <contents>
    <document>
    <metaContainer>
    <!-- Set the page title -->
    <head title="test">
    <contents>
    <!-- case 1 -->
    <script source="./cabo/js/test.js"/>
    <script>
    <contents>
    function theFunction()
    alert('the function');
    </contents>
    </script>
    </contents>
    </head>
    </metaContainer>
    <contents>
    <body>
    <contents>
    <form name="form0">
    <!-- case 2 -->
    <contents>
    <script>
    <contents>
    function hi()
    alert('hi');
    </contents>
    </script>
    <button text="call-hi" name="fn" onClick="return hi();"/>
    <button text="call-theFunction" name="fn1" onClick="return theFunction();"/>
    </contents>
    </form>
    </contents>
    </body>
    </contents>
    </document>
    </contents>
    </dataScope>
    </content>
    <handlers>
    <!-- Add EventHandlers (<event> elements) here -->
    </handlers>
    </page>
    There are two usages:
    Case 1
    In your html it would just appear the way you would normally write a JS function with in the head
    <html>
    <head>
    <title></title>
    <META>
    <script language="javascript" src="./cabo/js/test.js">
    <!-- case 1-->
    <scirpt language="javascript">
    theFunction()
    </script>
    </head>
    <!-- case 2 -->
    <form ....>
    </form>
    <script language="javascript">
    function hi()
    alert('hi');
    </script>
    </html>
    Case 2
    As such <script> element can occur in HTML document.
    as mentioned in http://www.w3.org/TR/html401/interact/scripts.html#h-18.2.1
    In the same way UIX also allows the use of script element with in its <body> element.
    With case 2 you can see the way the script gets inlined in the HTML document. Please run the UIX and view source for the rendered page. It should become obvious.
    Thanks,
    Vijay Venkataraman

  • ADF UIX Partial page rendering

    Hi
    I am facing a mysterious problem with partial page rendering in ADF UIX.
    My page contains a <header> H1 and inside this there are two headers(H2 and H3).
    The partial page rendering is in the header H2 and is working fine.
    When i remove the below header H3 the partial page rendering ceases to work and get stuck.
    Pasting the full code below. Please suggest.
    <?xml version="1.0" encoding="windows-1252"?>
    <!-- $Header: registration.uix 115.4.51.4 2009/12/14 13:10:05 kcthirum noship $ -->
    <page xmlns="http://xmlns.oracle.com/uix/controller"
    xmlns:ui="http://xmlns.oracle.com/uix/ui"
    xmlns:ctrl="http://xmlns.oracle.com/uix/controller"
    xmlns:html="http://www.w3.org/TR/REC-html40"
    xmlns:myTemplate="http://xmlns.oracle.com/xhub"
    xmlns:bc4j="http://xmlns.oracle.com/uix/bc4j"
    xmlns:data="http://xmlns.oracle.com/cabo/marlin" expressionLanguage="el">
    <!--This UIX page is used as a tutorial page for new developers, which is why it has a lot of comments-->
    <!--This section describes the ApplicationModule used by this page, and any View Objects that are used to display UI components or are used in any of the event handlers-->
    <bc4j:registryDef>
    <!-- XhubRegAM is the application module used by the entire Registration flow. defFullName is just the class. configName is the Configuration, which always has the pattern <AM name>Local -->
    <bc4j:rootAppModuleDef name="XhubRegAM"
    defFullName="oracle.apps.snw.tpadmin.server.XhubRegAM"
    configName="XhubRegAMLocal" releaseMode="stateful">
    <bc4j:viewObjectDef name="TpProfilesRegVO" rangeSize="1" autoCreate="false"/>
    <bc4j:viewObjectDef name="UsersRegVO" rangeSize="1" autoCreate="false"/>
    <!--IdentifierDomainsView drives the dropdown list of Identifier Types-->
    <bc4j:viewObjectDef name="IdentifierDomainsView" rangeSize="20"/>
    <!--XhubTerritoriesTlView drives the dropdown list of Countries-->
    <bc4j:viewObjectDef name="XhubTerritoriesTlView" rangeSize="300"/>
    </bc4j:rootAppModuleDef>
    </bc4j:registryDef>
    <!--We import the template file xhub.uit, which has code to display the tabs, subtabs, global buttons, etc., appropriately-->
    <templates xmlns="http://xmlns.oracle.com/uix/ui">
    <templateImport source="xhubtpadmin.uit"/>
    </templates>
    <content>
    <!--in this section we define all of the methods and ResourceBundle classes that we want to reference as data sources in our page-->
    <dataScope xmlns="http://xmlns.oracle.com/uix/ui"
    xmlns:data="http://xmlns.oracle.com/uix/ui">
    <provider>
    <!--We use the TextProvider class to display ANY text to the user. All text is controlled in the database and cached on the middle tier. This allows for translation and for customization of text-->
    <data name="textSource">
    <bundle class="oracle.apps.snw.uicommon.TextProvider"/>
    </data>
    <!--This method provides information about the hub-->
    <data name="adminInfo">
    <method class="oracle.apps.snw.tpadmin.webui.AdminInfo"
    method="getAdminInfo"/>
    </data>
    </provider>
    <contents>
    <document>
    <!--This section defines the html metadata, usually just the page title-->
    <metaContainer>
    <head title="${textSource.REGISTRATION}"/>
    </metaContainer>
    <contents>
    <body>
    <contents>
    <!--This next tag indicates that everything inside of it should be encapsulated in the "rootChild" node of the template page-->
    <myTemplate:xhubTpAdminPageLayout selectedTab="1">
    <contents>
    <!-- this will contain any validation errors after form submission -->
    <messageBox automatic="true"/>
    <!--The form tag is necessary for any kind of form handling. This particular form performs some javascript validation before submitting-->
    <form name="reg" method="POST">
    <contents>
    <!--The javascript that is executed on form submission-->
    <!-- we cannot implicitly determine that events will be triggered because submit buttons are outside the form scope, so add the placeholder explicitly -->
    <formParameter name="event"/>
    <!-- define the bc4j scope of all child elements-->
    <bc4j:rootAppModuleScope name="XhubRegAM">
    <contents>
    <!-- a top-level header -->
    <header text="${textSource.REGISTRATION}">
    <contents>
    <!-- always used OraInstructionText, not <tip>, for explanation messages-->
    <styledText styleClass="OraInstructionText"
    text="${textSource.REG_PAGE_EXPLAIN}"/>
    <!-- a second-level header -->
    <header text="${textSource.REG_COMPANY_INFO}">
    <contents>
    <stackLayout>
    <contents>
    <!-- the labeledFieldLayout is the correct layout for vertically-stacked labeled fields-->
    <labeledFieldLayout id="TpPartialDetails" width="80%"
    labelWidth="40%">
    <contents>
    <messageChoice name="OracleAppsCustFlag"
    prompt="Oracle Apps Customer"
    required="yes" statePreserved="true"
    selectedValue="${ui:defaulting(uix.pageProp.OracleAppsCustFlag, 'select')}">
    <primaryClientAction>
    <firePartialAction event="buyorsup"
    targets="TpPartialDetails"
    formSubmitted="true"
    unvalidated="true"/>
    </primaryClientAction>
    <contents>
    <option text="-select-" value=""/>
    <option text="${textSource.YES}" value="Y"/>
    <option text="${textSource.NO}" value="N"/>
    </contents>
    </messageChoice>
    <messageTextInput prompt="${textSource.ORACLE_CSI_Q}"
    name="OracleCsi"
    text="${uix.pageProp.OracleCsi}"
    rendered="${ui:defaulting(uix.pageProp.OracleCsiRender, 'false')}"/>
    <messageTextInput prompt="${textSource.YOUR_TP_NAME}"
    name="TpName"
    tip="${textSource.YOUR_TP_NAME_TIP}"
    required="no"
    text="${uix.pageProp.TpName}"
    rendered="${ui:defaulting(uix.pageProp.TradeswithTPRender, 'false')}"/>
    <messageTextInput prompt="${textSource.YOUR_TP_ALIAS}"
    name="TpAlias"
    tip="${textSource.YOUR_TP_ALIAS_TIP}"
    required="no"
    text="${uix.pageProp.TpAlias}"
    rendered="${ui:defaulting(uix.pageProp.TradeswithTPAliasRender, 'false')}"/>
    </contents>
    </labeledFieldLayout>
    </contents>
    </stackLayout>
    </contents>
    </header>
    <!--level-2 header-->
    <header text="${textSource.TP_DEFAULT_CONTACT_INFO}">
    <contents>
    <labeledFieldLayout width="80%" labelWidth="40%">
    <contents>
    <!--all of these fields default to the corresponding ctrl:page value if the user has entered a value. These values are set up in the register() handler-->
    <messageTextInput prompt="${textSource.PASSWORD_PROMPT}"
    name="Password" id="Password"
    required="yes" secret="true"
    maximumLength="32"
    text="${uix.pageProp.Password}"/>
    <messageTextInput prompt="${textSource.PASSWORD_CONFIRM_PROMPT}"
    name="PasswordConfirm"
    id="PasswordConfirm" required="yes"
    secret="true" maximumLength="32"
    text="${uix.pageProp.PasswordConfirm}"/>
    </contents>
    </labeledFieldLayout>
    </contents>
    </header>
    </contents>
    </header>
    </contents>
    </bc4j:rootAppModuleScope>
    <spacer height="10"/>
    <!--message indicating how we indicate required fields-->
    <inlineMessage required="yes"
    prompt="${textSource.REQUIRED_FIELD}"/>
    </contents>
    </form>
    </contents>
    <!--the contents of this tag will appear below the page-->
    </myTemplate:xhubTpAdminPageLayout>
    </contents>
    </body>
    </contents>
    </document>
    </contents>
    </dataScope>
    </content>
    <!--event handlers-->
    <handlers>
    <!--This event is called by pressing the submit button-->
    <event name="continue">
    <bc4j:findRootAppModule name="XhubRegAM">
    <method class="oracle.apps.snw.tpadmin.webui.RegistrationHandlers"
    method="register"/>
    </bc4j:findRootAppModule>
    </event>
    <!--This event is called by pressing the Cancel button-->
    <event name="cancel">
    <!-- finding the ApplicationModule causes it to be checked out from the ApplicationPool. It is released after rendering completes. -->
    <bc4j:findRootAppModule name="XhubRegAM">
    <!-- rollback the current transaction -->
    <bc4j:rollback/>
    <!-- forward to the summary page -->
    <go name="main"/>
    </bc4j:findRootAppModule>
    </event>
    <!--the * event is called whenever the page is accessed and no other event is called-->
    <event name="buyorsup">
    <bc4j:findRootAppModule name="XhubRegAM">
    <!--This method sets the context of the page, namely the scope of the country dropdown view object-->
    <method class="oracle.apps.snw.tpadmin.webui.RegistrationHandlers"
    method="isBuyerorSupplier"/>
    </bc4j:findRootAppModule>
    </event>
    <event name="*">
    <bc4j:findRootAppModule name="XhubRegAM">
    <!--This method sets the context of the page, namely the scope of the country dropdown view object-->
    <method class="oracle.apps.snw.tpadmin.webui.RegistrationHandlers"
    method="setContext"/>
    </bc4j:findRootAppModule>
    </event>
    </handlers>
    </page>
    Please suggest if you know of any documentation on ADF UIX partial page rendering.
    ADF UIX has very little documentation online and finding it hard to debug this issue.
    It ll be of great help.
    Thanks
    Kamal

    Hi Jason,
    As of EA9, all rendered components support a partialTriggers attribute. This attribute takes a list of master component IDs. If any of the master components are updated via a partial event, the dependent component will be rerendered in the partial update.
    If you are on an earlier release, you should upgrade.
    Thanks,
    Jeanne

  • ADF UIX doSelect override with PL/SQL fails to allow insert

    I've been trying to create an ADF-UIX web app for simple insert/update/delete of records to a table.
    The schema simply has 2 tables - master and detail where the detail pk is made up of the master id and a start date:
    CREATE TABLE master (
    id NUMBER NOT NULL,
    name VARCHAR2 (10) NOT NULL,
    CONSTRAINT pk_master
    PRIMARY KEY ( id ));
    CREATE TABLE detail (
    id NUMBER NOT NULL,
    start_date DATE NOT NULL,
    name VARCHAR2 (10) NOT NULL,
    description VARCHAR2 (100),
    CONSTRAINT pk_detail
    PRIMARY KEY ( id, start_date ));
    ALTER TABLE detail ADD CONSTRAINT d_m_fk FOREIGN KEY (id) REFERENCES master(id)
    This works fine when I create it in a similar manner to that described in the "Complete ADF UIX Application ..." tutorial doc.
    http://www.oracle.com/technology/products/jdev/collateral/tutorials/9050/adfuix_tut.html
    I then tried to override the ADF doSelect and doDML methods as outlined in ADF_BC_StoredProcedures.zip example app allowing me to use PL/SQL stored pkg for dml.
    http://www.oracle.com/technology/sample_code/products/jdev/10g/ADF_BC_StoredProcedures.zip
    On trying to insert a new row my web app now fails with a null pointer exception when I press the Submit button. The app calls doSelect->handleStoredProcSelect which fails to get the value of a column.
    void handleStoredProcSelect() {
    CallableStatement st = null;
    try {
    String stmt = "BEGIN test_api.do_select(?,?,?,?,?); END;";
    DBTransaction tr = getDBTransaction();
    st = tr.createCallableStatement(stmt,1);
    ## This line works, I'm guessing because the value is populated from the master record I've selected in the form ...
    st.setLong(1,getTestId().longValue());
    ##FAILS HERE st.setDate(2,getStartDate().dateValue());
    Update,delete still work ok. And if I run the test app (right click on AppModule and select Test) all works ok.
    I'm not sure why doSelect is called on an insert so I commented out:
    doSelect
    handleStoredProcSelect
    handleStoredProcLock
    compareOldAttrTo
    Web App now lets me insert as expected.
    So finally ....my question is:
    Whilst the app now works does commenting out the doSelect leave me open to problems I haven't thought off
    and if not if you did want to use it how can you allow inserts?
    Any thoughts or similar experiences appreciated ...
    Cheers
    Ian

    I've been trying to create an ADF-UIX web app for simple insert/update/delete of records to a table.
    The schema simply has 2 tables - master and detail where the detail pk is made up of the master id and a start date:
    CREATE TABLE master (
    id NUMBER NOT NULL,
    name VARCHAR2 (10) NOT NULL,
    CONSTRAINT pk_master
    PRIMARY KEY ( id ));
    CREATE TABLE detail (
    id NUMBER NOT NULL,
    start_date DATE NOT NULL,
    name VARCHAR2 (10) NOT NULL,
    description VARCHAR2 (100),
    CONSTRAINT pk_detail
    PRIMARY KEY ( id, start_date ));
    ALTER TABLE detail ADD CONSTRAINT d_m_fk FOREIGN KEY (id) REFERENCES master(id)
    This works fine when I create it in a similar manner to that described in the "Complete ADF UIX Application ..." tutorial doc.
    http://www.oracle.com/technology/products/jdev/collateral/tutorials/9050/adfuix_tut.html
    I then tried to override the ADF doSelect and doDML methods as outlined in ADF_BC_StoredProcedures.zip example app allowing me to use PL/SQL stored pkg for dml.
    http://www.oracle.com/technology/sample_code/products/jdev/10g/ADF_BC_StoredProcedures.zip
    On trying to insert a new row my web app now fails with a null pointer exception when I press the Submit button. The app calls doSelect->handleStoredProcSelect which fails to get the value of a column.
    void handleStoredProcSelect() {
    CallableStatement st = null;
    try {
    String stmt = "BEGIN test_api.do_select(?,?,?,?,?); END;";
    DBTransaction tr = getDBTransaction();
    st = tr.createCallableStatement(stmt,1);
    ## This line works, I'm guessing because the value is populated from the master record I've selected in the form ...
    st.setLong(1,getTestId().longValue());
    ##FAILS HERE st.setDate(2,getStartDate().dateValue());
    Update,delete still work ok. And if I run the test app (right click on AppModule and select Test) all works ok.
    I'm not sure why doSelect is called on an insert so I commented out:
    doSelect
    handleStoredProcSelect
    handleStoredProcLock
    compareOldAttrTo
    Web App now lets me insert as expected.
    So finally ....my question is:
    Whilst the app now works does commenting out the doSelect leave me open to problems I haven't thought off
    and if not if you did want to use it how can you allow inserts?
    Any thoughts or similar experiences appreciated ...
    Cheers
    Ian

  • ADF UIX cancel/rollback button?

    Hi
    We're having a fair amount of trouble implementing a "cancel" button in our ADF UIX application (JDev 10.1.2). Apologies to those who read this same post on the ODTUG mailing list..... I'm hunting for even a hint of an answer before I approach Oracle Support.
    To set the scene, we have a parent VO "Departments" with child VOs "Dispatch" and "Agency". Dispatch also has a FK to Agency.
    We have a UIX view-screen that displays in a master-detail relationship Departments and Dispatch. From this screen the user can select the edit button, which navigates to an input-form screen to edit the currently selected Dispatch record.
    The Dispatch record has effective_from and effective_to dates. The underlying EO has a MethodValidator that ensures the from date <= the to date.
    On the edit screen we currently provide 2 buttons, Ok and Cancel. The Ok submitButton is bound to the commit binding, and navigates back to the view page via a struts link on completion.
    If the user selects the ok button and MethodValidator returns an error, the edit page's MessageBox displays the error and the user remains at the edit page until they resolve the issue.
    Our problems start with the cancel button.
    Originally we implemented the Cancel button as a simply "button" that navigated back to the view page. This worked well as the changes are never submitted, and on returning to the view page the record is presented in it's original state before being edited, thus the user's changes have been "cancelled".
    However if the user was editing an existing record, entered invalid dates that violated the MethodValidator, clicked ok and saw the MethodValidator error, then clicked cancel, on returning to the view page, any changes to the underlying record are visible including the invalid dates. I believe this occurs because the record has been submitted to the mid-tier by the ok button, and as such the changes now lies in the mid-tier.
    Given that a cancel "button" which simply navigates back to the view page is not a viable solution, we decided to investigate using a rollback button on our edit page, which then navigated back to the view page.
    There is a nasty side affect in using the rollback functionality, and has been a continuous frustration mentioned on OTN. When rollback is issued, it appears all iterators in the running application have their current row reset to the first element.
    This is a pain as in our example this results in not only the Dispatch iterator being reset to the first element, but also the parent Departments iterator, and presumably all other iterators in the application too. This would be an extreme annoyance to the user in every time they selected cancel, they would then need to navigate back to the correct Departments and Dispatch record if they wanted to make a different change.
    As such it is necessary to write some code to store the iterator positions before issuing the rollback, rolling-back, then restoring the iterator positions from the saved states.
    Luckily we found some code on OTN to do this:
    ADF - cancel button not working in input form(add new row)?
    This mechanism appeared to work, but, then, we did find one problem.
    I described at the beginning that our Dispatch VO is not only related to Departments but also Agency. To cater for this in our edit screen by including a LOV bound <messageList>, which displayed the relating Agencies for the user to select from.
    In using the pinched OTN rollback code, in the same scenario as previously, when the user edits a record, invalidates the MethodValidator after clicking ok, then clicks cancel, on returning to the view page, the field in Dispatch that represents the Agency is incorrectly showing a numeric result such as 0, 1, 2 etc. We realised that the value being shown is the previous edit screen's <messageList> internal index number representing the value selected in the list, and not the actual value itself.
    We're note sure why the OTN rollback code is causing this to occur. Though it restores the Agency iterator's position, it shouldn't result in the <messageList> index being written to the underlying Dispatch agency field, but rather the value the <messageList> index represents.
    It appears to me we're caught between a "rock and a hard-place" here. The simple solution of using a cancel "button" doesn't work when errors are raised. The complex case of using a "rollback" button doesn't work due to the problem with the <messageLists>.
    My research on OTN shows the "cancel vs rollback" button is a common frustration. Can somebody help me in providing a satisfactory "cancel" button that I can use throughout my app please?
    Many thanks in advance.
    Chris Muir

    The stack:
    Class                     Method
    UsrEcvAmpdsViewRowImpl    setAgency
    UsrEcvAmpdsViewRowImpl    setAttrInvokeAccessor
    ViewRowImpl               setAttribute
    DCDataControl             setAttributeInRow
    DCJboDataControl          setAttributeInRow
    JUCtrlValueBinding        setAttributeInRow
    JUCtrlValueBinding        setInputValue
    JUCtrlValueBinding        setInputValue
    InitModelListener         _setInputValue
    InitModelListener         _doModelUpdate
    InitModelListener         eventStarted
    AbstractPageBroker        _fireUIXRequestEvent
    AbstractPageBroker        handleRequest
    BaseUIPageBroker          handleRequest
    PageBrokerHandler         handleRequest
    UIXServlet                doGet
    HttpServlet               service
    HttpServlet               service
    ResourceFilterChain       doFilter
    JAZNFilter                doFilter
    ServletRequestDispatcher  invoke
    ServletRequestDispatcher  forwardInternal
    ServletRequestDispatcher  forward
    RequestProcessor          doForward
    RequestProcessor          processForwardConfig
    RequestProcessor          process
    ActionServlet             process
    ActionServlet             doGet
    HttpServlet               service
    HttpServlet               service
    ResourceFilterChain       doFilter
    JAZNFilter                doFilter
    ServletRequestDispatcher  invoke
    ServletRequestDispatcher  forwardInternal
    ServletRequestDispatcher  forward
    RequestProcessor          doForward
    RequestProcessor          processForwardConfig
    RequestProcessor          process
    ActionServlet             process
    ActionServlet             doGet
    HttpServlet               service
    HttpServlet               service
    ResourceFilterChain       doFilter
    JAZNFilter                doFilter
    EvermindFilterChain       doFilter
    ADFBindingFilter          doFilter
    ServletRequestDispatcher  invoke
    ServletRequestDispatcher  forwardInternal
    HttpRequestHandler        processRequest
    HttpRequestHandler        run
    HttpRequestHandler        run
    ReleasableResourcePooledExecutor$MyWorker run
    Thread  runAt a wild guess, InitModelListener is causing the issue, because it's the first place where we can see a setInputValue occuring?
    To make this official I've raised a TAR (4613003.992) with Oracle Support with a cut down version of our app to work through the issue.

  • How can I add a watermark via JavaScript that includes the current datestamp?

    Part of my daily work process here is to scan in a huge stack of inbound mail. I then OCR the scans, delete the blank pages, and add a watermark. I've got a batch process set up for the first two steps, but I can't make a watermark for the datestamp itself and need to do so via JavaScript, but I have a luddite-level understanding of it.
    As of right now, these are my settings I'm using to add the datestamp:
    What I want to do is run a script to do the same thing and insert the current date where I have mm-dd-yy currently, but I don't have the first clue of where to start. Any help you could offer would be hugely appreciated

    You can use the doc.addWatermarkFromText() method as a JavaScript step in an Action.
    for example
    var dt = new Date();
    var stoday = (dt.getMonth() + 1) + '-' + dt.getDate() + '-' + dt.getFullYear();
    this.addWatermarkFromText({
    cText: "Deposit\r" + stoday,
    nTextAlign: app.constants.align.right,
    nHorizAlign: app.constants.align.right,
    nVertAlign: app.constants.align.top,
    nHorizValue: -72, nVertValue: -72
    See the SDK Help files for information on what all the parameters do.

  • ADF UIX Search Form - Is this a bug?

    I created a JDev 9.0.5.2 ADF UIX Search form from the component palette. I ran the page without making any changes. I chose the Find button which displayed the search criteria. I selected the delete button and then the create button, which created 2 blank records (possible bug?) in the search criteria table at the top. I selected one of the blank records and entered search criteria. I chose the submit button which changed the data in the search criteria table as it is supposed to do. I selected the other blank record, entered search criteria and submitted it. Again the data in the search criteria table was changed appropriately. I selected the delete button and the wrong record was deleted (bug?).
    Are these bugs?

    Hello,
    a similar sort of situation is created if you have a Read-only table on a page which drills down to an edit/create input form page. If you enable a create functionality you need to enable some way for the user to back out of the created record and clean up the newly created row. On the detail page (JobsEdit.do) i created a link to a custom event on the master page action (JobsView.do) like this:
    <button text="Cancel" destination="JobsView.do?event=cancelinput"/> In the Data Action class for the JobsView page i have a method defined as follows:
    public void onCancelinput(DataActionContext ctx)
        Row row = ctx.getBindingContainer().getApplicationModule().findViewObject("JobsView1").getCurrentRow();
        row.refresh(row.REFRESH_REMOVE_NEW_ROWS );
    }as a workaround, it sounds like you may need put some manual controls in place to tightly control any newly created rows which have/will not been used. I don't know if this will resolve the deleting wrong record problem...
    regards,
    Brenden

  • Oracle ADF UIX tutorial wont commit changes

    I'm following the tutorial "Developing Applications with Oracle ADF UIX"
    http://otn.oracle.com/obe/obe9051jdev/uixTutorial/lesson_UIX.htm
    The tutorial works apart from if I create/update or delete a record its not commited to the database.
    Where I'm I going wrong?
    Thanks for any help.

    create/update should be commited to database due to method "Commit" that you drop into commit data action, and delete won't be commited, you should additionaly create "Commit" button on your page or use another way to commit.

  • ADF UIX page displays data which is not in database

    Using JDeveloper 10.1.2, I created an ADF UIX browse page. It worked correctly, showing all 200 rows that were in the database table. I then used JDev SQLWorksheet to delete 190 rows, so 10 rows remain. Now when I test the browse page, it still shows all 200 rows rather than the 10 rows which are in the table. I exited and restarted the application but the problem persists. Help.

    Did you perform commit command from SQLWorksheet?
    If not, perform it!

  • ADF/UIX - How NOT to loose currentRow? Iterator issue?

    Hi All,
    I'm having a bit of a problem in keeping maintaining the state of a couple of views across pages; I'm hoping I'm just doing this wrong and someone can point me in the right direction.
    Environment: ADF/UIX
    1) From the first page the views (used in dropdowns) are manipulated and the current row set appropriately (I traced the app module and rows are indeed pointing where they should)
    2) In an event handler <go name="Page2"/> is executed
    3) Page2 references the views from the datacontrol used in Page1 (note that identical bindings are used) but the current row is lost. Tracing through the app module confirms that the current row is set to the first row.
    Q1) Is there a way to keep iterators from being reset?
    if not...
    Q2) If not, is there a method on the AppModule on Views that can be overloaded to set the current row BEFORE the page displays?
    Thanks in advance!
    /SFL

    Thanks for the prompt reply Gabrielle!
    I did a bit more testing and in fact it's one view which was causing the problem. A new row is created (and commited) for this view through the AppModule like this:
    ViewXRowImpl row = vo.createRow();
    row.setX( "...");
    row.setY( "...");
    vo.insertRow(row);
    vo.setCurrentRow(row);
    try{
       this.getTransaction().commit();
      }catch(Exception e)
        e.printStackTrace();
      }I hadn't realized that the iterator would get reset after a commit. Fetching the key before the commit and doing a findbykey afterwards solved the problem.
    I think I'll implement a base view class that uses beforeCommit and afterCommit to set the iterator back to the desired location. I'm a bit surprised that it isn't the default behaviour though...
    Thanks again for the help!

  • ADF UIX with ADF Binding without Struts

    After trying the CRUD tutorial from the "Complete ADF UIX Application (Browse, Create, Update, Delete)" -(http://otn.oracle.com/products/jdev/collateral/tutorials/9050/adfuix_tut.html), I found it may be thousands of struts actions in my upcoming project.
    It will be difficult to merge and sync my team members works and the usefulness of StrutsPageFlow diagram will decrease severely although it is very convenient to drag data control operations to struts data actions without coding.
    I am trying to use ADF Controller event handler as my page flow engine to eliminate these drawbacks.
    When I use ADF controller as my page flow engine, if I have to pass ui model reference, initialize binding container, get binding container, get application module and refresh binding container, ... manually in my event handler codes just like the BasicDataAction class does in "ADF data binding primer (http://www.geocities.com/smuench/adfprimer/)"?
    Is there any document that cover this information or any suggestions?
    Daniel

    ADF Controller questions should be posted in the JDeveloper forum.

  • ADF UIX: How to define a binding's subtype?

    In an ADF-UIX project, we have deleted a binding which had been automatically created by a drag and drop operation that generated a multirecord master-detail form.
    When we try to recreate the binding using the binding editor (in application navigator, mouse right click and select the ...UIModel.xml file -> Create Binding), we choose to create a binding of type "range" (since the icon is of the same type than the icons for bindings generated automatically for a multirecord detail), however we get a binding of subtype "DCTable" instead of a "DCHGrid". There doesn't seem to be any way to create a "DCHGrid" binding and the UIModel.xml file is not editable.
    The problem is that the DCTable doesn't render properly when the UIX form is run.
    Any suggestions?

    The reason for deleting it was because the Data Binding is not always correclty refreshed after a column is added to the underlying VO. Initially we thought it would be necessary to recreate the binding, but using the drag & drop method would have been costly as the form was complex and a lot had been modified after the initial drag & drop operation.
    The case where the refresh on the binding is not made is when the binding is displaying all the attributes available within the iterator. Surprisingly, if the binding is only using a subset of the attributes of the iterator, then a new attribute on the underlying VO is immediately displayed.

Maybe you are looking for