2017-07-08 3 views
1

Ich erstelle einen Bericht. In der Berichtsbedingung benutze ich 'is one of' und übergebe sys_id array durch Aufrufen des Client aufrufbaren Skripts include javascript: new GetMoreInfoUpdatedChangeTickets(). GetSysIds(); Ich kann sys_ids als "Datenquellenbedingungen: Sys ID in 60a219744fc73200d6940e428110c72b" sehen. Aber der entsprechende Datensatz wird nicht angezeigt. Der entsprechende sys_id-Datensatz ist jedoch verfügbar.sys_id arrays to ist einer der keine Datensätze anzeigen

Antwort

2

Ich denke, ich sehe das Problem hier. Unglücklicherweise enthält das vom Client aufrufbare Script normalerweise keine Arbeit. Script-Includes, auch client-callable, werden IMMER auf dem Server ausgeführt. Sie sollen über einen asynchronen GlideAjax-Aufruf von einem clientseitigen Skript aus aufgerufen werden.

Weitere Informationen hierzu finden Sie unter this article auf GlideAjax.

Zum Glück für Sie wird Ihre eigentliche Abfrage auf dem Server ausgeführt, nicht auf dem Client. So ein Skript Include ist wahrscheinlich der richtige Weg zu gehen, aber das Problem, das Sie konfrontiert sind, ist (wahrscheinlich), dass indem Sie es ein GlideAjax-Skript machen, Sie ServiceNow die Konstruktor (initialize()) Methode zu überschreiben, aber lass es als Klasse.


Da Sie sagen, Sie bekommen ein sys_id zurückgegeben, es ist möglich, dass das, was beschrieben I ist nicht das Problem, und diese Lösung wird nicht funktionieren. Ich habe jedoch nicht genügend Informationen, um eine andere Antwort zu geben. Wenn dies der Fall ist, führen Sie bitte die Abfrage aus, die Ihnen nicht die richtigen Ergebnisse anzeigt. Klicken Sie dann mit der rechten Maustaste auf den letzten Query Breadcrumb am oberen Rand der Liste und dann auf "Abfrage kopieren", dann einfügen Sie die Abfrage in eine Antwort auf diesen Thread (speziell auf meinen Kommentar antworten, damit ich benachrichtigt werde), damit ich einen Blick darauf werfen kann.

Bitte auch offensichtlich geben Sie den Code in Ihrem Skript enthalten, damit ich Ihnen bei der Fehlersuche helfen kann.


EDIT: Nun, was Sie Ihren Code in einer Antwort auf diesen Kommentar hinzugefügt haben, kann ich einige Probleme sehen.

Ihr original:

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

Hier sind all die Änderungen, die ich an Ihrem Code gemacht, und eine Erklärung für jeden:

Zuerst auf Linie 5 in dem folgenden Code, ich habe geändert, wie Ihre Member-Funktion (alias "Methode") deklariert wird. Sie hatten es so deklariert: getSysIds: function getMyGroupMembers() {} Also hier, Sie haben es im Wesentlichen zwei Namen gegeben und es auf zwei Arten gleichzeitig erklärt. Normalerweise wird eine Funktion wie folgt deklariert: function functionName(args) {} Innerhalb eines Objekts (oder in diesem Fall einer Klasse - also eines Objekts mit einem Konstruktor, der Kopien von sich selbst mit dem Schlüsselwort "new" zurückgibt) deklarieren wir Funktionen wie folgt: functionName: function(args) {}, So wie Sie in dem Code unten sehen können, habe ich diese Anpassung für Sie vorgenommen.

Als nächstes, unter Zeile 8 unten, habe ich den redundanten '=' Operator von Ihrem addQuery() Methodenaufruf entfernt, da "=" impliziert wird, wenn nicht angegeben. Dies ist nicht erforderlich, aber es sieht auf diese Weise sauberer aus. (Ich habe umbenannt auch Ihre GlideRecord Variable von ga zu grApprovalGroup im gesamten Gebäude, so dass es mehr Sinn macht.)

ich die Erklärung von sysIdArray an die Spitze der Funktion für die Übereinstimmung mit bewegt habe, wie sie ausgeführt hat (und zur Klarheit). Dies ist ebenfalls nicht erforderlich, wird aber generell empfohlen.

Linie 12 unten, in Ihrer ursprünglichen Code, sah wie folgt aus: sysIdArray.push(grApprovalGroup.sys_id); Da jedoch gr.sys_id ist ein Objekt (Typ: "GlideElement" - documentation here), ist dies ein Referenz dem Drücken Objekt in das Array. Mehr als Stringwert Eigenschaft des Objekts (der am Ort gr.sys_id ändert, ändert so die Zeichenfolge Werteigenschaft jeden einzelnes Element in dem Array, da jedes einzelne Element eine Referenz auf dasselbe Objekt! Informationen dazu, in einem Artikel (den ich schrieb) that you can find here. Es genügt zu sagen, dass dies keine gute Idee ist, und wird immer wieder in eine Liste der gleichen sys_id führen! Um dies zu beheben, verwenden wir einfach das Beste -Praxis empfohlen „Getter“ -Methode (wie der Artikel I empfiehlt verbunden sind), wie Sie unten auf der Linie 12 in den Code sehen.

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

Schließlich müssen wir die Funktion tatsächlich aus der Klasse extrahieren und umbenennen, so dass das Skript selbst nur die Funktion ist.

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

Da Sie nicht das „neue“ Schlüsselwort in Abfrage Javascript verwenden können, ist es notwendig, es so zu definieren (ohne Klasse), und sobald wir getan haben, dass wir das „Client wieder aktivieren können Callable "Option, die Sie zuvor aktiviert hatten.

Sobald Sie das getan haben, sollten Sie auf die folgende URL gehen können, und Abfrage-Skript in Aktion sehen:

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

+0

Nach dem Vorschlag der Umsetzung meinen Code ähnlich ist wie folgt: var GetMoreInfoUpdatedChangeTickets = Class.create(); GetMoreInfoUpdatedChangeTickets.prototype = {initialize: function() {}, getSysIds: Funktion 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 Rückgabe sysIdArray; }, geben Sie ein: 'GetMoreInfoUpdatedChangeTickets'}; –

+0

Sie haben nicht wirklich erwähnt, ob es funktioniert oder nicht ... –

+0

Dort habe ich meinen ersten Kommentar mit mehr Infos und die Lösung aktualisiert. Bitte sehen Sie es sich an und versuchen Sie beim nächsten Mal die angeforderten Informationen anzugeben, wenn Sie Hilfe benötigen. –

Verwandte Themen