Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: DonPromillo am 26.11.04 - 11:29:21

Titel: Eingebettete Maske ->@if "refreshen"
Beitrag 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

Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: Driri am 26.11.04 - 11:35:08
Teilmasken werden nur beim Öffnen des Dokuments berechnet.

In deinem Fall würde ich lieber Abschnitte verwenden.
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: Axel am 26.11.04 - 12:08:15
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
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: DonPromillo am 26.11.04 - 12:35:22
@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 ???
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: Axel am 26.11.04 - 13:18:09
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
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: DonPromillo am 26.11.04 - 13:33:10
...  und kannst dann im Click-Event darauf zugreifen.


Und genau das ist mein Problem  :-[ finde nirgends wie das funktioniert!

Gruß
Frank
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: Axel am 26.11.04 - 13:56:16
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.
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: DonPromillo am 26.11.04 - 14:49:39
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?
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: Axel am 26.11.04 - 14:57:18
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
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: DonPromillo am 26.11.04 - 15:09:50
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
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: koehlerbv am 27.11.04 - 01:04:44
"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
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: DonPromillo am 29.11.04 - 10:15:08
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
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: Axel am 29.11.04 - 11:12:08
Hi,

überprüf mal mit dem Debugger ob die Variable docThis gesetzt ist.


Axel
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: DonPromillo am 29.11.04 - 12:41:53
gerne, wenn ich wüßte wie ich das herausfinden kann!?!?!?

Frank
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: Semeaphoros am 29.11.04 - 12:53:29
File - Tools - Debug LotusScript

einschalten, den Agenten starten und ihm bei der Arbeit zusehen
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: DonPromillo am 29.11.04 - 13:00:14
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!
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: Semeaphoros am 29.11.04 - 13:05:10
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.
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: DonPromillo am 29.11.04 - 13:14:21
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
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: DonPromillo am 29.11.04 - 19:33:20
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
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: Axel am 29.11.04 - 19:38:14
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


Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: DonPromillo am 30.11.04 - 10:05:22
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

Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: DonPromillo am 30.11.04 - 14:15:26
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
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: DonPromillo am 01.12.04 - 17:25:42
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
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: TMC am 01.12.04 - 17:28:51
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.
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: DonPromillo am 01.12.04 - 18:28:21
@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


Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: Axel am 01.12.04 - 20:08:17
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
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: Semeaphoros am 01.12.04 - 20:13:37
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.
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: Axel am 01.12.04 - 20:37:53
Jens, du hast es, mit einfachen Worten, auf den Punkt gebracht.
Danke.


Axel
 
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: Semeaphoros am 01.12.04 - 21:24:49
Kann mich erinnern, dass ich selber eine Weile gebraucht hatte, bis ich das durchschaut hatte :) Gut, wenn das jetzt weiteren Leuten nützt.
Titel: Re: Eingebettete Maske ->@if "refreshen"
Beitrag von: DonPromillo am 02.12.04 - 09:17:50
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!