Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: DonPromillo am 26.11.04 - 11:29:21
-
Argl, ich kriege wieder mal was nicht hin, ...
Grundproblem: Ich will zwei Layouts, je nachdem ob das Doc im Bearbeiten oder lesen Modus ist.
Tolle Idee: Lsg. über Teilmasken -> @if(@isdocbeingedited;"edit";"")
Geht nur leider nicht, da die Maske im Lesemodus zuerst geöffnet werden soll.
Habe eine Aktion erstellt, um das Doc dann zu bearbeiten:
@Command( [EditDocument]; "1" );
@Command([RefreshHideFormulas])
Dummerweise wird nur die eingebettete Teilmaske nicht "refreshed"
Habe hier irgendwo gelesen, dass das nur per kompletten Doc -refresh mittels LS geht.
Gibts hier auch eine Formel Möglichkeit?
Ich kann das Problem leider nicht über "hide when" lösen, da in der teilmaske zig Felder bereits mit "hide when" belegt sind :'(
Danke und Gruß
Frank
-
Teilmasken werden nur beim Öffnen des Dokuments berechnet.
In deinem Fall würde ich lieber Abschnitte verwenden.
-
Hi,
per Formel geht das nicht. Dazu brauchst du Script.
Anton (ata) hat auf seiner Homepage was dafür im Angebot.
Hier (http://www.atnotes.de/index.php?topic=18797.msg115025#msg115025) gings mal um so ein ähnliches Thema.
Axel
-
@Driri: Danke für den Tip, dummerweise funktioniert Verbergen nicht mehr! (Auch nicht wenn ich's auf "Absatz verbergen ...Notes" komplett einstelle!
@Axel: Yo, das Skript ist genau was ich brauche, blöde Frage: Wie kriege ich das in einen Button? (LS-DAU!!!)
Was mir aufgefallen ist: @isdocbeingedited geht erst auf true, sobald ich etwas ändere,... dafür bräuchte ich jedoch die Teilmaske >:(
Gibt's da auch so was wie @isdoc"im_edit_mode" ?
thx
Nachtrag: Habe tollerweise auch auf ATAs Seite den Code gefunden, ein Feld zu aktualisieren, stand-alone kriege ich das schon zum laufen, nur bräuchte ich beide integriert in einer Aktion?
Tipps, Hilfe ???
-
Hi,
das ist ein ganz normale Funktion. Du kopierst den Code von der Zeile Function... bis End Function in die Zwischenablage und im Designer erstellst du dir einen Aktionsbutton und stellst dort LotusScript ein. Im Abschnitt Options fügst du den Inhalt ein. Im linken Fenster siehst du dann den Namen der Funktion und kannst dann im Click-Event darauf zugreifen.
Axel
-
... und kannst dann im Click-Event darauf zugreifen.
Und genau das ist mein Problem :-[ finde nirgends wie das funktioniert!
Gruß
Frank
-
Hi,
den Click-Event hast du gefunden und die Funktion hast du auch reinkopiert, oder?
Im Click-Event fügst du folgenden Code ein:
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc AS NotesDocument
Dim ret As Integer
'Handle auf das aktuelle Dokument besorgen
Set uidoc = ws.CurrentDocument
'Damit werden Backend-Methoden nutzbar
Set doc = uidoc.Document
'Zugriff auf die ReOpen-Funktion
ret = ReOpen(doc)
Voraussetzung ist, dass der Aktionsbutton in der Maske eingefügt wurde. Deinen eigenen Code musst du entsprechend dazwischen packen.
Axel
PS: Du solltest dich umgehend mit LotusScript vertraut machen, denn vieles lässt sich eben nur mit Script realisieren.
-
Danke erstmal, bin schon weiter,...
das reOpen wird aufgerufen,... meine aktuelle Fehlermeldung:
"Vorgabemaske nicht gefunden"
Debug bleibt hier hängen:
Set uidoc = ws.EditDocument(True , docThis)
Ideen?
Gruß
Frank
@Axel: Welches Tutorial / Buch würdest du denn für den Einstieg empfehlen?
-
Hi,
ich habe schon viel Gutes über die Bücher vom Herdt-Verlag (http://www.herdt.de) gehört und das Buch Domino Designer 5 (http://www.cul.de/domino5.html) ist auch nicht schlecht.
Axel
-
Danke, werde mir mal eins davon bestellen 8)
Hast du auch eine Idee, woher die Fehlermeldung kommen könnte?
Ich habe es inzw. auch mal in einer komplett neuen Maske getestet,... selbe Fehlermeldung...
Gruß
Frank
-
"Vorgabemaske nicht gefunden" ist doch easy, Frank: Deine DB hat keine. Und das gibt Probleme in vielen Richtungen. Ergo: Definiere immer eine Vorgabemaske und Vorgabeansicht.
Warum der Code diese Meldung aber provoziert - keine Ahnung. Poste bitte mal Deinen Code (ich mag jetzt hier nicht erst selbst dem Link-Dschungel folgen). Einen Grund hierfür muss es ja geben. Naherliegenderweise ist der Aufruf eines Documents mit fehlender Information über die Maske oder mit einem Maskennamen, den es in der DB nicht gibt. Der Fehler sollte mit mehr Infos aber einfach zu ermitteln sein.
HTH,
Bernhard
-
Hallo Bernhard,
vielen Dank schon mal!
hier der Code vom "Click-Event"
Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim ret As Integer
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
ret = ReOpen(doc)
End Sub
und hier von der ReOpen Funktion:
Function ReOpen(docThis As NotesDocument) As Integer
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim dbThis As NotesDatabase
Dim unid As String
ReOpen = 0
Set dbThis = docThis.ParentDatabase
Call docThis.Save(True , True)
unid = docThis.UniversalID
docThis.SaveOptions = "0" ' # ... Speicherabfrage vermeiden
Set uidoc = ws.CurrentDocument
Call uidoc.Close
Set docThis = dbThis.GetDocumentByUNID(unid)
Set uidoc = ws.EditDocument(True , docThis)
Set docThis = uidoc.Document
If docThis.HasItem("SaveOptions") Then
' # ... das Feld SaveOptions wieder entfernen...
docThis.RemoveItem("SaveOptions")
Call docThis.Save( True , True )
End If
ReOpen = 1
Print "Das Dokument wurde erneut geöffnet"
End Function
OK, Vorgabemaske ist eingerichtet, die Zeile, bei der er momentan hängt ist:
If docThis.HasItem("SaveOptions") Then
Fehlermeldung nun: "Object variable not set"
Gruß
Frank
-
Hi,
überprüf mal mit dem Debugger ob die Variable docThis gesetzt ist.
Axel
-
gerne, wenn ich wüßte wie ich das herausfinden kann!?!?!?
Frank
-
File - Tools - Debug LotusScript
einschalten, den Agenten starten und ihm bei der Arbeit zusehen
-
Aah, der Teil mit den Variablem war fieserweise verborgen, :o
@Axel: gut getippt, docThis steht ohne Wert im debugger!
Was nun? Muss man das Ding extra dim(ensionieren)?
Frank
Nachtrag: Der Wert wird übergeben, nur die Zuordnung von
Set docThis = UiDoc.document
klappt nicht!
-
Verwende mal Option Declare und dimme alle Variablen, verhindert Teppfihler ;)
Weiter, beobachte doch mal, wann Dir das Doc verloren geht, da ist ja schon eine komplizierte Geschichte davor.
-
Eha,
Set uidoc = ws.editDocument(true, docThis)
nach dieser Zeile steht auf einmal der windowtitle auf Navi, ... meiner Navigationsleiste (linker Frame im Frameset, rechter = main, dort (sollte) alles geöffnet werden!)
Würde mal laienhaft darauf tippen das es damit zu tun hat!
Liegt das vielleicht am Frameset?
Gruß Frank
-
Ahhh, lange gefriemelt, aber was gefunden:
Sobald der Auto-Rahmen aktiviert ist, (Rahmengruppe "start", Rahmen "main") tritt der Fehler auf!!!
Deaktiviere ich diese Option, funktioniert das skript, nur dummerweise nicht mehr in der Rahmengruppe, sondern NUR das Doc!
Hat jmd. Ideen wie ich das LS anpassen müsste, damit das ganze auch im Frameset funktioniert....??????????????
Grüße
Frank
-
Hi,
ich hab' zwar in der Richtung noch nichts gemacht, aber versuch's mal so:
...
Call uidoc.Close
Set docThis = dbThis.GetDocumentByUNID(unid)
Call ws.SetTargetFrame("Hier kommt der Name des Rahmens rein" )
Set uidoc = ws.EditDocument(True , docThis)
Set docThis = uidoc.Document
If docThis.HasItem("SaveOptions") Then
...
Füge mal die fettgedruckte Zeile an die entsprechende Stelle ein.
Ich kann dir aber nicht versprechen ob's was bringt.
Axel
-
Hi Axel,
danke für den Versuch, hat leider nichts gebracht! :(
Argl, werde ATA mal eine message schicken, vielleicht kann er mir ja helfen!
Falls sonst noch jmd Ideen hat, gerne ;)
Frank
-
Nur mal ne neue Idee:
Würde das evtl. auch funktionieren, an stelle der ganzen Refresh Aktion einfach eine 2. Maske zu erstellen, in der per Agent der "ganze Krempel" automatisch von der Originalmaske übernommen wird?
Brauche halt
1 "Ansicht" zum editieren (=Orig)
1 "Ansicht" zum anschauen (2. Maske)
Würde so was gehen? und wenn ja,... wie? ???
Frank
-
So, bin weitergekommen,...
Momentan kommt folgende Fehlermeldung:
"Aktuelles Programm kann nicht geschlossen werden"...
schickerweise macht er mir die komplette DB zu :(
Hat jemand ein Idee, das Problem in den Griff zu kriegen?
Grüße
Frank
Function ReOpen(docThis As NotesDocument) As Integer
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim dbThis As NotesDatabase
Dim unid As String
ReOpen = 0
Set dbThis = docThis.ParentDatabase
Call docThis.Save(True , True)
unid = docThis.UniversalID
docThis.SaveOptions = "0" ' # ... Speicherabfrage vermeiden
Set uidoc = ws.CurrentDocument
Call uidoc.Close
Set docThis = dbThis.GetDocumentByUNID(unid)
Call ws.SetTargetFrame("main")
Set uidoc = ws.EditDocument(True , docThis)
Set docThis = uidoc.Document
If docThis.HasItem("SaveOptions") Then
' # ... das Feld SaveOptions wieder entfernen...
docThis.RemoveItem("SaveOptions")
Call docThis.Save( True , True )
End If
ReOpen = 1
Print "Das Dokument wurde erneut geöffnet"
End Function
-
Wenn ich mich nicht irre war auf http://www.breakingpar.com/ erst letztens ein Artikel der sich mit Refresh von embedded Views beschäftigte. Hatte das aber nur überflogen.
Konnte das jetzt aber nicht prüfen, weil die seite z.Zt. nicht aufgerufen werden kann - ich bin mir aber ziemlich sicher, die sind bald wieder online.
-
@Matthias: Danke für den Tipp, hat nur leider nicht funktioniert :(
Kann doch nicht so schwer sein, das uidoc im Frame zu öffnen, argl...
Andere Idee: Gibt's denn die Möglichkeit eines verschachtelten hide-whens?
Tabelle->(Feld abc: hide when x!=(...)
Feld bgf: hide when y=(...)
...)
Tabelle->hide-when Morgen="Donnerstag"
so von der Idee her?
Oder muss ich da jedes Feld mit einem normalen oder-When ergänzen?
... dann könnte ich mir den Ärger mit eingebetteten Masken, refresh, tot und teufel ersparen ::)
Frank
-
Hi,
für eine Tabelle direkt gibt es keine Hide-When Formeln. Das regelst du nur über den Text/die Felder in der Zelle.
Wenn der Text in alle Spalten einer Zeile verborgen wird, dann ist auch die Tabellenzeile verborgen.
Du kannst natürlich für jedes Feld in einer Tabelle, ja sogar in einer Tabellenzelle (hier ist Voraussetzung, dass die Felder in separaten Zeilen stehen) eine eigene Hide-When - Formel hinterlegen.
Axel
-
Um ganz präzis zu sein, die Hide-When Formeln sind eine Eigenschaft des Textabschnittes. Und in Notes wird jeder Textabschnitt durch eine Zeilenschaltung oder das Zellenende in der Tabelle begrenzt.
-
Jens, du hast es, mit einfachen Worten, auf den Punkt gebracht.
Danke.
Axel
-
Kann mich erinnern, dass ich selber eine Weile gebraucht hatte, bis ich das durchschaut hatte :) Gut, wenn das jetzt weiteren Leuten nützt.
-
OK, danke für eure Hilfe,
werde in jede cell die hide-when Formel ergänzen, ... ist der einizge (wenn auch wenig saubere) Weg den ich sehe :-\
Viele Grüße
Frank
P.S. Habe es gelöst!!!!
Für alle die ein ähnliches Problem haben, schaut mal hier unter Tipps & Tricks, der Eintrag von Rob sollte weiter helfen!
(Aber immer drann denken: damit das funkioniert, muss die Maske bereits gespeichert sein!)
http://www.atnotes.de/index.php?topic=4487.0
Vielen Dank auch noch mal an Rob! Supergenial, dass du das aufgetrieben hast!