Need help with below script
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-21-2024 01:29 PM
Hello All,
I have below script which works great to generate asset tags based on today's Julian date. It also has the logic to check the generate tags in asset table and skip the ones already present.
However there is a potential issue we have identified. It might be a possibility that multiple agents might be using the catalog to generate asset tags. With the current logic it will generate the same asset tags for multiple agents on the same day/same time unless the assets are created with the generated asset tags.
Can we modify the logic to generate unique asset tags per request by checking the RITM's created TODAY and appending a unique number as suffix.
Please advise.
(function execute(inputs, outputs) {
var today = new Date();
var startOfYear = new Date(today.getFullYear(), 0, 1);
var diff = today - startOfYear;
var dayOfYear = Math.floor(diff / (1000 * 60 * 60 * 24)) + 1;
var julianDate = today.getFullYear().toString().slice(2) + dayOfYear.toString().padStart(3, '0');
var baseNumber = parseInt(julianDate + '0001', 10);
var count = inputs.countasttag;
var uniqueCount = 0; // To keep track of unique numbers
var numberArray = [];
var i = 0;
while (uniqueCount < count) {
var generatedNumber = baseNumber + i;
// Check if this number exists in the alm_asset table
var assetGR = new GlideRecord('alm_asset');
assetGR.addQuery('asset_tag', generatedNumber.toString());
assetGR.query();
if (!assetGR.hasNext()) { // If number is not found, it's unique
numberArray.push(generatedNumber);
uniqueCount++; // Add to unique count
}
i++; // Move to the next number
}
outputs.generated_tags = numberArray.join(', ');
gs.info('Generated numbers: ' + numberArray.join(', '));
})(inputs, outputs);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-23-2024 05:42 PM - edited 10-23-2024 05:42 PM
Try this:
(function execute(inputs, outputs) {
var today = new Date();
var startOfYear = new Date(today.getFullYear(), 0, 1);
var diff = today - startOfYear;
var dayOfYear = Math.floor(diff / (1000 * 60 * 60 * 24)) + 1;
var julianDate = today.getFullYear().toString().slice(2) + dayOfYear.toString().padStart(3, '0');
var baseNumber = parseInt(julianDate + '0001', 10);
var count = inputs.countasttag; //10
var uniqueCount = 0; // To keep track of unique numbers
var numberArray = [];
// Check if this number exists in the alm_asset table
var assetGR = new GlideRecord('alm_asset');
assetGR.addQuery('asset_tag', baseNumber.toString()); //100
assetGR.query();
if (!assetGR.hasNext()) { // If number is not found, it's unique
var ritmAT = [];
var gr = new GlideRecord("sc_req_item");
gr.addEncodedQuery("cat_item=4410e34a1b649a101a29eb98b04bcbfe^sys_created_onONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday()");
gr.query(); //101, 102
while (gr.next()) {
ritmAT.push(gr.description.toString()); //101, 102
}
var maxNum = Math.max.apply(null, ritmAT); //102
if (maxNum > baseNumber) { // 102 > 100
var diff = maxNum - baseNumber + 1; //102 - 100 + 1 = 3
baseNumber = baseNumber + diff; // 100 +3 = 103
}
}
numberArray.push(baseNumber); //103
uniqueCount++; // Add to unique count //1
while (uniqueCount < count) { // 1 < 10
var baseNumber = baseNumber++; //104
numberArray.push(baseNumber); //104
uniqueCount++; // Add to unique count
}
outputs.generated_tags = numberArray;
gs.info('Generated numbers: ' + numberArray.join(', '));
})(inputs, outputs);
Push the correct asset value into the array. Not tested
I cannot answer untill and unless how the asset tags were creating via RITM's
Murthy
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-25-2024 09:20 AM
Something went terribly wrong here. i see below asset tags now:
["2.42990001E8","2.42990001E8","2.42990001E8","2.42990001E8","2.42990001E8","2.42990001E8","2.42990001E8"]
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-25-2024 09:48 AM
var count = inputs.countasttag;
fails as 'inputs' is not defined anywhere. Test the logic in the function in scripts - background
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-25-2024 10:04 AM
No, inputs is defined in the input set of flow action.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-25-2024 10:29 AM
I generated 3 asset tags, and they are all same.
created a new request and still same.
Logic is not working as expected.
242990001, 242990001, 242990001