Autor Thema: SortOption in Methode addColumn für NotesQueryResultsProcessor defekt  (Gelesen 1585 mal)

pantelis.botsas

  • Gast
Hallo zusammen

Ich habe wieder mal etwas mit dem NotesQueryResultsProcessor versucht, um ein DQL-Suchergebnis als temporäre Ansicht zurückzugeben.

Das ganze funktioniert bei mir, solange ich den Parameter für SortOption (der 4. Parameter für die Methode addColumn) nicht mitgebe.
Der LotusScript Editor selbst schluckt die Kontante SORT_ASCENDING als 4. Parameter.

Beim Ausführen in einem zeitgesteuerten Agenten wird dann dieser Fehler ausgegeben:
AMgr: Agent (...) error message: Invalid Sort Order - please use a SORT_ constant

Da ich aber eine SORT_ Konstante benutze, scheint mir, dass diese Methode in der 12-Version (aktuell 12.0.1) einen Hau hat.
Dabei ist es egal, ob man hier SORT_ASCENDING, SORT_DESCENDING oder SORT_UNORDERED nutzt.

Auch in der Hilfe kommt man nicht weiter. Dort sind die angegebenen Beispiele teilweise fehlerhaft.

Lieben Gruß,
Pantelis
« Letzte Änderung: 23.09.22 - 17:13:13 von pantelis.botsas »

pantelis.botsas

  • Gast
Hallo zusammen,

ich habe eine Zwischenlösung überlegt, solange das mit der Sortierung beim Erstellen einer temporären View mittels executeToView im NotesQueryResultsProcessor nicht funktioniert.

Meine Aufgabenstellung für die sortierte Spalte ist, dass ich dort sogenannte Primary Keys aufbaue, mit denen ich zwischen verschiedenen Anwendungen Zusammenhänge zu Dokumenten herstellen kann.
Somit wäre die effektive Variante, dass ich mir über die erste sortierte Spalte über getEntryByKey den Eintrag greife, mit dem ich eine Verbindung herstellen möchte.

Da nun die Sortierung nicht funktioniert musste ich einen Umweg wählen.

Nachdem nun die temporäre Ansicht über den NotesQueryResultsProcessor erstellt wird, hole ich mir die erste Spalte über die Methode getColumnValues aus dem NotesView Objekt.
Dieses Ergebnis ist ein Array von Strings.

Um nun auf einen ganz bestimmten Eintrag in dieser temporären Ansicht zugreifen zu können, hole ich mir die Position des Eintrags in der unsortierten Ansicht aus dem zuvor gespeicherten Array mit der Methode ArrayGetIndex.
Mit dieser Position wiederum, greife ich in die temporäre Ansicht über die Methode NotesView.getAllEntries.getNthEntry() und hole mir den Eintrag, der aktuell relevant ist.

Vorsicht: Dies funktionert nur dann, wenn der Primary Key tatsächlich eindeutig ist.

Ich hoffe, dass meine Ausführungen soweit verständlich geworden sind und anderen dabei helfen, die derzeitige Einschränkung ebenfalls zu umschiffen.

Offline Werner Götz

  • Aktives Mitglied
  • ***
  • Beiträge: 249
  • Geschlecht: Männlich
Hast Du eigentlich mal probiert, was passiert, wenn Du statt SORT_ASCENDING den zugehörigen Zahlenwert (1) verwendest?
-Werner

pantelis.botsas

  • Gast
Hallo Werner,

vielen Dank für diesen Hinweis :knuddel: Das hat weitergeholfen.

Ich werde mir jetzt noch die anderen Konstanten extrahieren und diese in meinem DQLWrapper hinterlegen.

... wenn man den Wald vor lauter Bäumen nicht sieht  :D

Lieben Gruß und einen schönen Feiertag.

pantelis.botsas

  • Gast
Hallo nochmal,

mit dem Hinweis von Werner konnte das Problem mit der Sortierung einer Spalte in der temporären DQL-Ansicht gelöst werden.
Mit einer winzigen Einschränkung ...

Ich habe eine Methode, der ich mitgebe, wie ich die Spalte angelegt haben möchte. Diese Methode überträgt dann die gegebenen Parameter in die Routine, welche im NotesQueryResultsProcessor die entsprechenden Spalten anlegt:
   Public Sub addColumn(colName As String, colTitle As String, colFormula As String, sortOrder As Integer, categorized As Boolean)
      Call me.nQRP.Addcolumn(colName, colTitle, colFormula, CInt(sortOrder), False, CBool(categorized))
   End Sub


Spannend ist jetzt hier der Parameter sortOrder. Auch wenn dieser in der Methode als Integer übergeben wird, versteht die Routine, welche im NotesQueryResultsProcessor die Spalte anlegt das erst, wenn ich explizit beim Aufruf auf der Wert ein Cast mit CInt durchführe. Sonst funktioniert das nicht.

Das gleiche gilt leider auch für alle boolschen Parameter.

Lieben Gruß,
Pantelis
« Letzte Änderung: 05.10.22 - 16:45:20 von pantelis.botsas »

pantelis.botsas

  • Gast
Was niemand einem erzählt, bei der Nutzung der neuen DQL-Funktionalitäten ...

Damit alles sauber funktoniert, muss der Agent, mit dem die Abfragen durchgeführt und dann als temporäre Ansichten angelegt werden, mindestens Designer-Privilegien besitzen und unbedingt die Berechtigungen zum Löschen besitzen, wenn temporöre Ansichten aktualisiert werden.

Ist das nicht der Fall, sprudelt die Konsole nur so vor Hinweisen auf fehlenden Berechtigungen zur Ausführung eines Löschvorgangs.
Warum die Löschberechtigung benötigt wird, um eine vorhandene temporäre Ansicht zu aktualisieren ist hier überhaupt nicht nachvollziehbar.

Das alles kann man umgehen, wenn man für die Methode execute im NotesQueryResultProcessor das Anlegen dieser sogenannten Named Results (temporäre Ansichten) einfach nicht durchführt, sondern in einer eigens dafür eingerichteten Ergebnisdatenbank ablegt, in der dann diese speziellen Zugriffsprivillegien eingerichtet sind.
« Letzte Änderung: 19.10.22 - 12:58:56 von pantelis.botsas »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz