2017-07-08 91 views
1

我正在創建一個報告。在報告條件中,我使用'是其中之一'並通過調用客戶端可調用腳本傳遞sys_id數組,包括javascript:new GetMoreInfoUpdatedChangeTickets()。getSysIds(); as。我可以將sys_ids看作「數據源條件:60a219744fc73200d6940e428110c72b中的系統ID」。但相應的記錄沒有得到顯示。但是相應的sys_id記錄是可用的。sys_id數組爲不顯示記錄

回答

2

我想我在這裏看到問題。不幸的是,這不是通常包含客戶端可調用腳本的工作方式。腳本包括甚至客戶端可調用的腳本,總是在服務器上執行。它們旨在通過來自客戶端腳本的異步GlideAjax調用來調用。

欲瞭解更多信息,我鼓勵你看看GlideAjax的this article

但是,幸運的是,您的實際查詢在服務器上執行,而不是在客戶端上執行。所以腳本包括可能是正確的路要走,但是你面臨的問題是(可能)通過使其成爲GlideAjax腳本包含,你告訴ServiceNow重寫構造函數(initialize())方法,但把它作爲一個類。


既然你說你得到一個sys_id返回,這可能是我所描述的不是這個問題,而這個解決方案將無法工作。但是,我沒有足夠的信息給出任何其他答案;所以如果是這種情況,請運行沒有顯示正確結果的查詢,然後右鍵單擊列表頂部的最後一個查詢麪包屑,然後單擊「複製查詢」,然後將查詢粘貼到在這個線程上的回覆(專門回覆我的評論,所以我得到通知),所以我可以看看。

請明顯地請在您的腳本中提供代碼,包括,以便我可以幫助您排除故障。


編輯: 現在你已經添加了什麼在此評論的回覆你的代碼,我可以看到幾個問題。

您的原始:

var GetMoreInfoUpdatedChangeTickets = Class.create(); 
GetMoreInfoUpdatedChangeTickets.prototype = { 
    initialize: function() { 
    }, getSysIds: function getMyGroupMembers() { 
     var ga = new GlideRecord('sysapproval_group'); 
     ga.addQuery('parent.sys_class_name', '=', 'change_request'); 
     ga.query(); 
     gs.log("TotalRecords1 Before:: " + ga.getRowCount()); 
     var sysIdArray = []; 
     while (ga.next()) { 
      sysIdArray.push(ga.sys_id); 
     } 
     return sysIdArray; 
    }, type:  'GetMoreInfoUpdatedChangeTickets' 
} 

這裏是所有我對你的代碼所做的更改,併爲每個的解釋:

首先,在下面的代碼線5,我已經改變了你的成員函數(又名:「方法」)的聲明方式。你有這樣的聲明: getSysIds: function getMyGroupMembers() {} 所以在這裏,你基本上給了它兩個名字,並一次以兩種方式聲明它。 通常,函數聲明如下: function functionName(args) {} 但是,在一個對象內(或者在這種情況下,一個類 - 這是一個具有使用「new」關鍵字返回自身副本的構造函數的對象),我們聲明函數像這樣: functionName: function(args) {}, 所以你可以在下面的代碼中看到,我已經爲你做了調整。

接着,在線以下8,我已經從您的addQuery()方法調用被移去的冗餘「=」運算符,如沒有指定時「=」被暗示。這不是必需的,但它看起來更乾淨。 (我也改名爲您GlideRecord變量從gagrApprovalGroup貫穿始終,使之更有意義。)

我感動的sysIdArray的聲明的一致性功能的頂部,它是如何執行(和爲了清楚起見)。這也不是必需的,但通常建議。

線12的下方,在原始代碼中,看起來像這樣: sysIdArray.push(grApprovalGroup.sys_id); 然而,由於gr.sys_id對象(型號: 「GlideElement」 - documentation here),這是推參考到對象放入數組中。作爲對象(一個在位置gr.sys_id變化的字符串值屬性,也是如此每個的字符串值屬性和陣列在每個元件中,由於每一個元素是一個參考相同的對象!更多在這(我寫的)that you can find here。 信息,在一篇文章中我只想說,這不是一個好主意,並會導致相同sys_id列表一遍又一遍!爲了解決這個問題,我們只是用最好的-practice推薦「消氣」的方法(如我聯繫文章建議),你可以在下面的代碼在網上看到12。

var GetMoreInfoUpdatedChangeTickets = Class.create(); 
GetMoreInfoUpdatedChangeTickets.prototype = { 
    initialize: function() { 
    }, 
    getSysIds: function() { 
     var sysIdArray = []; 
     var grApprovalGroup = new GlideRecord('sysapproval_group'); 
     grApprovalGroup.addQuery('parent.sys_class_name', 'change_request'); 
     grApprovalGroup.query(); 

     while (grApprovalGroup.next()) { 
      sysIdArray.push(grApprovalGroup.getValue('sys_id')); 
     } 
     return sysIdArray; 
    }, 
    type:  'GetMoreInfoUpdatedChangeTickets' 
}; 

最後,我們需要實際從類中提取函數並對其進行重命名,以便腳本包含其本身就是函數。

function GetMoreInfoUpdatedChangeTickets() { 
    var sysIdArray = []; 
    var grApprovalGroup = new GlideRecord('sysapproval_group'); 
    grApprovalGroup.addQuery('parent.sys_class_name', 'change_request'); 
    grApprovalGroup.query(); 

    while (grApprovalGroup.next()) { 
     sysIdArray.push(grApprovalGroup.getValue('sys_id')); 
    } 
    return sysIdArray; 
} 

因爲你不能使用查詢JavaScript中的「新」的關鍵字,有必要定義它像這樣(沒有類),一旦我們做到了這一點,我們可以重新啓用「客戶端可調用「選項,您以前啓用。

一旦你做到了這一點,你應該能夠去下面的網址,並查看查詢腳本動作:

https://YOUR_INSTANCE.service-now.com/sysapproval_group_list.do?sysparm_query=sys_id%3Djavascript%3A%20GetMoreInfoUpdatedChangeTickets()%3B

+0

實現你的建議我的代碼如下類似後:VAR GetMoreInfoUpdatedChangeTickets = Class.create(); GetMoreInfoUpdatedChangeTickets.prototype = {initialize:function(){},getSysIds:function getMyGroupMembers(){var sk = new GlideRecord('sysapproval_group'); ga.addQuery('parent.sys_class_name','=','change_request'); ga.query(); gs.log(「TotalRecords1 Before ::」+ ga.getRowCount()); var sysIdArray = []; while(ga.next()){sysIdArray.push(ga.sys_id); \t} \t return sysIdArray; },輸入:'GetMoreInfoUpdatedChangeTickets'}; –

+0

你實際上並沒有提及是否它的工作或不... –

+0

在那裏,我更新了我最初的註釋有更多的信息和解決方案。請參閱它,並在下次嘗試提供所需的信息,如果您需要幫助。 –