Autor Thema: Dialoglistenauswahl zur Laufzeit ändern  (Gelesen 8443 mal)

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Dialoglistenauswahl zur Laufzeit ändern
« am: 07.08.06 - 19:53:13 »
Hallo alle zusammen,

in der Forum-Suche habe ich nichts passendes dazu gefunden, deswegen ein neuer Beitrag.

Folgendes Problem: Ich möchte anhand einer Benutzerauswahl im Postopen die Auswahlliste eines Dialog- oder Kombinationsfeldes mit verschiedenen Werten füllen.

Zum Auslesen der jeweiligen Werte verwende ich folgenden Code:

Sub Postopen(Source As Notesuidocument)
        Dim work As New NotesUIWorkspace
   Dim s As New NotesSession
   Dim db As notesdatabase
   Dim view As NotesView   
   Dim Doc As NotesDocument
   Dim Feld As NotesItem
   Dim arr()
   
   Dim Auswahl As Variant
   Dim Bereich(1) As String
   
   Bereich(0)="Angestellte"
   Bereich(1) = "Gewerbliche"
   
   auswahl = work.Prompt(Prompt_OKCANCELLIST,"Test","Bitte wählen Sie den Bereich","",Bereich)
   
   Set db = s.CurrentDatabase
   Set view = db.GetView("Personal - " & Auswahl)
   Set doc = view.GetFirstDocument
   
   For i = 1 To view.AllEntries.Count
      Redim Preserve arr(i)
      arr(i) = doc.GetItemValue("PersNr")
      Set doc = view.GetNextDocument(doc)
   Next i
end sub


Hatte es mit .appendtotextlist probiert, da es mich an .additem aus Excel erinnert hat, dort wurden die Werte aber direkt in das Feld geschrieben.

Oder kann man diese Felder generell nur mit @dblookup und @dbcolumn füllen?


Gruß
Demian

 
Gruß
Demian

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Dialoglistenauswahl zur Laufzeit ändern
« Antwort #1 am: 07.08.06 - 20:17:20 »
Zuerst einmal Vorsicht: Du musst im PostOpen zumindest anfangs erstmal die Bedingung abfragen, unter der die Befüllung Deines Auswahlfeldes überhaupt geprüft werden soll. Minimum wäre die Prüfung auf den EditMode ...

Weiters: Dein Auswahlfeld muss sich auf ein berechnetes Feld beziehen ("Formel verwenden" und dann dieses Feld angeben). Wie Du dieses dann füllst - ob per @dbLookup (@dbColumn kommt hier ja wohl nicht in Frage) oder mit LotusScript, ist Jacke wie Hose ... mit dem "kleinen" Unterschied, dass Du mit Formelsprache auch Felder "Berechnet zur Anzeige" füllen kannst, mit LS jedoch nicht.

Bernhard

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: Dialoglistenauswahl zur Laufzeit ändern
« Antwort #2 am: 08.08.06 - 12:41:37 »
Wenn ich in LS einem item die Property SAVETODISK=FALSE gebe, habe ich in LS auch ein "BERECHNET ZUR ANZEIGE"-Feld. Genau das war es ja, was sich zwischen Version 4 und Version 5 geändert hatte.

In den Versionen vor Version 5 konnte ich Felder BERECHNET ZUR ANZEIGE machen, bei Bedarf dann ein VIEWSWITCHFORM, dort in einer anderen Maske das gleichnamige Feld BEARBEITBAR oder BERECHNET. Wenn ich gespeichert habe, blieb dieses Feld auf alle Ewigkeiten erhalten.

Ab Version 5 ist das Verhalten anders. Das Feld ist nach dem nächsten Speichern mit der Maske, in der es als BERECHNET ZUR ANZEIGE deklariert ist, weg.
Situs vilate in isse tabernit.

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Dialoglistenauswahl zur Laufzeit ändern
« Antwort #3 am: 08.08.06 - 13:41:39 »
Hallo ihr beiden,

Bernhard mit deinem Hinweis auf Editmode zu prüfen hast du natürlich recht. Sollte ich mir mal angewöhnen.  :)

