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
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:
- 1. Python MySQL: Keine eingefügten Datensätze anzeigen
- 2. WSO2-CEP-Ereignistabellen - Anzeigen der Datensätze in einer Ereignistabelle
- 3. Nur doppelte Datensätze in der Datenbank anzeigen
- 4. mehrere Datensätze in einer Spalte in der Rasteransicht anzeigen
- 5. Anzeigen has_many,: durch Assoziation Datensätze
- 6. Suchfunktion aufrufen: "No Match" anzeigen, wenn keine Datensätze gefunden wurden
- 7. Warum kann ich keine Datensätze mit ngTable anzeigen
- 8. MySQLi seltsames Verhalten - Anzeigen Insertion Erfolg, aber keine Datensätze in der Tabelle
- 9. Datensätze von Arrays in Spark (1.6.1)
- 10. Datensätze nur für zwei Wochen anzeigen! von der Erstellung
- 11. Facebook-Anzeigen-Creative mit Call-to-Action gibt keine Erlaubnis für Call-to-Action
- 12. erzeugen mehrere Datensätze nach der Anzahl der Elemente des Arrays
- 13. Alle Many to Many Beziehungen in einer Vorlage anzeigen
- 14. SQL: SELECT-Anweisung, um alle Datensätze zurückzugeben, JOIN-Wert ist NULL, Abfrage gibt keine Datensätze zurück
- 15. Keine neuen Datensätze einfügen
- 16. Linq To Sql ManyToMany Aktualisieren vorhandener Datensätze
- 17. Linq To Sql - Wie # der eingefügten Datensätze erhalten
- 18. Arrays und Datensätze in Bytecode darstellen
- 19. cartodb derzeit keine Datensätze hochladen
- 20. LINQ to SQL-Update alle Datensätze
- 21. Anzeigen mehrerer Datensätze in einer Zeile mit doppelter Benutzer-ID
- 22. Ergebnisse einer LINQ TO XML-Abfrage in Gridview anzeigen
- 23. Anzeigen von Arrays in innerHTML
- 24. UI-Grid kann keine Daten anzeigen, b.forEach ist keine Funktion
- 25. Kann keine Ausgabe anzeigen
- 26. Wie bekomme ich keine Datensätze aus der Tabelle SQL?
- 27. Überprüfung der Leere des Fetch-Arrays
- 28. Winkelregler, der keine Variablen zum Anzeigen druckt
- 29. Keine Nullwerte anzeigen
- 30. LINQ to JSON - Abfragen eines Arrays
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'}; –
Sie haben nicht wirklich erwähnt, ob es funktioniert oder nicht ... –
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. –