> improved from an earlier post...
(see https://getbootstrap.com/docs/3.4 )
Widget defined in global scope; note can set cross scope privileges for access to scoped tables
[- should generate entries in sys_restricted_caller_access which can then be set to permitted]
HTML:
<div>
<h1>Check ServiceNow Table for duplicates
<title>Check ServiceNow Table for duplicates</title>
</h1>
<div class='container'>
<form class="form-horizontal">
<div class="form-group">
<label class="col-sm-2 control-label">Enter table name here</label>
<div class="col-sm-10">
<input class="form-control" value ='sys_user' id='tbl_name'>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Enter field name here</label>
<div class="col-sm-10">
<input class="form-control" value='email' id='dupl_field'>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Custom query string</label>
<div class="col-sm-10">
<input class="form-control" value='active=true' id='custom_query'>
</div>
</div>
<div class="form-group">
<button ng-click="runtheoperation()" class="btn btn-info">Click to check dupl</button>
</div>
</form>
<h2>Results:</h2>
<div class="well">
<textarea id='results_q' rows="10" style="width:100%;">{{c.duplrecordsList}}</textarea>
</div>
<h2>Total duplicates rows: {{c.duplrecordsSize}}</h2>
</div>
</div>
CSS:
.control-label {
text-align: left;
}
CLIENT:
function($scope) {
/* widget controller */
var c = this;
c.duplrecordsSize=0;
c.duplrecordsList='';
$scope.runtheoperation = function() {
//console.log("message", 'run the op');
c.server.get({
action: "get_dupls",
msg : "Running glideaggregate to check for duplicates...",
sn_table : angular.element($('#tbl_name')).val(),
duplfield : angular.element($('#dupl_field')).val(),
customQuery : angular.element($('#custom_query')).val()
}).then(function(r){
c.duplrecordsSize=r.data.duplrecordsSize-1;
var duplData=r.data.duplrecordsList;
c.duplrecordsList=duplData.join('\n');
});
};
}
SERVER:
(function() {
/* populate the 'data' object */
/* e.g., data.table = $sp.getValue('table'); */
data.duplrecordsList=[];
data.duplrecordsSize=0;
if (input && input.action === "get_dupls"){
data.duplrecordsList=(checkDuplUsers(input.customQuery, input.duplfield,input.sn_table));
data.duplrecordsSize=data.duplrecordsList.length;
}
function checkDuplUsers(customQuery, fieldParam, table){
var ga= new GlideAggregate(table);
ga.addAggregate('COUNT', fieldParam);
if (customQuery){
ga.addQuery(customQuery);
}
ga.addHaving('COUNT', '>', 1);
ga.query();
var dupls=[];
dupls.push("The following " + ga.getRowCount() + " records are duplicate on " + fieldParam);
while (ga.next()) {
var DuplLine=ga.getAggregate('COUNT', fieldParam) + " => " + ga.getElement(fieldParam);
dupls.push(DuplLine);
}
//gs.log(dupls,'duplWidget_arr');
return dupls;
}
})();
Comments
Post a Comment