Autor Thema: Feldwert per Schaltfläche ändern (Dok. im Lesemodus)  (Gelesen 4319 mal)

Offline Durri

  • Frischling
  • *
  • Beiträge: 18
  • Geschlecht: Männlich
Hallo Notes-Gemeinde,

ich hab da folgendes Problem:   :-:

Ein Dokument ist aufgrund seines Status' zur Bearbeitung gesperrt. Das Status-Feld soll aber geändert werden können.
Aus der Ansicht heraus funzt das mit @SetField auch reibungslos. Ist das Dokument aber zum Lesen geöffnet, geht's wohl mit @SetField nicht mehr. Wie gesagt, Bearbeiten-Modus ist aufgrund des aktuellen Dokumentstatus' nicht mehr möglich.
Ich vermute mal, ich müsste per Script ran. Da bin ich jedoch relativ hilflos.
Vielleicht kann mir jemand von Euch mit einem String-Beispiel helfen.

Also, ich möchte über eine Schaltfläche einen Agenten anstoßen, der bei geöffnetem Dokument das Feld Status z. B. in den Wert "genehmigt" ändert, ohne dass das Dokument in den Bearbeiten-Modus gewechselt werden muss.

Vielen Dank schon mal im Voraus für die Unterstützung!!!

Michael

Offline Andreas Huhn

  • Senior Mitglied
  • ****
  • Beiträge: 251
  • Geschlecht: Männlich
    • Private Homepage + eigene Software-Tools
Re: Feldwert per Schaltfläche ändern (Dok. im Lesemodus)
« Antwort #1 am: 03.11.05 - 09:01:09 »
Hallo Michael,

versuche es mal so:

_var := @IsDocBeingEdited;
@Command([EditDocument] ; "1");
FIELD StatusFeld := "1";
@Command([FileSave);
@if(_var ; @Return(null) ; null);
FIELD saveoptions := "0";
@Command([EditDocument] ; "0")


Das Feld Statusfeld gegen dein Feld austauschen.

Weiß nicht ob das deine Anforderung erfüllt, aber ich denke einen Versuch ist es wert.

Viele Grüße,

Andreas

Offline Durri

  • Frischling
  • *
  • Beiträge: 18
  • Geschlecht: Männlich
Re: Feldwert per Schaltfläche ändern (Dok. im Lesemodus)
« Antwort #2 am: 03.11.05 - 09:09:50 »
Hallo Andreas,

so ähnlich war auch meine Ursprungsformel, die nicht funktioniert hat. Mit '@Command([EditDocument] ; "1")' will der Agent ja schon in den Bearbeiten-Modus wechseln und das ist ja gerade aufgrund des Status nicht möglich.

Michael

Offline Mandalor

  • Senior Mitglied
  • ****
  • Beiträge: 359
  • Geschlecht: Männlich
Re: Feldwert per Schaltfläche ändern (Dok. im Lesemodus)
« Antwort #3 am: 03.11.05 - 10:04:50 »
wie fängst du ab, das bei einem bestimmten Status der Wechsel in den Bearbeitungsmodus nicht durchgeführt werden kann?
der Button muss einen flag setzen (z.B. Profildok oder Notes- Inieintrag).

Die Routine, welche den wechsel verhindert, muss diesen Flag auswerten und dann den wechsel zulassen.

--> du musst in den bearbeitungsmodus wechseln


2.Möglichkeit: du schließt das dok über einen aufgerufenen agenten, änderst den status und öffnest dann das dok wieder
mit besten Grüßen

Markus Petzold

Offline Durri

  • Frischling
  • *
  • Beiträge: 18
  • Geschlecht: Männlich
Re: Feldwert per Schaltfläche ändern (Dok. im Lesemodus)
« Antwort #4 am: 03.11.05 - 10:49:20 »
Hallo Markus,
ich hab im Querymodechange folgenden String, der eine Dokumentänderung nur zulässt, solange das Dok im Status "vorgemerkt" steht.

Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
   Dim Status As String
   Status = source.FieldGetText("Status")
   If Source.EditMode = False Then      
      Continue = False
      If Status <> "vorgemerkt" Then
         Success = Messagebox ("Das Dokument kann nicht mehr geändert werden!",0+64,"Fehler!")
         Continue = False
      Else
         Continue = True
      End If
   End If
End Sub

Das Dok geht irgendwann über eine Ansicht-Aktion mit @SetField in den Status "zur Genehmigung", wodurch der Vorgesetzte eine Mail bekommt, die ihn zur Genehmigung auffordert. Die Genehmigung durch den Vorgesetzten aus einer Ansicht heraus über @SetField funktioniert ja auch. Der Einfachheit halber hätte ich halt gern einen DokLink in die Mail gesetzt, so dass der Vorgesetzte bei geöffnetem Dokument entscheiden kann.
Ich könnte mir auch vorstellen, in o.a. String den aktuellen User statusabhängig mit dem zuständigen Vorgesetzten, dessen Notesname ebenfalls im Dokument im Feld VGMAIL hinterlegt ist, abzugleichen, so dass die Bearbeitung im Status "Zur Genehmigung" nur für den Vorgesetzten erlaubt ist. Da bin Scripttechnisch jedoch überfordert.

Trotzdem Danke
Michael

Offline gossifu

  • Senior Mitglied
  • ****
  • Beiträge: 352
  • Geschlecht: Männlich
  • Dummheit schafft Freizeit
Re: Feldwert per Schaltfläche ändern (Dok. im Lesemodus)
« Antwort #5 am: 03.11.05 - 12:28:29 »
Hallo,

versuche mal in einer Aktion diesen Code:


dim ws as new NotesUIWorkspace
dim uidoc as NotesUIDocument
dim doc as NotesDocument

Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document

doc.Status = "vorgemerkt"
Call doc.Save(True,False)

'und wenn das dann in den Bearbeiten-Modus soll...
'wegen derselben Instanz
Set uidoc = ws.EditDocument(True,doc,False, "", True, False )



Toi, toi, toi.

mfg

Kjeld
« Letzte Änderung: 03.11.05 - 12:34:14 von gossifu »
Immer lustig und vergnügt, bis der A.... im Sarge liegt. ;-)

