Reference qualifier for list collector

SNow35
Giga Guru

Hi All,

I have two variables in my record producer:

1. Customer(this is a reference field)

2.SOF(this is list collector)

I need to create a filter on the "SOF " field on the record producer form so that it only shows SOF records that are associated with the same Company that the record is for. So if the "Customer" field on the record producer   form is set to "XYZ", then only SOF records where the "Company" field on the SOF record EQUALS "XYZ" should be displayed for the user to choose from.

Please let me know how I can achieve this.

Regards,

Shugufta.

1 ACCEPTED SOLUTION

Hi Shagufta,



Please use the updated code :



""


I advice to use an onChange client script which would set the filters to you. The list collector has to refer the right table for records. I had a catalog item where i have used this code,



I would request you to implement something similar(this is a catalog client script):



   


    var collectorName = 'list_collector_field_name'; // the list collector field on the record producer


    var filterString = 'group='+g_form.getValue(' field_name '); // from where the filter is dependent on the record producer



  //Hide the list collector until we've set the filter


    if(typeof(window[collectorName + 'g_filter']) == 'undefined'){


  setTimeout(setCollectorFilter, 100);     //Test if the g_filter property is defined on our list collector.


                                                                                                          //If it hasn't rendered yet, wait 100ms and try again.


  return;


  }


    window[collectorName + 'g_filter'].reset();   // this resets


    window[collectorName + 'g_filter'].setQuery(filterString); //sets the filter


    window[collectorName + 'acRequest'](null); //runs the filter automatically



once its populated it can fetched later in RITM and TASKs.


""



The default values of the list collector should not have no_filter , and as the client script does the task script include and calling script include can be excluded too.



Do reach back if you get struck.



Regards,


Shariq


View solution in original post

35 REPLIES 35

Hi Shagufta,



Please use the updated code :



""


I advice to use an onChange client script which would set the filters to you. The list collector has to refer the right table for records. I had a catalog item where i have used this code,



I would request you to implement something similar(this is a catalog client script):



   


    var collectorName = 'list_collector_field_name'; // the list collector field on the record producer


    var filterString = 'group='+g_form.getValue(' field_name '); // from where the filter is dependent on the record producer



  //Hide the list collector until we've set the filter


    if(typeof(window[collectorName + 'g_filter']) == 'undefined'){


  setTimeout(setCollectorFilter, 100);     //Test if the g_filter property is defined on our list collector.


                                                                                                          //If it hasn't rendered yet, wait 100ms and try again.


  return;


  }


    window[collectorName + 'g_filter'].reset();   // this resets


    window[collectorName + 'g_filter'].setQuery(filterString); //sets the filter


    window[collectorName + 'acRequest'](null); //runs the filter automatically



once its populated it can fetched later in RITM and TASKs.


""



The default values of the list collector should not have no_filter , and as the client script does the task script include and calling script include can be excluded too.



Do reach back if you get struck.



Regards,


Shariq


Hi Shariq,



I tried the script it is working partially.


As you can see it is setting filter saying customer is but the customer is blank.


find_real_file.png


This is the code which I used, please let me know if there is any error in the script



function onChange(control, oldValue, newValue, isLoading) {


    if (isLoading || newValue == '') {


          return;


    }


var collectorName = 'u_sofs'; // the list collector field on the record producer


    var filterString = 'u_customer='+g_form.getValue(' company '); // from where the filter is dependent on the record producer



  //Hide the list collector until we've set the filter


    if(typeof(window[collectorName + 'g_filter']) == 'undefined'){


  setTimeout(setCollectorFilter, 100);     //Test if the g_filter property is defined on our list collector.


                                                                                                          //If it hasn't rendered yet, wait 100ms and try again.


return;


  }


    window[collectorName + 'g_filter'].reset();   // this resets


    window[collectorName + 'g_filter'].setQuery(filterString); //sets the filter


    window[collectorName + 'acRequest'](null); //runs the filter automatically



    //Type appropriate comment here, and begin script below


   


}


Hi Shagufta,



A minor error, var filterString = 'u_customer='+g_form.getValue('company'); // without spaces, i kept spaces here for your better understanding


And just clarifying, in your case the 'company' is field name on the record producer for the variable right?


The name of the field on the reference table is 'u_company' ?




Regards,


Shariq


Thanks a lot Shariq it worked.


Hi Shagufta,



I am glad it worked for you. I wish you had checked the codes earlier.



Please mark correct.




Regards,




Shariq