Allerdings ist mir nicht ganz klar was du mit : "dein Auswahlfeld muss sich auf ein berechnetes Feld beziehen...." meinst?

Die Auswahl erfolgt doch über work.prompt?

Wie kann ich denn generell die Auswahlliste per Script erstellen?

@LN4ever: Sorry, aber da steh ich auf dem Schlauch...

Gruß
Demian

 
Gruß
Demian

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Dialoglistenauswahl zur Laufzeit ändern
« Antwort #4 am: 08.08.06 - 14:11:31 »
Deine Auswahl triffst Du wohl über Prompt, aber damit muss ja das Auswahlfeld bedient werden. Und dieses soll sich über ein Feld (das den Inhalt Deines Arrays arr" erhält) bedienen - daher "Auswahl per Formel".

Das andere Thema: Norbert hat selbstverständlich Recht - man kann verhindern, dass ein Item im Backend genauso wie das Feld "Berechnet zur Anzeige" im Frontend nicht gespeichert wird - mea culpa.

Bernhard

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Dialoglistenauswahl zur Laufzeit ändern
« Antwort #5 am: 08.08.06 - 18:26:17 »
Moin, moin,

also lässt sich die Auswahlliste der Felder nicht direkt per Script erstellen wie mit

for i = 1 to 10
    Combobox1.additem "Test " & i
next i


in Office, wenn ich das richtig sehe.  :'(  :'(

Also, ich bin jetzt folgendermaßen vorgegangen:
Ich habe im Designer ein unsichtbares Feld erstellt namens "ArrPersNr" erstellt. Dieses Feld fülle ich aus dem Postopen der Maske heraus mit folgendem Code:

Sub Postopen(Source As Notesuidocument)
   If source.EditMode = True Then
      Dim work As New NotesUIWorkspace
      Dim s As New NotesSession
      Dim db As Notesdatabase
      Dim view As NotesView   
      Dim Doc As NotesDocument
      Dim Feld As NotesItem
      Dim arr()   
      
      Set db = s.CurrentDatabase
      Set view = db.GetView("Personal - " & source.FieldGetText("Bereich")) 'Vorgabe Bereich = "Gewerbliche"
      Set doc = view.GetFirstDocument
      
      For i = 1 To view.AllEntries.Count
         Redim Preserve arr(i)
         arr(i) = doc.GetItemValue("PersNr")
         Set doc = view.GetNextDocument(doc)
      Next i      
      
      For i = 1 To view.AllEntries.count
         Set doc = source.Document
         Set feld = doc.GetFirstItem("ArrPersNr")         
         Call feld.AppendToTextList(arr(i))
      Next i
   End If   
End Sub


Meine Dialogliste übernimmt automatisch diese Werte. Für das wechseln des Bereiches habe ich eine Aktion mit folgendem Inhalt hinterlegt:

Sub Click(Source As Button)
   Dim work As New NotesUIWorkspace   
   Dim uidoc As NotesUIDocument
   Set uidoc = work.CurrentDocument
   
   If uidoc.EditMode = True Then
      Dim s As New NotesSession
      Dim db As Notesdatabase
      Dim view As NotesView   
      Dim doc As NotesDocument
      Dim Feld As NotesItem
      Dim arr()   
      
      'Feldwerte ändern
      Set doc = uidoc.Document
      
      If uidoc.FieldGetText("Bereich") = "Angestellte" Then
         Call doc.ReplaceItemValue("Bereich","Gewerbliche")
      Else
         Call doc.ReplaceItemValue("Bereich","Angestellte")
      End If      
      
      Call doc.ReplaceItemValue("PersNr","")
      Call doc.ReplaceItemValue("Name","")
      Call doc.ReplaceItemValue("Abteilung","")      
      Call doc.ReplaceItemValue("KstStelle","")
      
      'Auswahlliste ändern
      Set db = s.CurrentDatabase
      Set view = db.GetView("Personal - " & uidoc.FieldGetText("Bereich"))
      Set doc = view.GetFirstDocument
      
      For i = 1 To view.AllEntries.Count
         Redim Preserve arr(i)
         arr(i) = doc.GetItemValue("PersNr")
         Set doc = view.GetNextDocument(doc)
      Next i
      
      Set doc = uidoc.Document
      Call doc.ReplaceItemValue("ArrPersNr","")
      
      For i = 1 To view.AllEntries.count      
         Set feld = doc.GetFirstItem("ArrPersNr")   
         Call feld.AppendToTextList(arr(i))
      Next i      
   End If   
   
   Call uidoc.Refresh
End Sub


Auch wenns etwas umständlich ist, aber es klappt einwandfrei.   :)

Vielen Dank euch beiden.


Gruß
Demian
Gruß
Demian

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Dialoglistenauswahl zur Laufzeit ändern
« Antwort #6 am: 08.08.06 - 18:30:34 »
Du hast das schon richtig erkannt mit dem Unterschied zu VB / VBA  ;)  Das Datenmodell ist bei Notes nun ja auch ein anderes.

