- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-07-2016 11:19 AM
Hi everyone,
This is my first "big" scripting project, so please bear with me. I'd really appreciate your help.
I am trying to have the system automatically create a record in my new table called 'u_assignment_record' that includes who an incident was assigned to, who it is assigned to now, and who changed, every time someone updates the assigned to field on an incident. I have it mostly working...except for the part where the record that the script include creates is blank.
Now, I tried using the OOB Metric for Assigned To duration, but this does not give me what we need in the format we need it.
Here is what I have so far.
CLIENT SCRIPT:
I want to pass the system ID's for all the values (the 'sysparm_who' value was a desperate attempt to figure out what I'm doing wrong...still didn't work), so that I can run reports on related fields for the values. If I enable the commented out section in both the client script above and the script include below, I get an alert showing all the information I need (sys_id's for all values).
SCRIPT INCLUDE:
When I disable the alert parts above and change the value for an incident, I get a record in the u_assignment_record table BUT it's blank...
<xml>
<sys_created_on>2016-11-07 19:13:29</sys_created_on>
<sys_id>d885d1800f87a200e867ee68b1050e06</sys_id>
<sys_mod_count>0</sys_mod_count>
<sys_updated_by>stephanie.taveras</sys_updated_by>
<sys_updated_on>2016-11-07 19:13:29</sys_updated_on>
<u_assigned_by/>
<u_assigned_from/>
<u_assigned_to/>
<u_number/>
</u_assignment_record>
</xml>
As you can see from the XML above, all 4 parameters that I try to pass are blank on my table. I have tried setting these fields as Reference type, as String and as Translated Text. Same thing happens for each type. I did comment out the parameter and had it create a record with a static value (i.e '1', '2', '3', '4') and those values did pass into my table.
I would really appreciate anyone's help with this!
Solved! Go to Solution.
- Labels:
-
Scripting and Coding
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-07-2016 12:15 PM
OK.. I messed around a bit with the setup. You have to have the getXML() function, even if you do nothing with it:
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-07-2016 12:24 PM
Genius!! Thank you so much. I knew it had to be something simple!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-07-2016 11:51 AM
Hadn't realized I left that in there...that was from an earlier attempt at something else that didn't work. But I removed it and the record still gets created blank.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-07-2016 12:22 PM
Use an after business rule to achieve it .
Condition: current.assigned_to.changes() && !current.assigned_to.nil()
var gr= new GlideRecord('u_assignment_record');
gr.initialize();
gr.u_number=current.number;
gr.was_assigned=previous.assigned_to;
gr.has_assigned=current.assigned_to;
gr.u_assigned_by=current.sys_updated_by;
gr.u_updated_on=current.sys_updated_on;
gr.insert();
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-08-2016 04:37 AM
Thank you! I thought I needed a script include for a business rule as well (like I said, still new at this!). But this worked! I had to change the values a little bit to:
var gr = new GlideRecord('u_assignment_record');
gr.initialize();
gr.u_number = current.sys_id;
gr.u_assigned_from = previous.assigned_to;
gr.u_assigned_to = current.assigned_to;
gr.u_assigned_by = gs.getUserID();
gr.insert();
And I removed the second condition, since I do want to track if someone change the value to nothing, but other than that, it works perfectly!
Can you just answer one more question for me? Just to make sure I understand...the reason I don't need a script include from a business rule is because it runs server side already, correct? Would there be any reason I would ever call a script include from a business rule at all (in a different case, not this one)?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-08-2016 11:28 AM
The answer is very simple. Script include is a reusable code.
For example: We have 3 business rules . You are performing some similar calculation based upon some values.
If you will write the same piece of code in 3 business rules the amount of the code will be more and you are going to maintain a lot.
If you will use a script include , you have a common function which is going to execute this calculations and you can invoke it from business rule with a single line of code.
The only thing we need to change the parameters if required.
for eg. new ScriptincludeName().MethodName(start_date,end_date);
Hope i clarified you!