Beiträge von LN4ever

    Enable/Disable wirkt nur auf periodische Agenten.


    Vorschlag: Leg eine Datenbank für ausgelagerte Gestaltungselemente an und kopier deinen Agenten da rein.


    Das hält die produktive Datenbank frei von "totem Code" und ermöglicht dir später ohne weiteres wieder den Zugriff auf deine unter Schweiß und Tränen entstandene Arbeit.

    Symbole in Ansichten mit Formeln wie Datum<@Today belasten den Server ganz erheblich, denn sie werden lafend neu indexiert. Aber sie ändern die Dokumente nicht.


    Daher:
    in einer verteilten Datenbank, die in unterschiedlichen Zeitzonen oder auf Notebooks lokal nicht nur zum Lesen genutzt wird, in Gottes Namen eine solche Ansicht, ansonsten ein periodischer Agent, der ein Feld setzt, aufgrund dessen Inhalt das Icon erscheint - und dafür sorgen, daß alle Repliken zu Arbeitsbeginn die Änderungen mitbekommen haben, sonst hagelt es leicht Replikationskonflikte.

    Hier einmal ein Beispiel aus einer Anwendung.


    Am Anfang stehen all die Bedingungen, bei denen KEIN Mail gesendet werden soll. Dann baut man sinnvollerweise in das Dokument ein Feld ein, das das Datum enthält, an dem die letzte Erinnerung raus ging (sonst wirst du mit jedem Agentenlauf wieder an alle überfälligen erinnert, und nicht nur an die neu hinzugekommenen bzw. an die, bei denen sich in den letzten 14 Tagen nichts getan hat)


    @If(form!="02" & @Left(form;1)!="9" & @IsUnavailable($Conflict) & @IsUnavailable(Loeschkenn) & (@IsUnavailable(Sperrung) | Sperrung="0") & ((@IsAvailable(Wiedervorlage)&Wiedervorlage!="") | (form="24" & Bearbeiter!="") | (@IsAvailable(Status1) & Status1!="0" & Status1!="") | (@IsAvailable(KorStatus) & KorStatus!="0"));NULL;@Return(""));


    REM " ActionToDos, wenn sie einen sinnvollen Alert-Verteiler enthalten und wenn ein ErledigungsDatum gesetzt und überschritten wurde";
    @If(form="21";@If(DatumBis="" | DatumBis > @Now | @IsUnavailable(AlertDistribution) | AlertDistribution="";@Return("");NULL);NULL);


    REM " Informiert werden muß nur, wenn die Abschlüsse nicht gesetzt sind oder es sich um eine Wiedervorlage einer Musteranforderung handelt";
    @If(Status1!="0" | form=24;NULL;@Return(""));


    REM " Informiert werden muß nur, wenn das ErledigungsDatum überschritten wurde";
    @If(form="21" & DatumBis < @Now;NULL;@Return(""));


    REM " Informiert werden muß nur, wenn noch nicht informiert wurde oder die letzte Alert-Information älter als 14 Tage ist";
    @If(DateAlert="" | @Adjust(@Now;0;0;-14;0;0;0)>@Subset(DateAlert;-1);NULL;@Return(""));


    FIELD DateAlert:=@If(DateAlert="";@Today;DateAlert:@Today);
    SubjectInfo:="Überfällig seit "+@Text(DatumBis;"D0S0")+" für "+ @If(form="21";"Action ToDo an "+@Implode(@Name([CN];SendTo);", ")+" betr. ";"")+@If(ReklNr1="";"ohne Rekl-Nr";ReklNr1)+" "+@Implode(Produkt;", ")+" "+@Implode(DispInhalt;", ")+" "+@Implode(Dispinhalt1;" ");


    Zusatzfeld:=@If(@IsAvailable(ReklGrund);"ReklGrund: "+ReklGrund;"");
    BodyText:="Liebe "+Appname+"-BetreuerInnen,"+@NewLine+@NewLine+"Sie wünschten eine Wiedervorlage des o.g. Dokuments. Bitte leiten Sie die notwendigen Schritte für eine zügige Fertigmeldung in die Wege."+@If(subject="";"";"Das Subject des Dokuments lautete:"+@NewLine+subject)+@NewLine+@NewLine+"mit freundlichem Gruß"+@NewLine+@NewLine+"Ihr Server "+@Name([CN];@Subset(@DbName;1))+@NewLine+"P.S.: Wenn der Abschluß in 14 Tagen noch nicht erfolgt ist, erhalten Sie ein weiteres Mail"+@NewLine+Zusatzfeld+@NewLine;
    Subject:=Appname+"-Reminder: "+SubjectInfo;


    REM "Versenden auslösen";
    @MailSend(AlertDistribution;"";"";Subject;BodyText;[IncludeDoclink]);


    REM " Eintragen in Liste der letzten Editoren";
    FIELD PastAuthors := PastAuthors : (@Name([CN];UserName) + " (Makro AlertDistr)");
    FIELD PastEditDates := PastEditDates : @Text(@Now;"D0S0");
    FIELD TimesModified := TimesModified + 1;
    SELECT @All

    Bei uns ist es mit Acrobat Reader 6 aufgetreten, nachdem wir den Rollout von NotesClient Version 5.011 gemacht haben.


    Es ist ein NOTES Problem, kommt hin und wieder vor, soll ab Notes 5.012 behoben sein.
    Ist nicht spezifisch für PDF Dateien, auch bei anderen Dateitypen kann es vorkommen, dass Notes den Anhang nicht mit einem Icon versieht.


    Und jetzt ein WorkAround:
    - Unter den Dateitypen im Windows Explorer bei ".PDF" unter "Erweitert" -> "anderes Symbol" auf den Programmpfad der Acrobat-EXEDatei verweisen

    -> %ProgrammFilesDir\Adobe\Acrobat 6.0\Reader\acrord32.exe


    Bei den angezeigten Symbolen das allerletzte Symbol auswählen und dann sollte es funktionieren

    Wenn du das Dokument mit DocLink versendest, aber dann das Dokument nicht speicherst, wird der DocLink ins Leere weisen.


    Kann es sein, daß du aus einer Datenbank mit Formularen ein Dokument erzeugen willst und die Anwender sollen einen DocLink auf das an die Mail-In-DB versendete Dokument in der Mail-In-DB erhalten ?


    Dann muß die Mail-In-DB einen Agenten haben, der die Versendung der DocLinks vornimmt (wenn neue Mails eintreffen).


    Das an die Mail-IN-DB versendete Dokument muß dann die Empfänger in Feldern haben, die der Agent auswerten kann.

    Da Notes die Felder immer von oben nach unten in der Maske durchrechnet, mein Hinweis: stehen die Felder, die du per Berechnungsformel als Vorgabe in der RT-Formel auswerten willst, auch ÜBER dem RT-Feld ?


    Sonst: Anordnug ändern und es sollte klappen.

    Die option kannst du - für alle Dokumente in allen DBs, also nicht nur für Mails - erhalten, indem du ein Feld $KEEPPRIVATE mit dem Wert "1" einfügst. Dann funktionieren nicht mehr:
    Drucken, Weiterleiten, Kopiere in die Zwischenablage


    Deine Weiterleitungsroutine muß dieses Feld dann wieder auf "0" setzen und dann die Weiterleitung mit speziellem Code durchführen.


    Du mußt bedenken, daß die Anwender die Dokumente nicht mehr drucken können, es sei denn, du baust eine ähnliche Funtion fürs Drucken ein.


    Warnung: wenn du das tust, kriegst du ganz schnell ganz viele Repllikationskonflikte, enn die Datenbanken verteilt sind, denn jedes Dokument wird zum Drucken dann ja geändert. Ich würde mir das zweimal überlegen.


    Wenn du in allen Ansichten die Systemfunktion WEITERLEITEN nicht weder bei den Aktionen, noch in der Leiste anzeigen läßt, ist dir vermutlich doch auch geholfen.

    Die tückischste - und vermutlich häufigste - Art, ein Dokument zu löschen, ist, daß man (über einen DocLink in ein Dokument geführt wird und) im Dokument im Lesemodus die Entfernen-Taste drückt.


    Bewährt hat sich folgendes Vorgehen: Der Anwender hat überhaupt kein Löschrecht (in der ACL - damit stellst du auch sicher, daß keine Löschungen über Replikationen hereinkommen), sondern kann einem Dokument nur eine Löschvormerkung geben. In der Nacht läuft ein periodischer Agent, der die Löschung dann tatsächlich ausführt (ggf. das Dokument vorher in Quarantäne kopiert o.ä.).


    Der entscheidende Teil, der die obige Aktion ausschließt, steckt im DatenbankScript in QueryDocumentDelete


    Da eine Datenbank neben den "Arbeitsdokumenten" oft auch noch einige andere Dokumenttypen (Keywords, Logs usw.) enthält, habe ich in einem Datenbanksetup-Dokument sog. ECHTLOESCHER namentlich definiert. damit die Dokumente auch wirklich löschen können. Das bedeutet übrigens auch, daß ein ACL-Manager noch nicht automatisch Dokumente automatisch löschen kann, wenn er die Datenbank nicht kennt.


    Zudem gibt es dort ein Feld, ob es Autoren erlaubt ist, ihre Dokumente zu löschen (SetupAutorenLoeschen).


    Dann definiere ich noch, ob es Autoren erlaubt ist, ein Dokument aus dem Dokument heraus durch Batätigen der ENTF-Taste zu löschen (SetupLesenUILoeschen) und, ob das den ECHTLOESCHERN erlaubt ist (SetupLesenUILoeschenEL - es gibt da oft auch Menschen, die zwar die Verantwortung für eine Datenbank haben, sich aber mit Notes nicht besonders gut auskennen. Aus einer Ansicht dürfen die dann ggf. löschen, nicht aber aus einem Dokument, das sie nur zum Lesen geöffnet haben)


    Und so sieht dann der Code aus:

    Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)
    Echtloescher=False
    Dim coll As NotesDocumentCollection
    Set coll = Source.Documents
    If coll.count=0 Then Exit Sub
    If profil98SGFehler Then Exit Sub
    If profil98SG.HasItem("SetupLoescher") Then
    Set xitem=profil98SG.GetFirstItem("SetupLoescher")
    If xitem.Contains(session.Username) Then Echtloescher=True
    End If
    If Not profil98SG.SetupAutorenLoeschen(0)="1" Then
    If Not Echtloescher Then Continue=False
    End If
    If Continue Then
    Set tdoc = coll.GetFirstDocument
    If coll.count=1 And tdoc.IsuiDocopen Then
    If profil98SG.SetupLesenUILoeschen(0)="1" Or (Echtloescher And profil98SG.SetupLesenUILoeschenEL(0)="1") Then
    tabbruch=Messagebox("Soll dieses Dokument wirklich gelöscht werden",3+32+256,"Delete actual document ?")
    If tabbruch <> 6 Then Continue=False
    Else
    Continue=False
    End If
    End If
    End If


    Fürs erste Ausprobieren kannst du die ganzen Bedingungen mit Echtllöschern usw. einmal weglassen und folgendes einbauen - damit werden die Menschen direkt beim Drücken der ENTF-Taste gefragt und nicht erst, wenn sie die Datenbank verlassen:


    Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)
    Dim coll As NotesDocumentCollection
    Set coll = Source.Documents
    If coll.count=0 Then Exit Sub
    Set tdoc = coll.GetFirstDocument
    If coll.count=1 And tdoc.IsuiDocopen Then
    tabbruch=Messagebox("Soll dieses Dokument wirklich gelöscht werden",3+32+256,"Delete actual document ?")
    If tabbruch <> 6 Then Continue=False
    End If
    End If
    End Sub

    Ich baue eine Aktion in alle Ansichten ein, mit der der Nutzer wählen kann, was er drucken möchte: die markierten Dokumente oder alternativ den markierten Ansichtsausschnitt:


    Die Aktion ruft einen Agenten (AufrufDruckenausAnsicht) auf, der manuell aus der Liste der Agenten aufgerufen wird und einmal ausgeführt wird (damit kann man @Commands verwenden).


    Diese Methode funktioniert nur im Notes-Client, da der Web-Task das @Prompt-Kommando nicht unterstützt. Da du im Web-Task aber auch nicht mehrere Dokumente markieren kannst, wird das der Anforderung dennoch entsprechen. Ich sag es nur mal am Rande.


    Mit der Sprache habe ich jetzt einmal einfach D reingeschrieben, damit du die deutsche Liste angezeigt bekommst. Dort kann natürlich auch etwas stehen wie @GetProfileField("98SU";"Setup_UserDialogsprache";@Username), wenn jeder Benutzer ein Setupdokument hat, in dem er die von ihm bevorzugte Sprache hinterlegt.


    Und der Agent enthält folgenden Code:


    ListeD:="1 - aktuelle(s) gewählte(s) Dokument(e) drucken":"2 - Ansicht drucken (Ausschnitt Gewählte)":"9 - Abbruch";
    ListeE:="1 - Print actual(ly marked) document(s)":"2 - Print marked part of view as view":"9 - Cancel";
    sprache:="D";
    Liste:=@If(sprache="D";ListeD;ListeE);
    Vorschlag:=@Subset(Liste;1);
    tWahl:=@Prompt([OKCANCELLIST];"Printout";"";Vorschlag;Liste);
    @If(@IsError(tWahl) | tWahl="";@Return("");NULL);
    wahl:=@Left(tWahl;1);
    @If(wahl="9";@Return("");
    wahl="1";@PostedCommand([FilePrint] ; 1; "" ; "" ; "" ; "" ; "" ; "pagebreak" ; "resetpages"; "";"" );
    wahl="2";@Do(@PostedCommand([ViewShowOnlySelected]);
    @PostedCommand([FilePrint] ; 1; "" ; "" ; "" ; "printview" ; "" ; "pagebreak" ; "resetpages"; "";"" );
    @PostedCommand([ViewShowOnlySelected]));"")