Eine Anmerkung noch: Das Feld ArrPersNr hättest Du nicht als Feld in der Maske erstellen brauchen - es reicht vollkommen, wenn dies im Backend (im Dokument) vorhanden ist - ob es das in der Maske gibt oder nicht oder in China ein Sack Reis umfällt, ist vollkommen egal.

Bernhard

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Dialoglistenauswahl zur Laufzeit ändern
« Antwort #7 am: 08.08.06 - 21:22:19 »
Hallo Bernhard,

ich weiß, ich weiß.

Aber so weiß ich wenigstens immer was wo hingehört. Wenn ich mir das Ganze in 3 Jahren nochmal ansehe, brauch ich wahrscheinlich sonst erst mal nen Augenblick bis ich wieder weiß, wo die Werte herkommen.   :)

Das mit dem Datenmodell ist wohl wahr, man muss ja auch um einiges mehr deklarieren.

Aber irgendwie klappts immer  ;D

Gruß
Demian
Gruß
Demian

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Dialoglistenauswahl zur Laufzeit ändern
« Antwort #8 am: 08.08.06 - 21:34:24 »
Na, mit den Deklarationen hat das aber nix zu tun  ;)  Ausserdem: Was nützt Dir ein Frontend-Element wie ein Feld (was im Frontend überhaupt nicht gebraucht wird), wenn Du nachvollziehen willst, wo die Inhalte herkommen? In der Formel des Feldes steht doch eh der Feldname selber, Du siehst also nur den puren Selbstbezug, aber nicht die Verbindung zu Deinem Code.
Abgesehen davon - auch wenn dies nur marginal ist: Du verlierst mit sowas Performance und irgendwie auch die Übersicht. Eine saubere Dokumentation der gesamten Dokumentation nimmt Dir das eh nicht ab  :)

Bernhard

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: Dialoglistenauswahl zur Laufzeit ändern
« Antwort #9 am: 09.08.06 - 10:48:18 »
Ich glaube, daß es noch einen Denkfehler im Modell gibt. Du füllst das Feld im Postopen mit den Personalnummern, wenn das Dokument im EDIT-Mode geöffnet wird. Was passiert, wenn jemand das Dokument im Lesemodus öffnet und dann auf EDIT geht ? Nix - steht nix drin - woher auch ?

Wie kann man das umgehen, ohne doppelt zu codieren ?

In den Globals der Maske definierst du eine Variable
Dim ListeGefuellt As Variant

Im Initialize der Globals setzst du diese Variable auf False

Im Postopen und im QueryModeChange prüfst du dann, ob die Variable auf TRUE steht, sonst machst du ein CALL LISTEFUELLEN

Und in der Sub LISTEFUELLEN befüllst du dein Feld und setzst die Variable LISTEGEFUELLT auf TRUE.
Situs vilate in isse tabernit.

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Dialoglistenauswahl zur Laufzeit ändern
« Antwort #10 am: 09.08.06 - 21:04:08 »
Hallo ihr beiden,