Offline Durri

  • Frischling
  • *
  • Beiträge: 18
  • Geschlecht: Männlich
Re: Feldwert per Schaltfläche ändern (Dok. im Lesemodus)
« Antwort #6 am: 03.11.05 - 16:06:13 »
Hallo Kjeld,

danke für den String.

Mit diesem hier:
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim doc As NotesDocument
   Set uidoc = ws.CurrentDocument
   Set doc = uidoc.Document
   doc.Status = "genehmigt"
   Call doc.Save(True,False)
setzt die Schaltfläche den Status des Dokuments auch im Lesen-Modus auf "genehmigt".
Ich hab jetzt in dem Dokument aber noch ein Feld, in das der Genehmigungszeitpunkt und ein Feld, in das der Name des Genehmigers eingetragen werden soll (hatte ich zu Beginn vergessen zu erwähnen  :-\). Kannst Du mir nochmal helfen? Wie gesagt, ich bin Script-Laie.
Dann noch eine Frage: Der Status wird mit der Schaltfläche zwar geändert. Ich sehe die Änderung aber erst, wenn ich das Dokument schließe und in der Ansicht F9 drücke. Woran liegt das, bzw. wie kann ich die Aktualisierung sofort anstoßen?

Grüße
Michael

Offline bernino1

  • Junior Mitglied
  • **
  • Beiträge: 68
  • Geschlecht: Männlich
Re: Feldwert per Schaltfläche ändern (Dok. im Lesemodus)
« Antwort #7 am: 03.11.05 - 16:32:20 »
aktualisierung:
call uidoc.refresh

aktionsauslöser eintragen:
dim sess as new notessession
doc.feldname = sess.username

zeitpunkt eintragen:
doc.datumsfeldname = now

Schöne Grüße vom Bodensee

Berndt

Offline Durri

  • Frischling
  • *
  • Beiträge: 18
  • Geschlecht: Männlich
Re: Feldwert per Schaltfläche ändern (Dok. im Lesemodus)
« Antwort #8 am: 03.11.05 - 17:13:02 »
Hallo Berndt,

vielen Dank, hat soweit geklappt. Nur die Aktualisierung klappt nicht. Wo muss ich den Befehl platzieren?

Danke und Gruß
Michael

Offline bernino1

  • Junior Mitglied
  • **
  • Beiträge: 68
  • Geschlecht: Männlich
Re: Feldwert per Schaltfläche ändern (Dok. im Lesemodus)
« Antwort #9 am: 03.11.05 - 17:31:14 »
oh sorry michael,

das uidoc.refresh funktioniert natürlich nur im edit.mode!

