2017-07-08 20 views
1

私は1つのレポートを作成しています。報告条件では、私は 'is one of'を使用していて、クライアント呼び出し可能スクリプトを呼び出すことによってsys_id配列を渡しています。javascript:new GetMoreInfoUpdatedChangeTickets()。getSysIds(); sys_idsは「データソース条件:Sys ID in 60a219744fc73200d6940e428110c72b」と表示されます。しかし対応するレコードは表示されません。しかし対応するsys_idレコードが利用可能です。sys_id配列toはレコードを表示していません

答えて

2

ここに問題があると思います。残念ながら、それはクライアントが呼び出すことができるスクリプトが通常どのように動作するかではありません。スクリプトには、クライアントが呼び出し可能なものであっても、常にサーバー上で実行されます。これらは、クライアント側のスクリプトから非同期のGlideAjax呼び出しを介して呼び出されることを前提としています。

この詳細については、GlideAjaxでthis articleをご覧ください。

しかし、幸いなことに、実際のクエリはクライアントではなくサーバー上で実行されます。したがって、スクリプトにはが含まれています。はおそらく正しい方法ですが、GlideAjaxスクリプトに含めることで、ServiceNowにコンストラクタ(initialize())メソッドをオーバーライドするように指示しているクラスとして残してください。


あなたが返さSYS_IDを取得していると言うので、それは私が説明することは問題ではなく、このソリューションが動作しないことが可能です。しかし、私は他の答えを与えるのに十分な情報がありません。正しい結果を表示していないクエリを実行し、リストの一番上にある最後のクエリのブレッドクラムを右クリックし、[クエリのコピー]をクリックしてにクエリを貼り付けますこのスレッドの返信(特に私のコメントに返信して通知されるので)を見ることができます。

スクリプトのコードにを含めるようにしてください。トラブルシューティングをお手伝いします。


EDIT: 今、あなたはこのコメントへの返信で、あなたのコードを追加したものを、私はいくつかの問題を見ることができます。

あなたの元:

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() {} ここでは、本質的に2つの名前を与え、一度に2つの方法で宣言しました。 通常、関数は次のように宣言されます: function functionName(args) {} しかし、オブジェクト(またはこの場合、 "new"キーワードを使用して自身のコピーを返すコンストラクタを持つオブジェクトであるClass)の内部では、関数 functionName: function(args) {}, 下のコードでわかるように、私はあなたのために調整しました。指定されていない時に「=」が暗示されるよう

次に、ライン以下の8に、私は、あなたのaddQuery()メソッド呼び出しから冗長「=」演算子を削除しました。これは必須ではありませんが、このようにきれいに見えます。 (それがより理にかなっているように、私も、全体gaからgrApprovalGroupにごGlideRecord変数の名前を変更しました。)

私はそれが実行されますかとの整合性を保つために、関数の先頭にsysIdArrayの宣言を移動した(と明確にするために)。これは必須ではありませんが、一般的にお勧めします。

ライン12以下は、元のコードでは、このように見えた: sysIdArray.push(grApprovalGroup.sys_id); しかし、gr.sys_idオブジェクト(タイプ: "GlideElement" - documentation here)であるので、これはそれに参照を推進しているがオブジェクトを配列に追加します。すべての単一の要素が同じオブジェクトを参照であるため、そのオブジェクト(位置gr.sys_id変化する1つのストリング値プロパティとして、ので、それぞれの文字列値プロパティとアレイのすべての要素を行い詳しいですこれについての情報(私が書いた)that you can find here。 これは良い考えではないと言えば、同じsys_idのリストが何度も繰り返されるでしょう!これを修正するには、以下のコードの12行目のように、私がリンクした記事のように、推奨される "getter"メソッドが推奨されます。

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' 
}; 

最後に、実際にクラスから関数を抽出して名前を変更して、スクリプトのインクルード自体が単なる関数になるようにする必要があります。あなたは、クエリのJavaScriptで「新しい」キーワードを使用することはできませんので

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; 
} 

は、それは(クラスなし)このように、それを定義する必要がありますし、我々は我々ができることをやった後、「クライアントを再有効化以前に有効にした「呼び出し可能」オプションを使用します。

あなたはそれをやった後は、次のURLに移動し、アクションでクエリスクリプトを見ることができるはずです:私のコードは以下のように似ている、あなたの提案を実装した後

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 = {初期化:function(){}、getSysIds:function getMyGroupMembers(){\t 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); \t} \t return sysIdArray; }、タイプ: 'GetMoreInfoUpdatedChangeTickets'}; –

+0

実際に動作しているかどうかは、実際には言及していませんでした。 –

+0

ここで、私は最初のコメントを、より多くの情報と解決策で更新しました。それを見て、次に必要な情報を提供してください。 –

関連する問題