@LN4ever:
Berechtigter Einwand. Ich sehe, ich muss noch viel lernen.  :)

Habe es jetzt mit deinem Beispiel probiert. Meine Funktion zum Listefüllen sieht jetzt folgendermaßen aus:

Sub Postopen(Source As Notesuidocument)   
   If ListeGefüllt = False Then Call Listefüllen(source)         
End Sub


Function ListeFüllen(source As NotesUIDocument)
   If source.EditMode = True Then
      Dim s As New NotesSession
      Dim db As Notesdatabase
      Dim view As NotesView   
      Dim Doc As NotesDocument
      Dim Feld As NotesItem
      Dim arr()   
      
      Set db = s.CurrentDatabase
      Set view = db.GetView("Personal - " & source.FieldGetText("Bereich"))
      Set doc = view.GetFirstDocument
      
      For i = 1 To view.AllEntries.Count
         Redim Preserve arr(i)
         arr(i) = doc.GetItemValue("PersNr")
         Set doc = view.GetNextDocument(doc)
      Next i            
      
      For i = 1 To view.AllEntries.count
         Set doc = source.Document
         Set feld = doc.GetFirstItem("ArrPersNr")         
         Call feld.AppendToTextList(arr(i))
      Next i
      
      ListeGefüllt = True
   End If
End Function


Den Parameter musste ich angeben, weil er auf dem Weg von Postopen zu Listefüllen den editmode auf false setzt, wenn ich in der Funktion Source neu deklariere und mit set source = work.currentdocument "fülle"  ??? CurrentDocument ist doch zu dem Zeitpunkt eigentlich im Bearbeitsungsmodus, oder nicht?

@Bernhard:
Wie müsste ich das Feld denn im Backend füllen? Mit doc.ArrPersNr = arr gehts nicht, da kommt die Fehlermeldung : "Arrays of arrays are not supported"!!!

Was meinst du mit: "Eine saubere Dokumentation der gesamten Dokumentation nimmt Dir das eh nicht ab"?? Mit Dokumentieren hab ichs nicht so...

Gruß
Demian
« Letzte Änderung: 10.08.06 - 13:58:09 von Demian »
Gruß
Demian

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Dialoglistenauswahl zur Laufzeit ändern
« Antwort #11 am: 09.08.06 - 21:42:37 »
Wie müsste ich das Feld denn im Backend füllen? Mit doc.ArrPersNr = arr gehts nicht, da kommt die Fehlermeldung: "Arrays of arrays are not supported"!!!

Ich habe keine Ahnung, wie dein Code da wirklich aussah. Wenn Du ein eindimensionales Array einem Item zuweist, dann funktioniert das auch. "Array of arrays" lässt aber auf ganz anderes schliessen. Ohne Deinen Code kann daher hier niemand was sagen.

Was meinst du mit: "Eine saubere Dokumentation der gesamten Dokumentation nimmt Dir das eh nicht ab"?? Mit Dokumentieren hab ichs nicht so  :)

Das ist ganz schlecht. Damit tut man nicht nur seinen Kollegen keinen Gefallen, sondern auch denen, die vielleicht irgendwann später mal mit den Ergüssen ihrer Vorgänger klarkommen müssen. Der vielleicht wichtigste Aspekt ist aber: In einem Vierteljahr siehst Du ohne eine gewisse Doku in Deinem Code selber nicht mehr durch.
Ich erlebe das gerade wieder in voller Palette live: Aktuelle oder bereits gegangene Kollegen haben irgendwas "zusammengeschmiert", und das Aufräumen / Reparieren von nicht funktionierenden Algorithmen kostet nun richtig Geld - nur, weil die "genialen" Programmierer nicht artikulieren konnten, was sie mit ihrem Mist (teilweise) überhaupt bezwecken wollten. Und dass das nun Geld kostet, will auch keiner einsehen ...

Lass also bitte den Smiley hinter "Mit dokumentieren hab ich's nicht so" weg - unsereins kann darüber wirklich nicht lachen (auch, wenn den Nicht-Doku-Schreibern schon längst gekündigt wurde).

