Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Bruce Willis am 12.12.12 - 10:46:27

Titel: Liste der Agenten sortieren
Beitrag von: Bruce Willis am 12.12.12 - 10:46:27
Hallo,

(wie) könnte die Liste der Agenten nach Namen sortiert werden?
Der Code unten bringt die unsortierte Liste.

Gruß
Leo


Sub Initialize
  Dim session As New NotesSession
  Dim db As NotesDatabase
  Set db = session.CurrentDatabase
  agents = db.Agents
  If Not IsEmpty(agents) Then
    Forall agent In agents
      Messagebox(agent.Name) 
    End Forall
  Else
    Messagebox("No agents in database")
  End If
End Sub
Titel: Re: Liste der Agenten sortieren
Beitrag von: koehlerbv am 12.12.12 - 10:49:54
Die musst Du Dir entsprechend Deiner Anforderungen selbst sortieren. NotesDatabase.Agents gibt Dir ein Array sortiert nach der NoteID (Erstellungsdatum) zurück.

Bernhard
Titel: Re: Liste der Agenten sortieren
Beitrag von: Tode am 12.12.12 - 10:54:00
Entweder Du suchst Dir einen Sort- Algorithmus Deiner Wahl aus und implementierst ihn in LotusScript (BubbleSort, QuickSort, etc.),
oder Du nutzt die @Sort- Funktion per evaluate...

Code
Dim session As New NotesSession
  Dim db As NotesDatabase
  Dim strAgents as String
  DIm varSortedAgents as Variant
  Set db = session.CurrentDatabase
  agents = db.Agents
  If Not IsEmpty(agents) Then
    Forall agent In agents
      If strAgents = "" then
        strAgents = agent.Name
      else
        strAGents = strAgents + "~" + agent.Name
      End If
    End Forall
    varSortedAgents = Evaluate( {@Sort( @Explode( "}&strAgents&{";"~");[ASCENDING])} )
    '- hier tun was immer Du mit Deinen sortierten Agenten machen willst
  Else
    Messagebox("No agents in database")
  End If
Titel: Re: Liste der Agenten sortieren
Beitrag von: Bruce Willis am 12.12.12 - 11:06:42
NotesDatabase.Agents gibt Dir ein Array sortiert nach der NoteID (Erstellungsdatum) zurück.


Ah so.
Danke, Bernhard.
Titel: Re: Liste der Agenten sortieren
Beitrag von: Bruce Willis am 12.12.12 - 11:07:57
...in LotusScript (BubbleSort, QuickSort, etc.),
oder Du nutzt die @Sort- Funktion per evaluate...


Vielen Dank, Torsten !!!
Titel: Re: Liste der Agenten sortieren
Beitrag von: pram am 12.12.12 - 11:22:27
Tode, eine Anmerkung von mir, bei sowas schrillen bei mir immer die Alarmglocken:
Code
Evaluate( {@Sort( @Explode( "}&strAgents&{";"~");[ASCENDING])} )

Spätestens wenn im Agentname ein " vorkommt, kracht es.
(außerdem sind Code-Injections möglich. z.B. wenn der Agentname irgendwie so
" + @SetDocField(....) + "
lauten würde, dies ist zwar hier unwahrscheinlich, spätestens bei Werten die der User eingeben kann, sollte man aber vorsichtig sein.)
Die Länge der Formel ist weiterhin auf ~2K beschränkt

Besser ist es, wenn man die Parameter über ein Dokument rein reicht:
Code
doc.agents = strAgents
Evaluate( {@Sort( @Explode( "agents";"~");[ASCENDING])}, doc )
Die Formel kann dann sogar zur Compilezeit überprüft werden.


Gruß
Roland

/edit: je nach Anwendungsfall kann man sogar folgendes machen: http://www-10.lotus.com/ldd/ddwiki.nsf/dx/view-of-design-elements.htm (FormulaClass kann man seit 8.5.1. bequem über den DXL-Editor anpassen)
Die Ansicht muss natürlich in der Anwendung mit den Agenten erstellt werden. Wir verwenden sowas z.B. zur Auswahl von Teilmasken etc. Die Dropdown-Felder werden dabei über einen @DBlookup/@DBColumn befüllt
Titel: Re: Liste der Agenten sortieren
Beitrag von: Tode am 12.12.12 - 11:41:01
@Roland: Du hast vollkommen recht... Das ganze fällt auch auf die Schnauze, wenn jemand ein "~" im Agentenname benutzt... Ich wollte auch nur eine grundsätzliche Möglichkeit aufzeigen... Aber auf die Gefahren hätte ich natürlich hinweisen sollen. Die Design- Klasse ist natürlich hierfür auch ganz gut zu benutzen, und die Ansicht für Desing- Elemente verwende ich auch ab und zu, also danke für die Ergänzungen.
Titel: Re: Liste der Agenten sortieren
Beitrag von: Bruce Willis am 12.12.12 - 13:06:16
...eine Anmerkung von mir...
Besser ist es, wenn man ...
je nach Anwendungsfall kann man sogar ...
Vielen Dank für Deine Vorschläge, Roland !
Titel: Re: Liste der Agenten sortieren
Beitrag von: Bruce Willis am 12.12.12 - 13:10:00
...eine grundsätzliche Möglichkeit ...

Nochmals vielen Dank!!!
Funktioniert perfekt!
Ich musste nur hier zusätzlich Leerzeichen einfügen:

Code
varSortedAgents = Evaluate( {@Sort( @Explode( "}& strAgents &{";"~");[ASCENDING])} )