eventuell könnte das hier funktionieren:
   Evaluate("@Command([RefreshHideFormulas])")

du kannst innerhalb der klammer auch andere direkt formeln ausprobieren!
ausführen kannst du es vor oder nach dem speichern!

gehe jetzt in den feierabend - sollte das nicht funzen kannst du nur noch das dokument im spcript schließen :
call uidoc.close

ansonsten - bis morgen

teu teu teu
Schöne Grüße vom Bodensee

Berndt

Offline Durri

  • Frischling
  • *
  • Beiträge: 18
  • Geschlecht: Männlich
Re: Feldwert per Schaltfläche ändern (Dok. im Lesemodus)
« Antwort #10 am: 03.11.05 - 18:07:00 »
Hallo Berndt, ich nochmal,

hoffe, Du hattest gestern einen schönen Feierabend  ;D

Das mit dem Refresh klappt nicht - macht aber nix.
Aber nochmal zurück zum Setzen des Usernamens. Mit Deinem Befehl wird der Name im CANONICALIZE-Format gesetzt. Kann ich den Namen auch im ABBREVIATE-Format setzen?
Wenn das noch klappen würde, wäre die Schaltfläche so, wie ich sie haben wollte.

Danke und bis morgen
Michael

>>> hab jetzt auch genug für heut und mach Schluss   ;)
« Letzte Änderung: 03.11.05 - 18:35:23 von Durri »

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Feldwert per Schaltfläche ändern (Dok. im Lesemodus)
« Antwort #11 am: 03.11.05 - 22:16:52 »
Grundsätzlich würde ich den Aufbau der Applikation überdenken und mit Autorenfeldern arbeiten, das ist sicherer als das ganze über Maskenevents zu steuern.

Wie auch immer:

Refresh:
Wenn das Dokument geöffnet ist, und Du dort was per LotusScript änderst, ist ein
Code
Call uiws.ViewRefresh
erforderlich, damit Du die Änderung sofort in der Ansicht siehst.

Wegen dem Usernamen-Format:
Für Usernamen solltest Du IMMER Namensfelder verwenden. Zur Anzeige in Ansichtsspalten nimmst Du dann statt
Code
Username
ganz einfach
Code
@Name([Abbreviate]; Username)

Wenn Du unbedingt darauf bestehst, kein Namensfeld sondern ein Textfeld zu verwenden, und dort den Abbreviate-Namen reinzusetzen, dann kannst Du Dir das via
Code
Dim nn As NotesName
Set nn = New NotesName (session.Username)
strErgebnis = nn.Abbreviated
umwandeln. Ich rate aber davon ab, und empfehle Dir, immer mit Namensfeldern zu arbeiten und den canonical Namen zu verwenden.
Siehe auch: http://atnotes.de/index.php?topic=14119.0
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Feldwert per Schaltfläche ändern (Dok. im Lesemodus)
« Antwort #12 am: 03.11.05 - 22:28:29 »
Du solltest wirklich erst einmal nachschauen, warum das Dokument nicht in den Editiermodus wechselt. Das scheint eine vorhandene Anwendung zu sein.
Ich empfehle *dringend* die Teile wirklich zu verstehen, wofür du deine Erweiterungen schreibst (sprech da aus Erfahrung).
Vermutlich ist code im qerymodechange der Maske (schau da mal nach).
Stell Fragen, wenn du es nicht verstehst.
Vor allem kannst du dabei selber was lernen.
Mach ne Sicherheitskopie von der Maske (oder besser von der ganzen Datenbank) und spiel mit dem Code rum.
Jedenfalls führt dieses Ranpflantschen oft zu ziemlich bizarren Datenbanken (meiner Meinung nach).

Gruß Axel
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Feldwert per Schaltfläche ändern (Dok. im Lesemodus)
« Antwort #13 am: 03.11.05 - 22:42:16 »
Axel,
Du solltest wirklich erst einmal nachschauen, warum das Dokument nicht in den Editiermodus wechselt.
(...)
Vermutlich ist code im qerymodechange der Maske (schau da mal nach).
das wurde in Antwort #3 bzw. #4 schon behandelt.
Ansonsten stimme ich Dir aber zu, daher auch mein skeptischer Einwand, den Aufbau zu Überdenken (Autorenfelder). Denn so per LS oder auch Formelsprache setzt man (und auch ggf. ein experimentierfreudiger User) die ganzen Events außer Kraft.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Feldwert per Schaltfläche ändern (Dok. im Lesemodus)
« Antwort #14 am: 03.11.05 - 23:33:15 »
Drei Anmerkungen:
Natürlich bekommst Du eine Sicherheit wegen der Bearbeitbarkeit nur via Autorenfelder - dies wurde ja schon erwähnt. Wenn Du derzeit nur eine Sperre im QueryModeChange eingebaut hast, ist dies ja zudem noch ganz simpel zu umgehen: Drücke Strg-B (deutscher Client, im englischen Ctrl-E) aus einer Ansicht heraus, und QueryModeChange wird überhaupt nicht getriggert.