Bernhard

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Dialoglistenauswahl zur Laufzeit ändern
« Antwort #12 am: 10.08.06 - 09:37:29 »
Hallo Bernhard,

hatte das mit der Doku nicht auf mein Script bezogen. Das dokumentier ich größtenteils schon. Außer Sachen, von denen ich denke, dass sie sowieso klar sind. Beziehungsweise in der Testphase dokumentier ich auch nicht. Erst wenn ich der Meinung bin, der Code steht. Ich dachte du meinst eine Doku über die Datenbank als solche und Ihre Funktionen, also eine Anleitung.

Da bin ich besser drin, jemandem was zu zeigen, als da seitenweise irgendwas runterzutippen.

Also, nimm mir das mit dem Smiley bitte nicht übel.

Mein Code steht in meinem letzten Beitrag (function Listefüllen). An für sich handelt es sich doch um ein eindimenionales Array (redim preserve arr(i)).

Gruß
Demian







Gruß
Demian

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: Dialoglistenauswahl zur Laufzeit ändern
« Antwort #13 am: 10.08.06 - 10:28:47 »
Ich würde keine Umlaute in Modul- und Variablennamen verwenden.

Und: die gleiche Abfrage muß auch in das QueryModeChange rein (dort vermutlich nur andersherum, weil der Modus übergeben wird, in dem du beim Aufruf bist - sprich: beim Wechsel von READ auf EDIT im Dokument ist EDITMODE noch FALSE. Schau es dir im Debugger an, wie es reagiert.

Du startest mit deinen FOR-Schleifen immer bei 1. Normalerweise startet Notes aber bei Arrays mit der Indexzählung bei 0.

Das Befüllen des Arrays geht übrigens deutlich schneller, wenn du es nicht permanent nachdimensionierst. Wenn du es also mit

docanzahl=view.Allentries.count
If count >0 Then
  Dim arr(docanzahl-1)
  For i=0 To docanzahl-1
    ...
  Next
Else
  Dim arr(0)
  arr(0)=""
End If

machst, sparst du Zeit. Das ist noch marginal, aber spürbar Zeit sparen kannst du, wenn du das Set doc=source.document und das SET FELD in der zweiten FOR-Schleife vor die Schleife setzst.

Und eigentlich brauchst du diese Schleife gar nicht, weil du das ganze item mit einem REPLACEITEMVALUE oder aber mit

SET FELD = New Notesitem(doc,"ArrPersNr",arr)
FELD.SaveToDisk=False

befüllenn kannst. Wenn du dich für die letzte Variante entscheidest, muß sichergestellt sein, daß das Feld ARRPERSNR nicht existiert (sonst bekommst du doppelte gleichnamige Felder (sehr unschön mit GetFirstitem - igittigitt)) - und da sind wir bei der Diskussion um das Feld in der Maske. Ich würde nicht das Feld in die Maske aufnehmen, sondern einen Kommentar in die Maske schreiben, der die Erzeugung via Script beschreibt.

Gruß

Norbert
Situs vilate in isse tabernit.

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Dialoglistenauswahl zur Laufzeit ändern
« Antwort #14 am: 10.08.06 - 14:38:27 »
Abgesehen von allem was Norbert und Bernhard schon gesagt haben ist die Struktur deines Codes auch noch ziemlich uneben. Das Befüllen des Feldes kann man eleganter und nur mit einer Schleife machen.

Code
Function ListeFuellen(source As NotesUIDocument)
	If source.EditMode = True Then
		Dim s As New NotesSession
		Dim db As Notesdatabase
		Dim view As NotesView	
		Dim Doc As NotesDocument
		Dim KeyDoc As NotesDocument
		Dim Feld As NotesItem
		Dim arr() as string	
		
		Set db = s.CurrentDatabase
		Set view = db.GetView("Personal - " & source.FieldGetText("Bereich"))
		Set keydoc = view.GetFirstDocument
		set doc = source.document

		Set feld = new notesitem(doc,"ArrPersNr")			
		
                redim arr(viewAllEntries.count) as string
		For i = 1 To view.AllEntries.Count
			arr(i)= Keydoc.GetItemtext("PersNr")
			Set keydoc = view.GetNextDocument(keydoc)
		Next i				
		
                feld = doc.replaceitemvalue("ArrPersNr";arr)

		ListeGefüllt = True
	End If
End Function
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Dialoglistenauswahl zur Laufzeit ändern
« Antwort #15 am: 11.08.06 - 09:21:09 »
ausser einem klitzekleinen Hinweis habe ich einen (für mich entscheidenden) Punkt bisher vermisst:

Diesen ganzen Klumpatsch- Code (um die 30 Zeilen, je nachdem wie man zählt), lässt sich durch
eine Zeile Formelsprache (2 mit Errorhandling) ersetzen, und damit muss man

a) nicht auf "SAVETODISK=FALSE" achten
b) nicht die verschiedensten Events ausprogrammieren (Postopen, Querymodechange....)
c) nicht backend- Routinen benutzen, um etwas im Frontend zu bewegen.
d) nicht darauf vertrauen, dass das Feld "Bereich" im Dokument schon gefüllt ist, wenn man das Dokument öffnet, das berechnete Feld reagiert (beinahe) automatisch auf Änderungen des Bereichs

