?
Solved

How can I allow for query mode?

Posted on 2006-07-18
13
Medium Priority
?
3,189 Views
Last Modified: 2008-01-09
I have a form which has three radio buttons, 'A', 'B' and 'F' which have a WHEN-RADIO-CHANGED trigger attached to them. When the user clicks on the 'F' radio button, I want it to take certain actions if the user is entering a new script into the form.The content of the trigger is listed below. However, the problem arises when the user is in query mode and clicks on the radio button, for example, if the user wants to do a search on scripts of type 'A', 'B' or 'F'. When this happens, the following error pops up: "FRM-41009: Function key not allowed. Press Ctrl+F1 for list of valid keys."  What I would like is for the code in the trigger to be bypassed if the user is in query mode by inserting an IF statement, e.g., IF "user NOT in query-mode THEN execute the code in the trigger." How do I check whether the user is in query mode?

Content of Trigger:

BEGIN
      IF :a.a_type = 'F' THEN
         GO_BLOCK('c_a');
             :a.a_columns := Null;
         Set_Status('P');
         IF :GLOBAL.database_instance <> 'MAIN' THEN
           set_item_property('a.a_reviewed_ind',enabled,property_true);
           set_item_property('a.a_reviewed_ind',update_allowed,property_true);
           GO_BLOCK('a');
         END IF;
      ELSE
            Set_Status('A');
            set_item_property('c_a.execute_script_btn', ENABLED, PROPERTY_TRUE);
            IF :GLOBAL.database_instance <> 'MAIN' THEN
          set_item_property('a.a_reviewed_ind',enabled,property_false);
          :a.a_reviewed_ind := 'N';
          :a.a_reviewed_user := Null;
          GO_BLOCK('a');
        END IF;
      END IF;
END;
0
Comment
Question by:geeta_m9
  • 4
  • 4
  • 3
  • +1
13 Comments
 
LVL 25

Expert Comment

by:jrb1
ID: 17131337
I haven't used forms, but I found this suggestion.  Create an on error trigger to capture the error:

DECLARE
  ERR_VAL NUMBER(5)     := ERROR_CODE;
  MSG     VARCHAR2(150)
          := SUBSTR('   '||ERROR_TYPE||'-'||TO_CHAR(ERR_VAL)||': '
                                     ||ERROR_TEXT,1,150);
BEGIN
  IF ERR_VAL=41009 THEN
      null;
  ELSE
    MESSAGE(MSG);
    RAISE FORM_TRIGGER_FAILURE;
  END IF;
END;
0
 
LVL 14

Expert Comment

by:sathyagiri
ID: 17131367
I don't think there is a direct way of doing it.

However you could set a global variable or pass a parameter to your form while in query mode and use that variable to base your if condition
0
 

Author Comment

by:geeta_m9
ID: 17131413
Jrb1, where would I put that code? Would I put it in the WHEN_RADIO_CHANGED trigger?
0
Nothing ever in the clear!

This technical paper will help you implement VMware’s VM encryption as well as implement Veeam encryption which together will achieve the nothing ever in the clear goal. If a bad guy steals VMs, backups or traffic they get nothing.

 

Author Comment

by:geeta_m9
ID: 17131437
Sathyagiri, so in other words, I would have to assign the global variable the value when the user presses the F7 key or is there any other way to do it?
0
 
LVL 25

Expert Comment

by:jrb1
ID: 17131445
You'd put that on the ON-ERROR trigger on your form.
0
 
LVL 27

Expert Comment

by:kretzschmar
ID: 17131463
?? you could read out a blockproperty which says that the block is currently in query-mode

well, no forms on hand, but i guess the property sounds like status

meikl ;-)
0
 
LVL 25

Expert Comment

by:jrb1
ID: 17131486
You also may be able to catch the error in the trigger code itself.