Prinzipiell: Was das Ändern von Items im Backend angeht, wurde der passende Code ja schon gepostet. Und genauso, wie das Item "Status" geändert wird, können auch die beiden anderen Items auf neue Werte gesetzt werden.

Last but not least: Du setzt LS ein, um "das Bearbeiten zu verhindern" (QueryModeChange), sagst aber , dass Du da nicht fit bist. Du begibst Dich damit auf extrem dünnes Eis (siehe das vergessene Event PostOpen, ggf. auch PostRecalc).

Matthias "TMC" schrieb es schon: Das Verändern von Dokumenten kannst Du durch pures Reagieren auf FrontEnd-Aktionen nie und nimmer verhindern, und Notes stellt deshalb ja auch ganz andere Möglichkeiten zur Verfügung. genauso, wie wir es hier beispielhaft beschrieben haben, kann sich jeder halbwegs begabte User selber einen Agent schreiben und Items verändern, wie es ihm gerade beliebt.

Was Namensfelder angeht: Das kann man machen, muss man aber nicht, denn Namensfelder unterscheiden sich von normalen Textfeldern nur durch zwei wesentliche Eigenschaften:
Canonical names werden im FrontEnd abbreviated angezeigt (also aus "CN=Hein Bloed/O=Kutter/C=Meer" wird eben "Hein Bloed/Kutter/Meer".
Und - zumindest ab R6 - können Namensfelder via den Administrationsserver in den Administrationsprozess einbezogen werden (Löschungen von Usern, Umbenennungen, Rezertifizierungen). Letzteres kann sehr erwünscht sein, aber auch zutiefst kontraproduktiv (Beispiel: Alle Anträge gelöschter Mitarbeiter weisen im Namensfeld "Antragsteller" plötzlich nur noch Leerstrings auf).
Der Einsatz von Namensfeldern versus Textfeldern will also sehr wohl durchdacht sein.

Bernhard

Offline Durri

  • Frischling
  • *
  • Beiträge: 18
  • Geschlecht: Männlich
Re: Feldwert per Schaltfläche ändern (Dok. im Lesemodus)
« Antwort #15 am: 04.11.05 - 10:02:49 »
Hallo an alle Helfer,

erst mal vielen Dank für die zahlreichen Tipps und Hilfestellungen. Die Funktion läuft jetzt eigentlich so, wie ich sie haben wollte  :D

Matthias:
Der Refresh-String hat funktioniert. Zu Deinem Hinweis mit den Autoren-Feldern: Auch das hatte ich schon berücksichtigt. Die Maske soll aber darüber hinaus nicht änderbar sein, mit Ausnahme des Status-Feldes, was wiederum nur durch die Autoren änderbar sein soll. Mit den Namensfeldern hattest Du natürlich recht. Ist ein Anfängerfehler (die DB war seinerzeit eine meiner ersten, beim aufpeppen jetzt hab ich's einfach übersehen, dass es noch Textfelder waren).

Bernhard:
Den PostOpen hatte ich schon abgesperrt, so dass Strg-B ins Leere läuft.
Zu dem "dünnen Eis" geb ich Dir auch irgendwo recht. Die Codes, die ich einsetze verstehe ich in Ansätzen schon (kommen in der Regel von Profis wie Euch hier in diesem Forum - FETTES LOB an dieser Stelle!!!). Probleme habe ich eigentlich nur damit, diese selbst herzuleiten, dass sie auch funktionieren. Hab zwar schon eine LS-Schulung mitgemacht, da dort aber viele Profis zugange waren, bin ich nicht so recht mitgekommen - will das aber nachholen.
Danke auch für den Hinweis mit dem Administrationsprozess.

Wie gesagt, noch mal Danke für die zahlreichen Postings, Hilfestellungen und Hinweise und ein dickes Lob an alle!!!

Grüße
Michael

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz