Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: sslneve am 08.06.05 - 11:29:13

Titel: Eigentlich trivial: Abbruch Button
Beitrag von: sslneve am 08.06.05 - 11:29:13
Hallo zusammen,

ich habe ein recht grosses Formular mit einigen Sections, die je nach Bearbeitungs-Status versteckt oder sichtbar sind. Im Zuge der Bearbeitung bzw. der Neuanlegens wird das Dokument an verschiedenen Stellen gespeichert (per Formelsprache). Wenn jemand die Bearbeitung abbrechen will, bevor ein Speicherpunkt aufgetreten ist, dann ist das kein Problem. Wenn jedoch schon während der Bearbeitung gespeichert wurde, so ist ein Abbruch zwar möglich, allerdings existiert das (nicht gültige) Dokument dann schon.

Meine Überlegungen gingen bisher in die Richtung: Einen Button "Abbruch" ins Formular einbauen und diesen per Formel oder LS das Dokument (wenn es schon gespeichert wurde) bei gewünschtem Abbruch löschen lassen. Probleme hierbei: wie entscheide ich, ob es ein Abbruch beim Neuanlegen war oder nur ein Abbruch beim nachträglichen Editieren (hier darf natürlich nix gelöscht werden!). Zudem ist "richtiges" Löschen mit HardDeleteDocument nur aus einem Agenten möglich (den ich ja nach richtiger Entscheidung aus vorgenanntem Action Button aufrufen könnte). Nur wie sag ich dem Agenten, welches Dokument er (für den User möglichst unbemerkt) löschen soll? Anm.: Ich möchte ungern ein neues Feld einführen, das einen Speicherstatus o.ä. darstellt (hierüber könnte evtl. das Entscheidungsproblem gelöst werden).

.... oder sind meine Konstrukte möglicherweise völlig daneben. Ich bin mir sogar fast sicher, daß es hierfür eine simple Lösung geben muss.

Vielen Dank!
Markus
Titel: Re: Eigentlich trivial: Abbruch Button
Beitrag von: Mandalor am 08.06.05 - 11:43:58
du könntest mit @created herausfinden, wann das doc angelegt wurde, wenn es zeitnah angelegt wurde, dann wird es wahrscheinlich noch nicht geschlossen wurden sein.

@isnewdoc greift hier nicht, da es nur true liefert, solange es noch nicht gespeichert wurde.

Ein feld, in welches du erst beim schließen des Documents mit einem Wert füllst wäre die einzig saubere Lösung die mir einfällt.

(--> von der 1. Überlegung rate ich ab)
Titel: Re: Eigentlich trivial: Abbruch Button
Beitrag von: Thomas Schulte am 08.06.05 - 11:58:09
ein Dokument das beim Anlegen mehrfach gespeichert wird ist per se in der Definition schon krank. Egal wie ich das erklären will da ist bei den Grundüberlegungen schon etwas falsch gelaufen.
Wenn du allerdings einen Workflow meinst bei dem verschiedene Benutzer das Dokument hintereinander weg bearbeiten, dann ist die Lösung eigentlich einfach. Du baust ein Feld "Abgebrochen" ein und setzt das Feld beim Beenden des Prozesses mit einem definierten Flag. Zusätzlich kannst du dann auch noch Autoren und Leser Felder einführen mit denen du den Zugriff auf dieses Dokument effektiv beschränkst. Damit bleibt der Prozess als solcher erkennbar, die Tatsache das er abgebrochen wurde auch und du machst keine Design Kopfstände.
Titel: Re: Eigentlich trivial: Abbruch Button
Beitrag von: dirk_2909 am 08.06.05 - 12:09:57
Merke Dir doch im QueryOpen der Maske, ob es ein Neues Dokument ist:
if IiNewDoc Then ....

Wenn es ein Neues Dokument ist, kannst Du im PostOpen ein Feld in der Maske mit einem bestimmten Wert setzen:
call uidoc.FieldSetText( "fld_NewDoc" ; "1" )
Call uidoc.Refresh

