<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>question Re: Automated Scripted Factor for Non-Compliant Controls in GRC forum</title>
    <link>https://www.servicenow.com/community/grc-forum/automated-scripted-factor-for-non-compliant-controls/m-p/3053857#M18251</link>
    <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://www.servicenow.com/community/user/viewprofilepage/user-id/382310"&gt;@Trey7&lt;/a&gt;&amp;nbsp;,&lt;BR /&gt;Based on the screenshot provided. the control sys id is stored in the variable "control". You can use this directly in your query instead of current.control.&lt;BR /&gt;current line =&amp;nbsp; "&lt;SPAN&gt;controlGR.addQuery(&lt;/SPAN&gt;&lt;SPAN&gt;'sys_id'&lt;/SPAN&gt;&lt;SPAN&gt;, current.control);&lt;/SPAN&gt;"&amp;nbsp;&lt;BR /&gt;updated line = "&lt;SPAN&gt;controlGR.addQuery(&lt;/SPAN&gt;&lt;SPAN&gt;'sys_id'&lt;/SPAN&gt;&lt;SPAN&gt;, control);&lt;/SPAN&gt;"&lt;BR /&gt;&lt;BR /&gt;Regards,&lt;BR /&gt;Jai&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
    <pubDate>Tue, 24 Sep 2024 08:00:32 GMT</pubDate>
    <dc:creator>jaikishan1</dc:creator>
    <dc:date>2024-09-24T08:00:32Z</dc:date>
    <item>
      <title>Automated Scripted Factor for Non-Compliant Controls</title>
      <link>https://www.servicenow.com/community/grc-forum/automated-scripted-factor-for-non-compliant-controls/m-p/3053598#M18249</link>
      <description>&lt;P&gt;I have created a group factor to assess individual controls on a risk assessment. The group factor contains a manual factor (manual selection of control effectiveness) and an automated scripted factor (to check if the associated control is non-compliant). The score is then averaged to output the control effectiveness score.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It is my understanding that the control sys_id should be predefined in the script's control variable (see attached screenshot), however the variable is null. Any idea how I can retrieve the associated control sys_ID so that the script can check the&amp;nbsp;&lt;SPAN&gt;sn_compliance_control table for the control status? Or is there a better way I should be handling this?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Draft script so far (not working):&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;/*************************************************************************************/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;/* 1. Use the predefined variables from the Variables field.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;/* 2. You can define your own script variables within the script itself. For example, var x = 1; &amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;/* 3. Factor response must be set to variable result.score; &amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;/*************************************************************************************/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;try&lt;/SPAN&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;/***Start of Custom Code. Please write your scoring formula below. */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;var&lt;/SPAN&gt;&lt;SPAN&gt; controlScore = &lt;/SPAN&gt;&lt;SPAN&gt;3&lt;/SPAN&gt;&lt;SPAN&gt;; &lt;/SPAN&gt;&lt;SPAN&gt;//Default score to 3 for 'Effective' control status&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;var&lt;/SPAN&gt;&lt;SPAN&gt; controlGR = &lt;/SPAN&gt;&lt;SPAN&gt;new&lt;/SPAN&gt; &lt;SPAN&gt;GlideRecord&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;'sn_compliance_control'&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; controlGR.addQuery(&lt;/SPAN&gt;&lt;SPAN&gt;'sys_id'&lt;/SPAN&gt;&lt;SPAN&gt;, current.control);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; controlGR.query();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (controlGR.next()) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;var&lt;/SPAN&gt;&lt;SPAN&gt; controlStatus = controlGR.getValue(&lt;/SPAN&gt;&lt;SPAN&gt;'status'&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (controlStatus == &lt;/SPAN&gt;&lt;SPAN&gt;'non_compliant'&lt;/SPAN&gt;&lt;SPAN&gt;) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; controlScore = &lt;/SPAN&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;; &lt;/SPAN&gt;&lt;SPAN&gt;//Assign score of 1 for non-compliant controls&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &lt;/SPAN&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; result.score = controlScore;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;/***End of Custom Code. Do not modify anything below. */&lt;/SPAN&gt;&lt;SPAN&gt; &amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (isNaN(result.score)) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;throw&lt;/SPAN&gt; &lt;SPAN&gt;'Not a number.'&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &lt;/SPAN&gt;&lt;SPAN&gt;else&lt;/SPAN&gt; &lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (result.score == &lt;/SPAN&gt;&lt;SPAN&gt;Infinity&lt;/SPAN&gt;&lt;SPAN&gt;) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;throw&lt;/SPAN&gt; &lt;SPAN&gt;'Divide by zero error.'&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; } &lt;/SPAN&gt;&lt;SPAN&gt;catch&lt;/SPAN&gt;&lt;SPAN&gt; (ex) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; result.error = ex;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Tue, 24 Sep 2024 01:55:13 GMT</pubDate>
      <guid>https://www.servicenow.com/community/grc-forum/automated-scripted-factor-for-non-compliant-controls/m-p/3053598#M18249</guid>
      <dc:creator>Trey7</dc:creator>
      <dc:date>2024-09-24T01:55:13Z</dc:date>
    </item>
    <item>
      <title>Re: Automated Scripted Factor for Non-Compliant Controls</title>
      <link>https://www.servicenow.com/community/grc-forum/automated-scripted-factor-for-non-compliant-controls/m-p/3053857#M18251</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://www.servicenow.com/community/user/viewprofilepage/user-id/382310"&gt;@Trey7&lt;/a&gt;&amp;nbsp;,&lt;BR /&gt;Based on the screenshot provided. the control sys id is stored in the variable "control". You can use this directly in your query instead of current.control.&lt;BR /&gt;current line =&amp;nbsp; "&lt;SPAN&gt;controlGR.addQuery(&lt;/SPAN&gt;&lt;SPAN&gt;'sys_id'&lt;/SPAN&gt;&lt;SPAN&gt;, current.control);&lt;/SPAN&gt;"&amp;nbsp;&lt;BR /&gt;updated line = "&lt;SPAN&gt;controlGR.addQuery(&lt;/SPAN&gt;&lt;SPAN&gt;'sys_id'&lt;/SPAN&gt;&lt;SPAN&gt;, control);&lt;/SPAN&gt;"&lt;BR /&gt;&lt;BR /&gt;Regards,&lt;BR /&gt;Jai&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 24 Sep 2024 08:00:32 GMT</pubDate>
      <guid>https://www.servicenow.com/community/grc-forum/automated-scripted-factor-for-non-compliant-controls/m-p/3053857#M18251</guid>
      <dc:creator>jaikishan1</dc:creator>
      <dc:date>2024-09-24T08:00:32Z</dc:date>
    </item>
    <item>
      <title>Re: Automated Scripted Factor for Non-Compliant Controls</title>
      <link>https://www.servicenow.com/community/grc-forum/automated-scripted-factor-for-non-compliant-controls/m-p/3054374#M18264</link>
      <description>&lt;P&gt;Tried that as well, but it is the same result. control is null&lt;/P&gt;</description>
      <pubDate>Tue, 24 Sep 2024 14:45:39 GMT</pubDate>
      <guid>https://www.servicenow.com/community/grc-forum/automated-scripted-factor-for-non-compliant-controls/m-p/3054374#M18264</guid>
      <dc:creator>Trey7</dc:creator>
      <dc:date>2024-09-24T14:45:39Z</dc:date>
    </item>
    <item>
      <title>Re: Automated Scripted Factor for Non-Compliant Controls</title>
      <link>https://www.servicenow.com/community/grc-forum/automated-scripted-factor-for-non-compliant-controls/m-p/3054468#M18266</link>
      <description>&lt;P&gt;It should not be null. Please review the following:&lt;BR /&gt;1. RAM configuration to verify that the factor is mapped to the correct assessment(control) and published.&lt;BR /&gt;2. Verify the assessment if controls are properly associated and are being assessed.&lt;/P&gt;</description>
      <pubDate>Tue, 24 Sep 2024 15:53:55 GMT</pubDate>
      <guid>https://www.servicenow.com/community/grc-forum/automated-scripted-factor-for-non-compliant-controls/m-p/3054468#M18266</guid>
      <dc:creator>jaikishan1</dc:creator>
      <dc:date>2024-09-24T15:53:55Z</dc:date>
    </item>
    <item>
      <title>Re: Automated Scripted Factor for Non-Compliant Controls</title>
      <link>https://www.servicenow.com/community/grc-forum/automated-scripted-factor-for-non-compliant-controls/m-p/3054741#M18268</link>
      <description>&lt;P&gt;Confirmed both of those are true. Does it have anything to do with the automated scripted factor being within a group factor?&lt;/P&gt;</description>
      <pubDate>Tue, 24 Sep 2024 20:44:48 GMT</pubDate>
      <guid>https://www.servicenow.com/community/grc-forum/automated-scripted-factor-for-non-compliant-controls/m-p/3054741#M18268</guid>
      <dc:creator>Trey7</dc:creator>
      <dc:date>2024-09-24T20:44:48Z</dc:date>
    </item>
  </channel>
</rss>

