How can I allow for query mode?

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;
geeta_m9Asked:
Who is Participating?
 
jrb1Connect With a Mentor Commented:
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
 
jrb1Commented:
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
 
sathyagiriCommented:
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
Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

 
geeta_m9Author Commented:
Jrb1, where would I put that code? Would I put it in the WHEN_RADIO_CHANGED trigger?
0
 
geeta_m9Author Commented:
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
 
jrb1Commented:
You'd put that on the ON-ERROR trigger on your form.
0
 
kretzschmarCommented:
?? 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
 
jrb1Commented:
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
 
kretzschmarCommented:
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
 
sathyagiriCommented:
You will put it in the ENTER-QUERY_MODE trigger I guess. Not sure.
0
 
kretzschmarConnect With a Mentor Commented:
hmm, sorry not sure about above,

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

meikl ;-)
0
 
geeta_m9Author Commented:
I'll try testing  the above code and get back to you.
0
 
geeta_m9Author Commented:
Jrb1, your suggestion works! Thank you! Also thanks for your help, kretzschmar and sathyagiri
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.