Also:

Du erstellst eine View "PersonalLkp" (das kann man auch sein lassen und unten den DBLookup durch einen DBColumn ersetzen, dann muss man aber für jeden neu hinzugekommenen Bereich immer als Designer eingreifen und eine neue Ansicht erstellen, mit einer Kategorisierten View ist das nicht mehr nötig)

1. Spalte ist Kategorisiert, enthält das Feld Bereich
2. Spalte ist sortiert, enthält das Feld "PersNr"

Dann erstellst Du ein Feld ArrPersNr, Berechnet zur Anzeige, Versteckt, Formel:

lkp := @DBLookup( "" : "NoCache" ; "" ; "PersonalLkp" ; Bereich ; 2 );
@If( @IsError( lkp ) | lkp = "" ; "-FEHLER: Keine Personalnummern im Bereich-" ; lkp );

FERTIG !!!

Wenn man sein Handwerkszeug kennt, dann ist Notes ein rapid-development-tool, aber wenn man nicht mal absolute basics beherrscht, dann stösst man immer wieder an solche unlösbaren Probleme....

Tode
...der sich schon lange nicht mehr darüber wundert, dass es kaum noch Notes- Entwickler gibt, die das Wort "Designer-Schulung" nur aus Foren kennen...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: Dialoglistenauswahl zur Laufzeit ändern
« Antwort #16 am: 11.08.06 - 16:29:52 »
Fast könnte ich Tode als Spielverderber bezeichnen - genau das hatte ich mir aufgehoben für das Ende der gesamten Diskussion - damit die dramaturgische Fallhöhe etwas größer wird. Denn es fehlen ja noch einige Diskussionen (das ws.Prompt im Postopen ist z.B. eine Funktion, für die die Anwender den Entwickler nicht lieben werden, vor allem, wenn sie Dokumente nur lesen wollen - und genau das wäre es gewesen, was für den zweiten Fall, den man beachten muß (das QUERYMODECHANGE) noch ein wenig Kopfzerbrechen bereitet hätte).

Nun ja - ich gelte bei meinen Kolegen auch immer als der "abgedrehte Formelsprachler", aber was soll es - wenn "Viel Feind, viel Ehr' " heißt, dann bin ich manchmal an der Front eben auf der Suche nach Ehre.

A propos "dramaturgische Fallhöhe: für mich endet diese Woche jetzt gleich, weil ich heute abend bei der Premiere der Opernakademie Bad Orb in Beethovens Fidelio im Opernchor mitsinge. Seit Tagen habe ich mich schon nicht mehr rasiert, damit ich einen glaubwürdigen Gefangenen abgebe und arbeite nur noch im Homeoffice.