Je nach Feldwert kannst Du dann den Abbruch-Button, der die neuen Formulare zum Löschen markiert, anzeigen bzw. Verbergen.

Dirk



Titel: Re: Eigentlich trivial: Abbruch Button
Beitrag von: sslneve am 08.06.05 - 12:12:31
Hallo,

das Design ist nicht von mir ... ich "darf" nur dran rumbasteln. So ein Flag habe ich nun, allerdings weiß ich immer noch nicht, wie ich das Dokument wieder weg kriege, wenn es zwischendurch schon gespeichert wurde und dann abgebrochen wird. Andererseits dürfen dadurch nicht frühere Dokumente durch Abbruch bei erneutem Bearbeiten gelöscht werden ...
Titel: Re: Eigentlich trivial: Abbruch Button
Beitrag von: Thomas Schulte am 08.06.05 - 13:11:33
Noch einmal. Du baust eine eigene Aktion ein, "Workflow Beenden", diese Aktion löscht das Dokument nicht sondern setzt es in einen nicht bearbeitungsfähigen Zustand (Flag, Autoren und Leserfelder). Damit kann jeder normal damit arbeiten und wenn es nicht mehr weitergehen soll dann ist das eine DEDIZIERTE Aktion und nicht von irgendwelchen Zufälligkeiten abhängig.
Titel: Re: Eigentlich trivial: Abbruch Button
Beitrag von: sslneve am 08.06.05 - 13:39:38
Hallo Thomas,

ich verstehe wohl nicht ganz ... Die Speicherung passiert in dem Formular an mehreren Stellen. Es handelt sich zwar um einen Workflow, allerdings wird ein bestimmtes Dokument eigentlich immer nur von einer Person bearbeitet. Mein Problem ist aber doch jenes:

Wenn
- neues Dokument
- bereits durch Formular-Code gespeichert
- Abbruch-Button
dann
ist das Dokument vorhanden, was es aber nicht sein soll (Abbruch beim Neuanlegen meint für gewöhnlich, daß kein Dokument gespeichert wird).

Ich habe mir jetzt was gebastelt, das zumindest die richtige Entscheidung treffen würde. Allerdings weiss ich halt nicht, wie ich das unerwünschte Dokument per Code wegkriege (mit Code zum Löschen markieren und dann von Hand Refreshen ist irgendwie unergonomisch).
Titel: Re: Eigentlich trivial: Abbruch Button
Beitrag von: sslneve am 08.06.05 - 16:14:43
So, ich habs jetzt so gemacht (falls es jemanden interessiert  ;) ):

Wenn das Formular geöffnet wird (Queryopen), wird IsNewDoc geprüft und ins Environment geschrieben (steinigt mich später).
Der Abbruch Button prüft dies und (AND) ein Feld, das anzeigt, ob das aktuelle Dokument jemals gespeichert wurde. Trifft das zu (neues Doc und während des Anlegens schonmal gespeichert) und soll ein Abbruch erfolgen, dann muss das leider schon gespeicherte Doc gelöscht werden. Da das nicht wirklich geht, solange das Doc noch offen ist, wird es gespeichert (-> keine lästigen Abfragen) und geschlossen und vorher noch geschwind die ID ins Environment
gejagt. Jetzt wird noch ein Agent aufgerufen, der die ID wieder ausliest und damit doc.RemovePermanently macht.
Natürlich werden die ins Environment geschriebenen Daten an geeigneter Stelle in jedem Fall wieder entfernt.

