Added default query "sys_IdIN"+array of sysid's to sn-record-picker not working.

Shikha14
Giga Contributor

Hello People,

 

i am trying to add a dynamic query to sn-record-picker by following script:

HTML

<sn-record-picker field="family" table="'cmdb_ci_business_process'" display-field="'name'" value-field="'sys_id'" multiple = "true" default-query="'sys_idIN{{data.family}}'" search-fields="'name'" page-size="100" ></sn-record-picker>

Server side script:

var utils = new MasterDeclarationsData();

data.family=utils.getPurposeFamily(); (i even tried with hardcoding single sys id like "data.family="3a859fa44f3f07006dfacda28110c7f1"" still not working)

 

Script Include :

getPurposeFamily: function() {
var purpFamily = [];
var family = new GlideRecord("x_lof_gdpr_processing_activity");
family.addEncodedQuery('type=Global Master Declaration');
family.query();
while (family.next()) {


var localFamily = new GlideRecord("x_lof_gdpr_processing_activity");
localFamily.addEncodedQuery('type=Local Master Declaration');
localFamily.query();
while (localFamily.next()) {

var list = localFamily.data_controllers.toString();
var array = list.split(",");
for (var i = 0; i < array.length; i++) {
var userGr = new GlideRecord('x_lof_gdpr_user');
userGr.addEncodedQuery('role=author^entity=' + array[i] + '^groupDYNAMICd6435e965f510100a9ad2572f2b47744');
}
userGr.query();
while (userGr.next()) {
if(family.family!=''){
purpFamily.push(localFamily.family.toString());
}
}

}
if(family.family!=''){
purpFamily.push(family.family.toString()); }


}
gs.info('shikha is inside : ' + purpFamily); 
return purpFamily.toString();
},

 

This script in returning all sysId's which i need to find in cmdb_ci_business_process table for picker

script works fine in background script and also returns corresponding display values for sysId's

 

But doesn't work with record picker.

 

Any suggestions? 🙂

 

Thanks in advance 🙂

 

@Chuck Tomasi 🙂

1 ACCEPTED SOLUTION

Hey @Drew ,

thanks for responding i found the solution

 

there was an issue with my server script 😞

 

a if condition was causing the issue 😕

 

View solution in original post

5 REPLIES 5

venkat57
Tera Contributor

Hi @Shikha14 @DrewW ,

 

I am facing issues with sn-record-picker.. 

 

I have added alert of my data.query in client controller it is returning all the sys_ids of users..

 

But the search of record picker is not showing any results..

 

Can you please help me on this..

 

HTML :

 

<div class="clearfix"></div>
</div>
<div class="panel-body">
<div class="text-center text-italic text-muted" id="watch_list_div">
<sn-record-picker

field="watch_list"
table="'sys_user'"
display-field="'name'"
search-fields="'name'"
value-field="sys_id"
multiple="true"
default-query="'sys_idIN{{data.query}}'"
page-size="1000">
</sn-record-picker>
<p></p>
<button
type="button"
ng-click="updateRecord()"
ng-if="data.canWrite"
class="btn btn-default ng-scope">
Add User to Watchlist

</button>
</div>
</div>
</div>

 

 

Client Script :

 

api.controller=function($scope, spUtil) {
var c = this;
alert(c.data.query);
$scope.watch_list = {
displayValue: c.data.watch_list.displayValue,
value: c.data.watch_list.value,
name: 'watch_list'
};
$scope.updateRecord = function(){
c.data.watch_list = $scope.watch_list;
c.server.update();
};
};
 
 
Server Script:
 
(function() {
   
    var table = $sp.getParameter('table');
var sys_id = $sp.getParameter('sys_id');
var lu = new sn_customerservice.CaseWatchListFunctionscsm();
data.query = lu.refQual(sys_id);

if(input && input.sys_id && input.table && input.watch_list){
var ticket = new GlideRecord(input.table);
if(ticket.get(input.sys_id)){
   
    var gr1=new GlideRecord('sn_customerservice_case');
    gr1.addQuery('sys_id',sys_id);
    gr1.query();
    if(gr1.next()){
        var value=gr1.watch_list;
   
    }
if(value==''){

    ticket.setValue('watch_list', input.watch_list.value);
}
if(value!=''){
var newvalue= value +','+ input.watch_list.value;


ticket.setValue('watch_list', newvalue);
}
ticket.update();
 
}
} else {
if($sp.getParameter('table') && $sp.getParameter('sys_id')){

var gr = new GlideRecord(table);
if(gr.get(sys_id)){
data.canRead = gr.watch_list.canRead();
data.canWrite = gr.watch_list.canWrite();
if(data.canRead){
data.sys_id = sys_id;
data.table = table;
data.watch_list = {
displayValue : gr.getDisplayValue('watch_list') || '',
value : gr.getValue('watch_list') || ''
};
}
}
} else {
//missing url params
}
}
})();

 


 Script Include :
 
var CaseWatchListFunctionscsm = Class.create();
CaseWatchListFunctionscsm.prototype = {
    initialize: function() {

    },
    refQual: function(project) {
        var code;
        gs.info('CaseWatchListFunctionscsmran');
        gs.info('project1' + project);
        var grc = new GlideRecord('sn_customerservice_case');
        grc.addQuery('sys_id', project);
        grc.query();
        if (grc.next()) {
            code = grc.u_project;

        }
        gs.info('project12' + code);
        var members = [];

        var gr = new GlideRecord('u_m2m_project_users');
        gr.addQuery('u_project', code);
        gr.addQuery('u_active', true);
        gr.query();
        while (gr.next()) {
            members.push(gr.u_user.sys_id.toString());
           
           
        }
        
      
        return members.toString();

    },

    type: 'CaseWatchListFunctionscsm'
};