Hier schon mal ein Eindruck von der Generalprobe:
http://www.opernakademie.com/components/com_zoom/www/view.php?popup=1&catid=55&key=6&hit=1

Ich wünsche Allen ein schönes und erlebnisreiches Wochenende

Norbert
Situs vilate in isse tabernit.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Dialoglistenauswahl zur Laufzeit ändern
« Antwort #17 am: 11.08.06 - 19:00:36 »
Nö, Tode ist kein Spielverderber - er hat vollkommen Recht (aber da sind wir uns ja einig). Zwei Nachträge noch zu Deinem Posting, Norbert:

1. QueryModeChange alleine reicht nicht, da dieses nicht ausgeführt wird, wenn ein Dokument aus einer Ansicht heraus geöffnet wird (im Bearbeiten-Modus)
2. Für heute Abend drücke ich Dir fest die Daumen - und dem ganzen Ensemble natürlich. So ein Engagement finde ich beachtenswert.

Bernhard

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Dialoglistenauswahl zur Laufzeit ändern
« Antwort #18 am: 14.08.06 - 17:34:30 »
Moin, moin alle zusammen,

nachdem ich weiterhin die Fehlermeldung "Array of Arrays are not supported" bekommen, wenn ich versuche das Feld im Backend  mit "set feld = doc.replaceitemvalue("ArrPersNr";arr)" zu füllen, habe ich mich für den Tipp von Tode entschieden, auch wenn mich die Spaltenformel für "Bereich" einige Nerven gekostet hat. Die Dialogfelder musste ich aber bearbeitbar lassen, weil im Exiting einige andere diverse Felder gefüllt werden.

Das ws.prompt im Lesemodus hatte ich bei einer anderen Maske schon mal und habe es im Postopen mit prüfen auf .isnewdoc behoben. Hier habe ich das Feld Bereich mit dem Vorgabewert "Gewerbliche" versehen und das Umschalten mittels ws.prompt abfrage in eine Aktion gepackt. Bin mit den vielen Befehlen in Notes noch nicht so ganz vertraut. Beschäftige mich auch "erst" seit Februar/März damit. Und wie Benhard in einem anderen Beitrag so schön geschrieben hat:
Zitat
Von Office-Apps nach Notes ist ein kompletter Wechsel der Welten.

Zudem ich bisher nur über die Bücher "Anwendungsentwicklung unter LN5" und "Lotus-Script unter LN5" verfüge. 7ner kommt ja erst Ende des Jahres oder so. Weiß jemand ob ein Lotus Script für die 7ner rauskommt? Habe außer dem für LN5 im Netz keins gefunden.

@LN4ever: Wieso sollte man keine Umlaute in Modul- und Variblen verwenden? Ich fand das eigentlich ganz toll, dass es in Notes im Gegensatz zu Office geht.

@Tode:
Zitat
ausser einem klitzekleinen Hinweis habe ich einen (für mich entscheidenden) Punkt bisher vermisst
. Welchen Hinweis hast du noch vermisst? Nur her damit  :)

Vielen Dank an alle die an der Lösung mitgewirkt haben. Auch wenn ich in diesem Fall dann die Formeln von Tode verwende ist es doch gut zu wissen, wie man solche Felder mit Script füllen kann. ;D

Gruß
Demian

PS: Nach wie vor geht mir das "Arrays of arrays.." nicht aus dem Kopf. Es handelt sich doch um ein eindimensionales Array.


 

Gruß
Demian

Glombi

  • Gast
Re: Dialoglistenauswahl zur Laufzeit ändern
« Antwort #19 am: 14.08.06 - 17:46:20 »
Die Fehlermeldung mit den Arrays kommt durch die folgende Zeile:

arr(i) = doc.GetItemValue("PersNr")

Hier muss es korrekt so heisseN.

arr(i) = doc.GetItemValue("PersNr")(0)


Dann habe ich noch so ein
arr(i)= Keydoc.GetItemtext("PersNr")
gesehen. GetItemText gibts aber gar nicht als Methode für ein NotesDocument!


Andreas

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz