Dynamic poplist in a multi-record item.

I have a multiprecord list item. I need to query and update the poplist everytime the user click on thge poplist, so I call a procedure pop_bcg_list() to upadet from the WHEN-NEW-ITEM-INSTANCE trigger,
PROCEDURE rgroup_to_ilist( ilist IN VARCHAR2,
rgroup IN VARCHAR2 )
IS
rows_rg NUMBER := 0;
list_index NUMBER := 0;
ivalue NUMBER;
BEGIN
rows_rg := get_group_row_count( rgroup );
clear_list( ilist );
FOR index_rg in 1..rows_rg LOOP
ivalue := get_group_char_cell( rgroup || '.C1', index_rg );
list_index := list_index + 1;
add_list_element(ilist, list_index, ivalue, ivalue );
END LOOP;
END rgroup_to_ilist;
PROCEDURE pop_bcg_list
IS
query_string varchar2(500) := null;
rg_id recordgroup;
current_ilist VARCHAR2(80) := :SYSTEM.Cursor_Item;
BEGIN
query_string := 'select to_char(bcg_group) C1, bcg_group C2 from loc_bcg_group ' ||
' where version = ''' || :control_block.set_version ||'''';
rg_id := create_group_from_query( 'RG_BCG_GROUP', query_string );
if populate_group( rg_id ) = 0
then
rgroup_to_ilist( current_ilist, 'RG_BCG_GROUP' );
end if;
delete_group(rg_id);
END pop_bcg_list;
It works fine on the cursor record, but when I click on the other records, the items in the poplist are duplicated. It keeps duplicating when I click on other records. Apparently clear_list() only clears the poplist in the current record? Is the true? Is there a way around this?
Thanks.
Clayton.

I remember coding a dynamic t list in one of my forms some time ago.
My code's something like this:
l_group_id := Create_Group_From_Query(l_rg_name, l_query);
l_status := Populate_Group(l_group_id);
IF l_status = 0
THEN -- No Error. Record Group has been Populated.
          clear_list('CONTROL.list1');
          POPULATE_LIST('CONTROL.list1', l_group_id);
          :CONTROL.list1 := Get_List_Element_Value('CONTROL.list1', 1);
END IF; -- IF l_status = 0
DELETE_GROUP(l_rg_name);
Why arent u using populate_list builtin.

Similar Messages

  • Populate multi record display item

    Hellou gurus!
    I have forms 10g and i need to populate display item in enter query mode. My problem is that I have table T1 with some static values. Table T2 is through ID connected (reference) to table T1 1:1 cardinality and T2 table also have reference to T3 table.
    I have block B2 based on table T2 and in this block I have multirecord item for inserting and updating new values for T2, but in this block ii also have no DB, multi record display item (because i don't want to allow editting in T1 table records) for diplaying static values for table T1. I want to display all static values from T1 next to the editable values in T2 (T2 multi record field is not insert yet). I tried for loop, select into but it not work. T1 values need to be selected before I started to inserting values into T2 items, but off course they need to be referenced It is hard to explain but i belive you understand.
    Can you help me how I can populate multi record item??

    You have to write the code again for your second list item....
    group_id RecordGroup;
    list_id Item  := Find_Item('button.tyear');
    list_id1 Item  := Find_Item('button.tperiod');
    status NUMBER;
    rg_name varchar2(40) := 'recgroup';
    BEGIN
    ----------------------------- LIST
    clear_list(list_id);
    group_id := Find_Group(rg_name);
    IF NOT id_null(group_id) then
        Delete_Group(group_id);
    End if;
    group_id := Create_Group_From_Query(rg_name,
    'select vm_year, vm_year from fwqgl.vouchermaster
    group by vm_year');
    status := Populate_Group(rg_name);
    Populate_List(list_id, group_id);
    /* --------------------SECOND LIST ITEM...BUT REC. GRP NAME CAN BE SAME,better to use another name if you need to retrieve list and store qry..other wise the fol. code is enuf-----------------------*/
    clear_list(list_id1);
    group_id := Find_Group(rg_name);
    IF NOT id_null(group_id) then
        Delete_Group(group_id);
    End if;
    group_id := Create_Group_From_Query(rg_name,
    'select vm_period, vm_period from fwqgl.vouchermaster
    group by vm_period');
    status := Populate_Group(rg_name);
    Populate_List(list_id1, group_id);
    END;Edited by: Dora on Dec 5, 2009 10:41 AM

  • Updating data from multi record blocks and database

    Hi
    when the user presses a button, records are retrieved from the database and put into multi record item. User can change the data that is retrieved from the database by pushing update button.I tried this code inside update button but it isnt working...
    Begin
    go_block('PRODUCTS');
    first_record;
    LOOP
    update products
    set PRODUCTS.PRODUCT_ID=:PRODUCTS.PRODUCT_ID
    where PRODUCTS.PRODUCT_ID=:CUSTOMER.CUSTOMER_ID;
    exit when :system.last_record = 'TRUE';
    next_record;
    END LOOP;
    forms_ddl('commit');
    clear_block(no_validate);
    End;

    Hi
    when the user presses a button, records are retrieved
    from the database and put into multi record item.
    User can change the data that is retrieved from the
    database by pushing update button.I tried this code
    inside update button but it isnt working...
    Begin
    go_block('PRODUCTS');
    first_record;
    LOOP
    update products
    set PRODUCTS.PRODUCT_ID=:PRODUCTS.PRODUCT_ID
    where PRODUCTS.PRODUCT_ID=:CUSTOMER.CUSTOMER_ID;
    exit when :system.last_record = 'TRUE';
    next_record;
    END LOOP;
    forms_ddl('commit');
    clear_block(no_validate);
    End;Are you getting an error?, what is it that it isn't working?
    One thing you need to understand about the basics of a block:
    If it is a block based on a database table you do not need an external INSERT/UPDATE/DELETE statements from a button or anything.
    Users can change the data retrieved from the database and just press save (which includes only commit_form built in).

  • Dynamic update if multi-record list item.

    I have a bunch of multi-record list items whose poplist I need to update with queried data at the WHEN-NEW-ITEM-INSTANCE triggers,
    At NEW-FORM-INSATNCE trigger I queried and filled all the poplists with no problem. The problem occurs at the WHEN-NEW-ITEM-INSTANCE triggers.
    I have a clear_list() before each add_list_element() from a runtime record group. The problem is that the poplists at the cursor record is updated correctly, when I click on the same list item at other records, the list repeats -- meaning (probably) it was not cleared before being populated. Is there a way to either (1) just populate the list item of the current record, or (2) clear all records of a list item before all records are populated.
    I tried copy( NULL, current_ilist ) where current_ilist is the item name before add_list_element(), but I got errors because the list items are required fields. Besides, the item has queried data in it.
    I'm thinking about changing the item property to optional, save the item value, set it to NULL, populate its poplist, restore it's original value and then change the item property back to "required'. I don't know if it would work but is there a more elegant way of doing it?
    Any suggestion will be appreciated.

    Hello All,
    Just in case nobody saw this, thought i might post it again.
    would abybody have any pointers,
    easo

  • 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.

  • About populating a non-database item in a multi-records block

    Hi, all
    I have a problem about populating a non-database item in a
    multi-records block. This block is set to database block with a
    controlled item which needs to be populated after query. so I
    create a post-query trigger, but my problem is when the records
    listed in this block are less than 10 ( the record number is set
    to 10), the trigger fires no problem. but when the retrieved
    records are greater than 10, the error message is 'post query
    trigger raised unhandled exception ora 01403'. anyone can help me
    fix this problem?
    Thanks in advance
    Diana

    Diana,
    When you have an unbound item in a block and want to fetch
    some data into it you need to write a post-query trigger.What
    you have done is right.But it seems that u are getting a No data
    found error.I am sure about how u r populating data into that
    field.If u have written a select statement to fetch the data in
    post-query trigger, kindly handle an exception and find out the
    problem.Having a look at ur code(pos-query) would be much more
    helpful for giving a better solution.Try this a let me know.
    Thanks
    Vinod.

  • Image item in multi-record block - PLEASE SOMEONE HELP !

    Hello everyone.
    I have a multi-record block with an image item that is not in teh table, is populated in the post-query trigger with a read_image_item, from a gif file. This block is child of another block. The problem is that the first records of the block, the ones that fit on the screen, are not showing the image properly, the image appears grey, distorted. In reality, the image dont adjust to the size of the item, as it is especified in the properties. When i scroll down, the rest of records show the image perfect, but this ones still are distorted.
    Forms is 6.0.8.22.1, over oracle 9i. Thank you all in advance.

    hello
    just me what is datatype of ur image record ?

  • Image item in multi-record block

    Hello everyone.
    I have a multi-record block with an image item that is not in teh table, is populated in the post-query trigger with a read_image_item, from a gif file. This block is child of another block. The problem is that the first records of the block, the ones that fit on the screen, are not showing the image properly, the image appears grey, distorted. When i scroll down, the rest of records show the image perfect, but this ones still are distorted.
    Forms is 6.0.8.22.1, over oracle 9i. Thank you all in advance.

    hello
    just me what is datatype of ur image record ?

  • 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,
    Chiru

    That 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.

  • Validation item in a multi-record

    Hi!
    I have a multi-record block and I want to avoid duplicated items from the user on it (these record aren´t saved yet, I want to validate them before commit).
    Anyone knows how I can validate them ? I made a procedure but it only works in trigger Key-Next-Item from the block.
    Thanks
    Veronica

    Re: duplicate records in  a multi record block

  • Get the first item value of previous record in a multi record block

    Hai,
    I have a multi record block with four items.I should get the first item value of the previous record so that I can increment its value in the current record.
    Thanks.........

    If you want a distinct value in each row or to be able to retrieve the records in the same order they were written then you should use a sequence.
    If you want to retrieve the records in the same order they were created in the block then you will need a diffferent solution to the one you outline here since a user could enter a new record between two others.
    I posted this a while back in response to someone who was using a sort_key item and resetting it for each row when a new record was inserted:
    If you make the sort_key bigger then you have much more room to insert new rows in between existing rows without having to reset all the sort_keys.
    Eg. you have rows with sort_keys of 129282000000000000 and 129283000000000000 (you can have more zeros if you want) and you want to insert a row in between. if you're using oracle forms then the user would have to click on the first of these rows and then do 'insert'. in your insert process you would store the sort keys of the current record and the one below, create a blank record in between and set the sort_key of that record to the average of the other two. you will be able to insert many new rows in between the original 2 before running out of space in the sort_key field.
    the method above is not sufficient, there are some other cases to consider:
    1) when the user is on the last record of the block then you will just create a new record with sort_key set to a greater number than the row before. you can have the sort_key defined as number(38) and to safely allow you to enter 1000 rows each new row would normally be 10E33 greater than the previous one.
    2) when the user is entering the first record then just set the sort_key to 10E33.
    3) on the off-chance that you do insert a great number of records and cannot insert another in between then you would need to alert the user, process the records so that the sort_keys are evenly spaced and requery the block. this processing could be scheduled nightly to make this eventuality even less likely.
    4) make sure the user cannot run the default 'clear_record' procedure. this would break my method as well as yours!
    James.

  • 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;

  • FETCHING VALUES IN MULTI RECORD BLOCK FROM ANOTHER TABLE USING SELECT STATEMENT.

    Hi,
    I have one multi record block in which i want to fetch values
    (more then one record) from another table using select statement
    IN KEY NEXT ITEM.I am getting following error.
    ORA-01422: exact fetch returns more than requested number of rows
    Thanks in advance.

    In your case I see no reason to use non-database block and to try to populate it from a trigger with a query, instead of using the default forms functionality where you can associate the block and the fields with table, create where clause using bind variables and simply use execute_query() build-in to populate the block. The power of the forms is to use their build-in functionality to interact with the database.
    Also, you can base your block on a query, not on a table and you dynamically change this query using set_block_property() build-in. You can use any dynamic queries (based on different data sources) and you simply need to control the column's data type, the number of the columns and their aliases. Something like creating inline views as a block data source.
    However, you can replace the explicit cursor with implicit one like
    go_block('non_db_block_name');
    first_record();
    FOR v_tab IN (SELECT *
    FROM tab
    WHERE col_name = :variable)
    LOOP
    :non_db_block_name.field1 := v_tab.col1;
    :non_db_block_name.field2 := v_tab.col2;
    next_record();
    END LOOP;

  • Disabling radio buttons in multi record block

    Need to be able to disable/enable one or more radio buttons in a group dynamically in multiple record block. Tried setting enabled properties but it sets for all records in the block. At the very least, I need to reset an item using radio to previous value if setting is invalid but when-radio-changed has already set value. Thank you.

    Your one row record has 5 items, then I assume empno, ename, ssn, phone, deptno 5 items on your multi-record block.
    you entered first row record as,
    empno, ename, ssn, phone, deptno
    100 John Smith 123-45-9999 234-333-9999 2
    101 Al Brown 222-34-1111 123-456-7890 2(duplicated)
    You want your code to duplicate the second deptno record as 2 instead of typing in, right?
    If so, then you add KEY-NEXT-ITEM trigger on item :phone, inside put,
    go_item('deptno');
    duplicate_item;
    It will copy the first deptno record 2 for the second record as showed above.

  • Multi-record / spread table...moveable fields in designer generated form

    Good morning all;
    I hope you are doing good...
    Imagine a multi-record block layout with it's overflow property set to spread-table to accomodate 10 varchar2(25) fields. Now, of the hundreds of users working with this generated form, not one of them wants to see the fields in the same order on the screen.
    What i would like to do is generate the form from designer so that a user could 'drag'n drop' let say, field #10 to the field #2 spot on the screen. Something like windows explorer where you can move the 'Size' column around so it is viewable without having to use the spread-table bar at the bottom of the screen...
    Any idea on how to generate this form from designer?
    Thank you and wish me luck!

    I don't know a solution, but I think a solution could be easier found if it was a read-only block. You did not specify that. Then maybe you could dynamically change the query behind the block.
    Good luck, Paul.

Maybe you are looking for