BEGIN
     IF :a.a_type = 'F' THEN
        GO_BLOCK('c_a');
           :a.a_columns := Null;
        Set_Status('P');
        IF :GLOBAL.database_instance <> 'MAIN' THEN
          set_item_property('a.a_reviewed_ind',enabled,property_true);
          set_item_property('a.a_reviewed_ind',update_allowed,property_true);
          GO_BLOCK('a');
        END IF;
     ELSE
          Set_Status('A');
          set_item_property('c_a.execute_script_btn', ENABLED, PROPERTY_TRUE);
          IF :GLOBAL.database_instance <> 'MAIN' THEN
         set_item_property('a.a_reviewed_ind',enabled,property_false);
         :a.a_reviewed_ind := 'N';
         :a.a_reviewed_user := Null;
         GO_BLOCK('a');
       END IF;
     END IF;
EXCEPTION
  WHEN ERROR_CODE=41009 THEN
     NULL
  ELSE
     RAISE Form_Trigger_Failure;
END;
0
 
LVL 27

Expert Comment

by:kretzschmar
ID: 17131495
a bit recherche on the net

BEGIN
   if get_block_property('c_a',STATUS) != 'QUERY' then -- inserted
     IF :a.a_type = 'F' THEN
        GO_BLOCK('c_a');
           :a.a_columns := Null;
        Set_Status('P');
        IF :GLOBAL.database_instance <> 'MAIN' THEN
          set_item_property('a.a_reviewed_ind',enabled,property_true);
          set_item_property('a.a_reviewed_ind',update_allowed,property_true);
          GO_BLOCK('a');
        END IF;
     ELSE
          Set_Status('A');
          set_item_property('c_a.execute_script_btn', ENABLED, PROPERTY_TRUE);
          IF :GLOBAL.database_instance <> 'MAIN' THEN
         set_item_property('a.a_reviewed_ind',enabled,property_false);
         :a.a_reviewed_ind := 'N';
         :a.a_reviewed_user := Null;
         GO_BLOCK('a');
       END IF;
     END IF;
  end if;  --inserted
END;

not tested

meikl ;-)
0
 
LVL 14

Expert Comment

by:sathyagiri
ID: 17131544
You will put it in the ENTER-QUERY_MODE trigger I guess. Not sure.
0
 
LVL 27

Assisted Solution

by:kretzschmar
kretzschmar earned 200 total points
ID: 17131548
hmm, sorry not sure about above,

the property could also be mode and the result 'ENTER-QUERY'
will validate tomorrow

meikl ;-)
0
 
LVL 25

Accepted Solution

by:
jrb1 earned 500 total points
ID: 17131578
You can try this....


BEGIN
   if :system.mode = 'ENTER-QUERY' then
     null;
   else      
     IF :a.a_type = 'F' THEN
        GO_BLOCK('c_a');
           :a.a_columns := Null;
        Set_Status('P');
        IF :GLOBAL.database_instance <> 'MAIN' THEN
          set_item_property('a.a_reviewed_ind',enabled,property_true);
          set_item_property('a.a_reviewed_ind',update_allowed,property_true);
          GO_BLOCK('a');
        END IF;
     ELSE
          Set_Status('A');
          set_item_property('c_a.execute_script_btn', ENABLED, PROPERTY_TRUE);
          IF :GLOBAL.database_instance <> 'MAIN' THEN
         set_item_property('a.a_reviewed_ind',enabled,property_false);
         :a.a_reviewed_ind := 'N';
         :a.a_reviewed_user := Null;
         GO_BLOCK('a');
       END IF;
     END IF;
   END IF;
END;

0
 

Author Comment

by:geeta_m9
ID: 17131635
I'll try testing  the above code and get back to you.
0
 

Author Comment

by:geeta_m9
ID: 17131743
Jrb1, your suggestion works! Thank you! Also thanks for your help, kretzschmar and sathyagiri
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

How to Unravel a Tricky Query Introduction If you browse through the Oracle zones or any of the other database-related zones you'll come across some complicated solutions and sometimes you'll just have to wonder how anyone came up with them.  …
Shell script to create broker configuration file using current broker Configuration, solely for purpose of backup on Linux. Script may need to be modified depending on OS-installation. Please deploy and verify the script in a test environment.
This video shows how to copy a database user from one database to another user DBMS_METADATA.  It also shows how to copy a user's permissions and discusses password hash differences between Oracle 10g and 11g.
This video shows how to copy an entire tablespace from one database to another database using Transportable Tablespace functionality.
Suggested Courses

850 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question