Validate a Multi Record Block.
Hello every body-
Would appreciate your inputs as to how to go about doing this.
I have a multi record block like below.
SEQ # THEMES PICK
1 THEME 1
2 THEME 2
3 THEME 3
4 THEME 4
5 THEME 5
6 THEME 6
The 'PICK' field is a check box, that the user will click on if he needs to select a particular 'THEME'.
I need to do the following validations ( I will be having a button something like INSERT BUTTON) at the bottom of the multi column block.
.. Only 3 THEMES are to selected.
.. If more than 3 THEMES are selected, need to show an alert stating that only 3 THEMES can be selected, allow the user to change selections.
.. If only 3 THEMES are selected, need to insert the selected THEMES into a table.
For example, in the above sitation, if the user picks 'THEMES' with SEQ# 2,4,5; then I need to insert the SEQ #, along with the other primary key (which is STUDENT ID) into the table.
Would really appreciate if any one could let me know how to do this.
Thanks for your time..
1) Make a hidden summarized number field called mycounter in the same block. Set the summarized function to sum, block to 'myblock', field to 'mycheckbox', calculation mode to "summary"
2) Make the checked and unchecked values of the check box 1 = checked and 0 = unchecked. Set the datatype of the checkbox to a number.
3) In the when-checkbox-changed of the checkbox put this code..
if :my.mycounter >= 4 then
message('Error: May only check 3 or less.');
:myblock.mycheckbox := 0;
end if;With this code they wont be able to check more than three rows. This is one piece of your puzzle anyway.
Message was edited by:
Mark Reichman
Similar Messages
-
How to do it in multi-record block
Hi all,
i have 1 text items in a multi-record block number of record displayed 10
and i have values like 100 , 50, 30 in first 3 records and in 5th record i want to put some value like
20 then i want to calculate all values like 100 + 50 + 30 +20 = 200 and i want to put the total value in a single record block.
but my problem is i cannot able to calculate all the value because for the totale value i have to
write a for loop to loop through the record
but go_block() is not working in post_change .
if any solution is there plz suggest.......Hi zeeshan
my problem is i cannot able to calculate all the value because for the total value
put the total value in a single record block.
First pls the following...
Guidelines for Working with Calculated Items Calculated items_
1- They are display-only control items.
2-Calculated items cannot be database items.
3.While you can set a calculated item's Enabled, Mouse Navigate, and Keyboard Navigable properties to Yes,
you cannot set the Insert Allowed or Update Allowed properties to Yes
Second Keyword: TOTAL is a reserved oracle key word... pls read the Details...
go_block() is not working in post_change .well u can use timers but no need for it u can reference block item but first u have to accumulate the values per record in WHEN-VALIDATE-ITEM TRIGGER in the last calculated item which is inserted by the user and assign it to the display item in ur current multi-record block :*block_name.total_item*.. as follow...
:block_name.total_item := :item1 + .... ; Then u create a second display item > no of records property = 1 , named e.g. final_summarized_totals
In order to summarize this total values accumulated in the multi-record display item named e.g. block_name.total_item
Finally using PRE-INSERT , PRE-UPDATE,PRE-DELETE Triggers to assign the value calculated into the display item * block_name.total_item* into the db_item into the previously mentioned Trigger Block-Level Off-course.
:block_name.total_db_tem := :i:block_name.final_summarized_totals ; Hope this helps...
Regards,
Amatu Allah -
How can I create a loop in a multi-record block (on the background)
I have a multi-record block.
In one item I change a value.
Upon this change, in the when-validate-item I would like to
change other records in the same block.
I planned to loop the block with go_record and to do my things
in each record. Unfortunately the go_record built-in is
restricted and cannot be used in a wvi-trigger.
Another approach can be to update the records in the database
and to perform an execute_query after this change. Also this
procedure cannot be used in a wvi.
How can I easily loop in a multi-record block???You can try to put loop with go_record in KEY-NEXT-ITEM on that
field.
Or if you change something and then press KEY-COMMIT you can
update another records in database and after commit do again
execute_query. Something like :
on KEY-COMMIT:
update_another_records;
commit_form;
execute_query; -
How to do validation on multi record block at run time...
Dear Friends,
I have to do validation at run time on multi record block.
If user tries to enter and save two or more records in same multi record block with same data at run time, it should not allow it and display a message like, " error : Records are having same(duplicate) values. "
I already did validation with the data coming from database table using cursor. But confused about how to do at run time(on one screen only) ??
Please, give details about how to check duplicate records on form block before saving it to the table ????
Regarding details would be greatly helpful.
thanks,Hi...Pankaj
thanx for your reply..
I already did validation for the data coming from table....
but I need to do it on form only...at run time...
exa...
In one multi record block
record no : column 1 : column 2 : column 3
1 abc 123 hi
2 abc 123 hi
so it should check on the form itself, here I m not getting data from table...I am just
navigating from first record to second using down arrow.
so, may be 2 possibilities.
1) when user navigates using tab to third record, it should say like two duplicate records.(may be like when validate record or item)
2) or when user tries to save, it should say two duplicate records.
so, everyting should take place on form screen only.....
waiting for your reply,
thanx... -
Check duplicate data entry in multi record block,which is a mandatory field
Dear all,
I have a situation where i have to check duplicate data entry(on a particular field,which is a mandatory field,i.e. it cannot be skipped by user without entering value) while data key-in in a Multi Record block.
As for reference I have used a logic,such as
1>In a When-Validate-Record trigger of that block I am assigning the value of that current item in Table type variable(collection type)
as this trigger fire every time as soon as i leave that record,so its assigning the value of that current time.And this process continues
then
2>In a When-Validate-Item trigger of that corresponding item(i.e. the trigger is at item level) has been written,where it compares the value of that current item and the value stored in Table type variable(collection type) of When-Validate-Record trigger.If the current item value is matched with any value stored in Table type variable I am showing a message of ('Duplicate Record') following by raise_form_trigger failure
This code is working fine for checking duplicate value of that multi record field
The problem is that,if user enter the value in that field,and then goes to next field,enter value to that field and then press 'Enter Query 'icon,the bolth Validate trigger fires.As result first when-validate record fires,which stores that value,and then when-validate-item fires,as a result it shows duplicate record message
Please give me a meaningful logic or code for solving this problem
Any other logic to solve this problem is also welcome@Ammad Ahmed
first of all thanks .your logic worked,but still i have some little bit of problem,
now the requirement is a master detail form where both master and detail is multirecord ,where detail cannot have duplicate record,
such as..........
MASTER:--
A code
A1
A2
DETAIL:--
D code
d1
d2 <-valid as for master A1 , detail d1 ,d2 are not duplicate
d2 <--invalid as as for master A1 , detail d2 ,d2 are duplicate
validation rule: A Code –D Code combination is unique. The system will stop users from entering duplicate D Code for a A Code. Appropriate error message will be displayed.*
actually i am facing a typical problem,the same logic i have been applied in detail section ,its working fine when i am inserting new records.problem starts when i query,after query in ' a ' field say 2 records (i.e. which has been earlier saved) has been pasted,now if i insert a new record with the value exactly same with the already present value in the screen(i.e. value populated after query) its not showing duplicate.................could u tell me the reason?and help me out...............its urgent plzzzzzzzzz
Edited by: sushovan on Nov 22, 2010 4:34 AM
Edited by: sushovan on Nov 22, 2010 4:36 AM
Edited by: sushovan on Nov 22, 2010 8:58 AM -
Check Duplicate data during data key-in Multi Record Block
Dear all,
I have a situation where i have to check duplicate data entry(on a particular field,which is a mandatory field,i.e. it cannot be skipped by user without entering value) while data key-in in a Multi Record block.
As for reference I have used a logic,such as
1>In a When-Validate-Record trigger of that block I am assigning the value of that current item in Table type variable(collection type)
as this trigger fire every time as soon as i leave that record,so its assigning the value of that current time.And this process continues
then
2>In a When-Validate-Item trigger of that corresponding item(i.e. the trigger is at item level) has been written,where it compares the value of that current item and the value stored in Table type variable(collection type) of When-Validate-Record trigger.If the current item value is matched with any value stored in Table type variable I am showing a message of ('Duplicate Record') following by raise_form_trigger failure
This code is working fine for checking duplicate value of that multi record field
The problem here is that suppose if usee gets a message of ('Duplicate Record') and after that without saving the values if user try to query of that block then also when validate item fired where as I am expecting ORACLE default alert message('Do You want to save?'),I want to restrict this When-Validate Item fire during query time..........................while user try to query.
Please give me a meaningful logic or code for solving this problem
Any other logic to solve this problem is also welcomeWhen-Validate-Record trigger
When-Validate-Item triggerThat smells like Oracle Forms...
And the Oracle Forms forum is over here: Forms -
Is it possible to requery only a single row of a multi record block?
Hi,
I have a data block say "Employees". This is a multi record block.
Requirement: Two users are working on the same form (front end). Now the user1 has made change for EMP1 The same is not reflected in the User2 Session. Hence i need to requery the values updated for EMP1
Issue: Since there lots of employees listed in this block. i do not want all the employees details to be required (Block requery). Instead is it possible to requery only a perticular record to be required?
Thanks,
VidyaI think not possible........
Usually Approach is the data in grid table displays as read only and when user press EDIT button then they can edit one single record in a separate window.
ooh got one idea.......
may be create a save point and rollback to that particular save point ....... i hv never tried it but try it might solves your problem
there is a feature of Clear_form rollback to save point
PROCEDURE CLEAR_FORM
(commit_mode NUMBER,
rollback_mode NUMBER);
Parameters
If the end user has made changes to records in the current form or any called form, and those records have not been posted or committed, Form Builder processes the records, following the directions indicated by the argument supplied for the following parameter:
commit_mode ASK_COMMIT Form Builder prompts the end user to commit the changes during CLEAR_FORM processing.
DO_COMMIT Form Builder validates the changes, performs a commit, and flushes the current form without prompting the end user.
NO_COMMIT Form Builder validates the changes and flushes the current form without performing a commit or prompting the end user.
NO_VALIDATE Form Builder flushes the current form without validating the changes, committing the changes, or prompting the end user.
rollback_mode TO_SAVEPOINT Form Builder rolls back all uncommitted changes (including posted changes) to the current form's savepoint.
FULL_ROLLBACK Form Builder rolls back all uncommitted changes (including posted changes) which were made during the current Runform session. You cannot specify a FULL_ROLLBACK from a form that is running in post-only mode. (Post-only mode can occur when your form issues a call to another form while unposted records exist in the calling form. To prevent losing the locks issued by the calling form, Form Builder prevents any commit processing in the called form.) Edited by: BaiG on Apr 12, 2010 3:49 PM -
Editing record items in a multi-record block - 1 record at a time.
Hello,
I have the following scenario: Currently in my multi-record block, to edit an item of a record, the user has to double click on the record to enable the 'save changes' button. However, I want to turn the navigation to all other records turned off. The only way the user should be able to edit other records is save changes first, then again double click on the desired record to re-enable the 'save changes' button (at this time navigation to all other records should be turned off). ie., the user should be able to edit 1 record at a time (At any given time, I won't be having many records in the block which the user may have to modify).
How can this be achieved?
Thanks,
ChiruThat is pretty odd requirement, but this might work:
When the user double-clicks the record, enable the Save button, and set a value in any column of the record to its current value. This will cause Forms to set the record status to CHANGED, and will not permit navigation away from the record until the When-validate-record trigger runs successfully.
In the Save button, start a non-repeating timer to run maybe 20 milliseconds, then issue a Validate(Record_Scope); command. Check form_success then commit_form.
In the when-validate-record trigger: Do any record validation that may be necessary, and Raise Form_Trigger_Failure if anything is wrong. Then check for the existence of your Save button's timer. If it does NOT exist, issue a message like: "You must Save the changes first" and Raise Form_Trigger_Failure; If the timer exists, do not raise the error. -
Setting FORMAT_MASK in a multi-record block using a PJC
Hello,
We have a requirement to apply different format masks to different records in a multi-record block. I'm investigating using a PJC to do this, but without any decent documentation of the VTextField class, I'm struggling a little to figure out what method(s) to call.
setDisplayStringFilter() sounds promising, it seems to take a DisplayStringFilter object as its argument, but beyond that, I'm lost... Has anyone done anything similar?
Cheers,
JamesAssuming you can find the right method you still have a problem. The second argument in the set_custom_property procedure relates to the row within the block, not the the row within the resultset. So when someone moves the scrollbar you'll have to have each instance of the pjc change its format mask to whatever is appropriate for the new data. The pjc will have to be able to listen for changes to the data in the columns which determine what the format mask should be.
Perhaps you could use a text item and set the format in post-query/when-validate. -
Querying a multi-record block within my form
I have a form where I perform validations of items entered on my main block. I compare the item value entered to an expected value and if they are different then an exception record must be created in a separate, multi-record block within my application. One record on my main block may end up with multiple different exception records in the multi-record block. As a result, part of my validation must include determining whether the user has already created an exception record for the item that I'm validating in the multi-record block.
Is there a way for me to query and uncomitted, multi-record block in my form? Help would be greatly appreciated!Andreas' method is good.
Only several changes:
LOOP... EXIT WHEN :SYSTEM.RECORD_STATUS='NEW';
(Use NEW, not TRUE)
And just before the Raise Form_Trigger_Failure, I would Go_Item to either the item in error, or to a new line in the exceptions block. And also issue an error message.
....By the way...
If your exceptions block has more rows than will fit on the screen, then your search loop function will may cause the rows to jump up or down when the user tries to commit. There is a way to reset the view after the function completes its search -- you just need to store the value of the block's Top_Record property before the First_Record command, and then Go_Record(Top_Rec_value); after the function completes its loop.
Also, there is a way to prompt the user to enter the exception record when you first validate the item in a when-validate-item trigger. But the user might ignore the prompt, so you still need to re-check everything from the key-commit process. To use the WVI prompting, in the WVI trigger you check if an exception is required. If it is, store the item name in a package variable, then start a non-repeating timer. When the timer expires, save the :System.cursor_item value (so you can go_item back to it after calling the function), and then call the function to check for the exception for the item named in the package variable. If not found, prompt the user. If found, go_item back to the cursor_item_value. -
Duplicate item value in a Multi-Record Block
Is there a way to chek duplicate value entered in multi record block?
I have seen some solutions in this forum however nothing has worked for me till now. (using the formula, creating hidden items & creating group etc)
Thanks in advance,To see if there are any other records in the block with the same value, use Kevin Clark's famous function to trap duplicates. You can find Kevin's function write up here:
Re: checking for same rows in a tabular
From Kevin's post:
Create a field PK_COPY in a control block.
Create program unit function COMPARE to compare two input params returning 1 if they match else 0.
Create a field in the datablock PK_MATCH, calculation property formula, formula COMPARE(:DATA_PK, :PK_COPY)
Create a field in the control block NO_OF_MATCHES, calculation property summary, summary type SUM, summarised
item PK_MATCH.
Also, your control block requires the Single Record property set to yes, and the base table block requires the Query All Records property set to yes.
WHEN-VALIDATE-ITEM on DATA_PK
:CONTROL.PK_COPY := :DATA_PK;
if :NO_OF_MATCHES > 1 then
message('You have already used that one');
Raise form_trigger_failure;
end if; -
How to get the original record Number in Multi-Record Block
Hello Everyone,
I know how to find the duplicate item in the multi-Record block,
For Ex:
Line_Num Item_Name Quantity
1 AA 10
2 BB 20
3 AA Here 3rd record Item_name is duplicated, I can able to check and display the message that 'Item is duplicated' ,I found from [sheikyerbouti.developpez.com/duplicates/duplicates.htm] .
but I want to show along with original line number i.e 1 when the item_name is entered .
Here I want to check the original Line_Num and want to display the message
'Item is duplicated,Update quantity in Original Line 1'
Can anyone help me to get this?
Thank You.
Regards,
Guru.Hi Francois,
Actually I want to check and show the message when the item_name is entered i.e WHEN-VALIDATE-ITEM TRIGGER.
I put the following code in WHEN-VALIDATE-ITEM TRIGGER
Declare
curnum number;
dupnum number;
cur_item varchar2(100);
v_alert_no number;
p_linerec varchar2(100);
Begin
curnum := TO_NUMBER(:System.Trigger_Record);
cur_item := :Lines.Item_number;
First_Record;
p_linerec := :Lines.Item_number;
LOOP
If p_linerec = cur_item then
dupnum := :Lines.Line_num;
set_alert_property('ALERT_STOP',ALERT_MESSAGE_TEXT,
'Duplicate Item Found,Update QTY in Original line number '||dupnum);
V_ALERT_NO := show_alert('ALERT_STOP');
:LINES.ITEM_NUMBER := NULL;
:LINES.ITEM_DESCRIPTION:= NULL;
:LINES.ITEM_REVISION:= NULL;
:LINES.ITEM_CATEGORY:= NULL;
elsIF (:System.Last_Record = 'TRUE') THEN
Go_Record(curnum);
EXIT;
ELSE
Next_Record;
END IF;
END LOOP;
End; But I am getting the following error,
FRM-40737:Illegal Restricted Procedure
FIRST_RECORD in WHEN-VALIDATE-TRIGGERand then
its showing for first line itself.
Duplicate Item found.Update QTY in Original line number 1so I put the condition
If :Lines.Line_num > 1 then --Only to check when the block having more than one record.but now it checking from second record and displaying,
Duplicate Item found.Update QTY in Original line number 2 --(instead of Update QTY in Original line number 1)Can you tell me how can I change the above code for my requirement?
Thank you.
Edited by: Gurujothi on 27 Mar, 2013 5:20 PM -
Updating a value of a text item in a multi record block based on a change
Hi,
I need to change the value of a text item in a multi record block based on a change to another item's value in the same block.
Suppose there's a text item in a multi record block called dt1 which is of type date, which is changed in a particular record. I want to change the values of the another item in the same multi record block, for all other records by running a loop through all the records in multi record block. I dont want to do it on the press of a button, it should do automatically on change. Help me resolve this issue.Hi,
I need to change the value of a text item in a multi record block based on a change to another item's value in the same block.
Suppose there's a text item in a multi record block called dt1 which is of type date, which is changed in a particular record. I want to change the values of the another item in the same multi record block, for all other records by running a loop through all the records in multi record block. I dont want to do it on the press of a button, it should do automatically on change. Help me resolve this issue. -
Get next value in a Multi Record Block
Hi,
I've a Multi Record block with 2 items like below.
pos width
1 7
8 5
13 5
18 2
ie pos in next item is sum of pos and width of previous item.I've already implemented this.
The problem is if the user changes width in a particular record,I want to change next records pos automatically.
To achieve this,I wrote a when-new-record -instance-trigger as follws:
if :system.cursor_record=1 then
:pos:=1;
elsif :system.record_status='changed' then
:pos:=:pos+:width;
end if;
but even Though I change column width of block,:system.record_status still remain 'INSERT'.
Pls can u pls tell me how can I acheive this?
Prashanth DeshmukhYou cannot use Record Status like that.
You need to create a procedure that loops through your entire block, keeping track of the pos and width of the prior record to calculate the new pos of each record.
Your procedure would need to do something like this:
Declare
v_Pos pls_integer := 1;
Begin
Go_block('B1');
First_Record;
Loop
Exit when :System.record_status='NEW';
:B1.pos := v_Pos;
v_Pos := v_Pos + :B1.width;
Exit when :System.last_record = 'TRUE';
Next_Record;
End Loop;
First_Record;
End; -
How to call a report with a bind variable from a multi-record block
Hi,
I have created a report using the BI Publisher functionality. I did all the integration, created the SQL Query and uploaded the template. Up till here everythings fine!
My SQL Query has 2 bind variables.
I will call my report from a multi record block, at the end of each record an icon is shown which the user can click to open the report.
I created a column link for this item (PRINT_REPORT=Inschrijvingsformulier) but I do not manage to pass the parameters to my report. The parameters I want to pass are 2 columns in this Multi Record block.
I created 2 hidden fields on the page P9_PARAMETER1, P9_PARAMETER2 with the same names as my bind variables and fill this in with the values #PARAMETER1#, #PARAMETER2# from the multi record block.
It seems it does not work as my report stays empty. (also XML file stays empty).
Am I trying the wrong way?
Thanks for any advice,
Krishi khadeer,
create one report program and write the required code,and call this function module 'SSF_FUNCTION_MODULE_NAME' and give your smartform name and also when u activate ur smart form u will get one function module call that function module also and specify any tables used...
i think this solves ur problem...
any queries revert back..
pls reward points if helpful,
shylaja
Maybe you are looking for
-
Hi, I installed Oracle Application 11.5.10.2. I downloaded the 5903765 patch for Application. When i tried installing the patch it gave me an error saying: aiosp2() Error: failure in usdspn() Contents of error buffer are: "usdsop cannot create a new
-
Advantages of using Google or Bing Tile layers
Within the Mapviewer API they allow you to use either Bing or Google tile layers for your map. I was just wondering what the functional advantages of using Mapviewer (with those layers added) would be versus just using Google or Bing directly through
-
Unexpected results, when creating a pdf from Illustrator (cs3)
A customer has supplied a 'print ready' pdf, created in Illustrator [cs3]. The file contains grey text [20% black], but when they have printed to pdf [using acrobat 8], the breakdown of the 'grey' changes in colour to a cmyk value [45,36,35,1) instea
-
Xsl/Xml - How can I print the date?
That might sound like a silly question but no matter what I do, I get an error when I try to select or copy the value of fn:current-dateTime(). All I want to do is display the date and time. Is this only available in XSLT 2.0? If so, what could I use
-
Anyone know how to release locked pan position?
I put a pan position on a software instrument, amd it seems to have locked in place .I can't adjust it. What do you think I did? Thanks, Ian kay