Schwesterdokument? /SaveNewVersion

  • Hallo Zusammen,


    ich möchte von einem Dokument einen Klon erzeugen. Im Anwendungsfall sieht das so aus:


    Anwender versieht Dokument mit Status "Archiv". Das Dokument soll jetzt gespeichert werden und gleichzeitig als neue Version weiterexistieren (alle Felder bis auf eines werden zurückgesetzt). D.h. ich möchte das gleiche Dokument in mehreren Versionen haben.
    Mit "SaveNewVersion" hab ich schon experimentiert, aber bin zu keinem Ergebnis gekommen und die hilfe hilft hier nicht wirklich weiter. Hier mein Code (im Save-Button):


    @If(fertig="fertig";@SetField("Status"; "archiv");"");
    @If(Status="archiv";@Command([FileSaveNewVersion]);"");
    @Command([ReloadWindow]);
    @If(Status="archiv";@SetField("test";"") & @SetField("testname";"") & @SetField("Status";"") ;"");


    @Command([FileSave]);
    @Command([FileCloseWindow])



    Grüße Markus

  • Soweit schon klar. Nur wenn ich n copy hab, brauch ich doch auch n paste, oder? Setz ich diesen dann direkt in die View in die das Dokument rein soll? Geht das auch wenn die View nicht gleich geöffnet wird? Wenn ich den Copy-Befehl richtig verstanden hab wird das ja auch nur in die Zwischenablage kopiert. Wenn also "Paste" nicht automatisch geht isses weg...


    Oder gibt es sowas wie "CopytoView", ähnlich wie CopytoDatabase?S

  • Im Lotus Script gibt es den Befehl CopyToDatabase um ein Dokument zu kopieren.
    Mit der Formelsprache wirst du da nicht weiter kommen, da du dann das Problem hast das neue Dokument nicht anpassen zu können

  • Okay, hab das Script schon so weit fertig. Die Frage ist jetzt aber ob ich zwingend eine andere Datenbank brauche, oder ob sich eine Archivierung auch über eine Ansicht realisieren lässt?

  • Wenn du (wie beschrieben von dir) wirklich nach dem Versionieren alle Felder zurücksetzen willst, warum legst du nicht einfach ein neues Dokument an und das alte bekommt nur ein Statusfeld "archiv" oder einen anderen Maskennamen?


    ok...muß ich grad nicht verstehen aber ich geb mal ein paar Zusatzinfos zum Versionieren, wenn was unklar bleibt: weiter fragen.


    Die Kombination der Maskeneigenschaft Versionieren mit dem Befehl SaveNewVersion (die du ja schon herausgefunden hast) ist eigentlich genau das was du hier brauchst. Jedes Script ist zigmal aufwendiger und wozu sollte ich was scripten wenns ein Standardfeature gibt.


    Zur Funktion des Versionierens einige kurze Erläuterungen:


    Sobald die Maske mit dem Flag Versionen versehen wurde kann entweder automatisch (d.h. bei jedem Speichern) oder auf Anforderung (d.h. via @Command) eine neue Version des aktuellen Dokuments erzeugt werden. Dabei werden alle Inhalte des aktuellen Dokuments selbständig in die Versionierung einbezogen.


    Dabei werden 3 Möglichkeiten der Versionierung angeboten:


    a) Neue Versionen werden Antworten
    Dabei wird aus dem aktuellen Dokument eine Kopie als Antwortdokument zum aktuellen Dokument erzeugt.


    b) Frühere Versionen werden Antworten
    Dabei bleibt das aktuelle Dokument in der Hierarchie erhalten und die Kopie wird als neues Antwortdokument zum aktuellen Dokument erzeugt.


    c) Neue Versionen werden Geschwister
    Dabei wird aus dem aktuellen Dokument einfach eine Kopie erzeugt. Die Hierarchie bleibt dabei unverändert.


    Aus Erfahrung kann ich Methode b) oder c) empfehlen. Methode b) hat den Vorteil, dass man in der aktuellen Ansicht simpel die Antwortdokumente ausblenden und nur die aktiven Versionen darstellen kann und eine Art historische Ansicht mit allen alten Versionen dazustellt.
    Bei Metode c) müßte man sich ein Unterscheidungsmerkmal in Form eines extra Feldes oder dem Inhalt von $Revisions überlegen. Daher ist b) die effektivste Variante.

  • Alle Felder bis auf eines werden zurückgesetzt. Zur Erläuterung:


    Die ganze Geschichte ist eine Raumübersicht, damit der Verwalter weiß in welchem Raum welcher Mieter ist. Zieht ein Mieter jetzt aus soll das ganze Dokument ins Archiv gelegt werden, das Dokument aber auch gleichzeitig wieder als "freier Raum" mit Raumnummer zur Verfügung stehen.


    Ich persönlich bervorzuge Version c deiner Schilderung, da es so ein Feld schon gibt. Nur - wie geht das? Die Hilfe schweigt sich zum Thema "FileSaveNewVersion" nämlich aus....

  • @Command([FileSaveNewVersion]) erzeugt aus dem gerade geöffneten (und in Bearbeitung befindlichen) Dokument eine Speicherkopie.


    Technisch gesehen gibt es bei einem gerade geöffneten Dokument [mindestens] 3 Kopien:


    a) 1 physikalisch in der Datenbank (Backend)
    b) 1 exakte Kopie vom Öffnen-Zeitpunkt im Hauptspeicher des Clients (Frontend)
    c) 1 GUI-Darstellung am Client die eine Summe aus b) und den Maskenfeldern der gerade geöffneten Form beinhaltet (UI)


    Wenn du @Command([FileSaveNewVersion]) aufrufst wird a) absolut unverändert belassen. b) und c) erhalten neue Eigenschaften:
    - eine neue DocumentUniqueID
    - ein Feld $VERREF mit Inhalt der DocumentUniqueID der alten Version
    - [optional] das Feld $REF wenn Versionierung mit Antwortdokumenten ausgewählt wurde.


    Mit der Änderung von b) ändert sich logischerweise auch c) da es ja b) beinhaltet. Das gerade im UI geöffnete Dokument ist also bereits die neue Version. Möchte man a) vor dem Versionieren noch ein Archiv-Flag (oder zusätzliche Felder) mitgeben so muß vor dem FileSaveNewVersion das Feld entsprechend gesetzt und das Dokument mit FileSave 1x gespeichert werden, da FileSaveNewVersion nichts mehr in das alte Dokument schreibt (ausgenommen natürlich mit der Option "Frühere Versionen werden zu Antworten", in dem Fall wird ausschließlich das $REF in das alte Dokument geschrieben was auch den Ansichtsaufbau erleichtert da man simpel alle Antwortdokumente ausblendet und nur in einer separaten View darstellt).


    Ein Code sähe für dich mit Schwesterdokumenten dann z.B. so aus:


    Aktionsschaltfläche "Versionieren":


    FIELD Archiv := "1";
    @Command([FileSave]);
    @Command([FileSaveNewVersion]);


    Anm.: an dieser Stelle wird das gerade geöffnete Dokument zum neuen Dokument!


    FIELD Archiv := @DeleteField;
    @SetField( "Subject"; "" );


    Anm.: an dieser Stelle können die Feldinhalte wie Subject etc. von dir zurückgesetzt werden!


    @PostedCommand([FileSave])


    Anm.: Ohne abschließendes FileSave benimmt sich das geöffnete Dokument wie ein neu angelegtes Dokument, würde der User hier Schließen ohne zu speichern wäre es hinterher nicht als neue Version vorhanden, lediglich die alte Archivversion stünde dann in der DB.

  • Sorry, gibt doch noch ein Problem. Jetzt wird zwar ein Schwesterdokument erzeugt, allerdings mit gelöschten Feldwerten. Den Status Archiv behält das neu erzeugte Dokument allerdings bei...


    Hier der Code:


    @If(Status="archiv";@Command([FileSave]);"");
    @Command([FileSaveNewVersion]);


    >hier sollte ein neues Dokument mit den vorhandenen Feldwerten erzeugt werden.


    @if(Status="archiv";@SetField("test";"") & @SetField("fertig";"") & @SetField("testname";"") & @SetField("Status";"") ;"");


    >Felder werden zurückgesetzt


    @PostedCommand([FileSave]);
    @Command([FileCloseWindow])


    > Speichern und Ende



    -> nicht über die Feldnamen wundern, ist nur ne Test-DB;-)


    Ist was offensichtlich falsch?

  • @Command wird immer vor allen @PostedCommand ausgeführt, das Close muß auch ein PostedCommand sein.


    Nach dem Umsetzen des Statusfeldes auf leer existiert wahrscheinlich in der UI ein Feld was aktualisert werden muß (@Command( [ViewRefreshFields] vor dem Speichern) sonst überschreibt der UI-Wert vermutlich den Backend-Wert was zu dem o.g. Problem führt.

  • Hab das Problem erkannt. Aus irgendwelchen Gründen wird kein neues Dokument erzeugt. Ich hab das Dok. nur in beiden Ansichten gesehn, weil der Status "Archiv" nicht zurückgesetzt wurde.


    @If(Status="archiv";@Command([FileSave]);"");
    @Command([FileSaveNewVersion]);
    @If(Status="archiv";@SetField("test";"") & @SetField("fertig";"") & & @SetField("Status";"") ;"");
    @PostedCommand( [ViewRefreshFields]);
    @PostedCommand([FileSave]);
    @PostedCommand([FileCloseWindow])


    Der Status wird jetzt wieder zurückgesetzt, aber eben leider kein neues Dok. erzeugt....


    /Edit


    hat sich erledigt. Funktioniert jetzt. Nochmals Danke...