Fazit: Umständlich, anstrengend, unkonventionell .. aber geht.
Titel: Re: Eigentlich trivial: Abbruch Button
Beitrag von: Thomas Schulte am 08.06.05 - 16:19:51
Eine Speicherung eines Dokumentes das von einer Person durchgehend in mehreren Abschnitten bearbeitet wird durch unterschiedliche Aktionen während der Benutzer noch im Dokument rumfuhrwerkt ist SCHWACHSINNIG.  :-:
Da im Nachtrab herzugehen und automatisch das bereits angelegte Dokument wieder LÖSCHEN zu wollen ist dann HIRNRISS hoch 5. Das löst dein generelles Problem nicht. In diesem Fall ist ein REDESIGN der Maske und unter Umständen des zugrunde liegenden Vorganges angesagt.  >:(

Nachklapp: Deine Lösung ist alles mögliche nur keine LÖSUNG. Was machst du wenn dein Agent nicht anläuft oder der Rechner ausgeschaltet wird. Oder du einen RSOD bekommst.
Du ignorierst alle brauchbaren Ansätze um eine Pseudobastellösung zu bauen.  ::)
Das nennt man Beratungsresistenzrenitenz (Danke Jens).
Titel: Re: Eigentlich trivial: Abbruch Button
Beitrag von: Semeaphoros am 08.06.05 - 16:22:25
Renitenz, nicht Resistenz, Thomas.
Titel: Re: Eigentlich trivial: Abbruch Button
Beitrag von: sslneve am 08.06.05 - 17:02:52
Hallo Thomas,

vielen Dank für Deine freundliche Antwort.
Um es nochmal zu sagen: Das Formular ist nicht von mir. Ich habe hier nur eine Lösung zu finden. Klar wäre ein Redesign besser, im Prinzip sollte man das ganze Teil schlicht neu machen. Alleine das besagte Formular ist aber derart umfangreich, daß man hierfür doch einiges an Zeit bräuchte (und die habe ich nicht). Somit ist es deutlich effizienter, einen Workaround zu bauen, zumal weder die Funktion noch die eigentliche Datenbank herausragende Wichtigkeit besitzen. Da es bisher gar keine Abbruch-Funktionalität gab, würde ich den jetzigen Zustand durchaus als Fortschritt bezeichnen.
Titel: Re: Eigentlich trivial: Abbruch Button
Beitrag von: koehlerbv am 08.06.05 - 17:27:58
Renitenz, nicht Resistenz, Thomas.

Wenn schon "renitente Beratungsresistenz"  ;D

Aber Spass beiseite bei einer ernsten Angelegenheit, gerade, wenn jemand fremden Murks gerade biegen soll.
Mir ist auch noch nicht ganz klar, was das ganze soll. Ganz trivial würde ich erstmal im Sinne eines plain text documents sagen: Gespeichert ist gespeichert. Es geht also eher um ein Rücksetzen auf einen früheren Zustand. Hier würde mich eine exakte Begründung interessieren hinsichtlich des "Wozu?".
Was meinst Du eigentlich genau mit den "unterschiedlichen Sektionen je nach Status" ? Meinst Du damit einen einzigen Bearbeitungsvorgang (natürlich durch einen einzigen User) oder aufeinanderfolgende Bearbeitungsvorgänge (ggf. unterschiedlicher Benutzer) ?

Wie andere schon angemerkt haben, sind die Prinzipien dieser Applikation weniger als suboptimal. Trotzdem können wir damit alle immer noch daneben liegen. Kannst Du also noch mehr Infos dazu geben ? Es gibt ja - wenn es denn Sinn machen würde anstatt die App so zu lassen wie sie ist oder in die Tonne zu drücken und neu zu erstellen - sicherlich zahlreiche Möglichkeiten, derartige Problem zu lösen. Ich denke da nur an Versioning oder die Restaurierung aller Items aus dem (Arbeits-)Speicher, wenn "Abbruch" gewählt wurde.

Sag' an, wie wichtig Dir dieses Problem ist (wobei ich das allgemeine Problem an sich schon interessant finde, wenn es auch noch nur sehr theoretisch ist) und dann ggf. noch ein paar mehr Details.

Bernhard