Autor Thema: zuweisung UiDoc  (Gelesen 2312 mal)

Offline RonMat

  • Junior Mitglied
  • **
  • Beiträge: 64
  • Geschlecht: Männlich
  • Immer weiter, immer weiter......
zuweisung UiDoc
« am: 03.01.06 - 12:08:24 »
Möchte über ausgewählte Dokumente ein Refresh durchführen und habe nachfolgenden Script erstellt:
Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim collection As NotesDocumentCollection
   Dim doc As NotesDocument
   Set db = session.CurrentDatabase
   Set collection = db.UnprocessedDocuments
   Set doc = collection.GetFirstDocument()
   Dim ws As New NotesUIWorkspace
   Dim Uidoc As NotesUIDocument
   While Not(doc Is Nothing)
      
      
      Set uidoc= ws.currentdocument
      Call uidoc.refresh
      
      Set doc = collection.GetNextDocument(doc)
   Wend

Das ist nur ein Testscript, später wird die Collection aus def. Datensätzen
erzeugt.
Wenn ich das Script laufen lasse, dann geht ein Fensterchen auf mit der Message: Object variable not set

Ich muß diverse Felder berechnen und hatte es vorher mit computedwith form versucht, doch die Felder wurden nicht berechnet und ich habe ein refresh auf das Dokument laufen lassen und siehe da ..
Da in der Doc Klasse ein refreshen nicht vorgesehen ist wollte ich den Umweg über das Uidoc machen , nun habe ich aber o.g. Prob.
Kann mir wohl einer weiterhelfen? Vielleicht habe ich ja auch im Augenblick ein ziemliches Brett vorm Auge

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: zuweisung UiDoc
« Antwort #1 am: 03.01.06 - 12:58:30 »
Hi,

in deinem Script knallst in der Zeile

Set uidoc...

Und auf jeden Fall, dass was du vorhast geht so nicht. Das Thema hatten wir hier schon mehrmals.

Die einfachste Möglichkeit ist eine Ansichtsaktion die den Formelbefehl

@Command([ToolsRefreshSelectedDocs])

aufruft.

Damit werden alle markierten Dokumente in der Ansicht aktualisiert.


Axel

Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: zuweisung UiDoc
« Antwort #2 am: 03.01.06 - 13:06:01 »
@Command([ToolsRefreshSelectedDocs]) führt allerdings keinen Code der Refresh-Events aus. Dort könnten ebenfalls noch Systemfelder geschrieben werden.

Die Zeile Set uidoc= ws.currentdocument ist hier nicht passen.
Die CurrentDocument-Eigenschaft gibt das aktuell geöffnete Dokument zurück. In der Collection sind allerdings nur die ausgewählten Dokumente der Ansicht. Soll heißen: Die Dokumente müssen erst noch geöffnet werden.

Set uidoc = ws.EditDocument(True, doc, False)
If uidoc.EditMode Then Call uidoc.Refresh
Call uidoc.Close(True)
Gruß
Johnson

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: zuweisung UiDoc
« Antwort #3 am: 03.01.06 - 13:11:23 »
@Command([ToolsRefreshSelectedDocs]) führt allerdings keinen Code der Refresh-Events aus. Dort könnten ebenfalls noch Systemfelder geschrieben werden.

Refresh-Event.   ???


...Soll heißen: Die Dokumente müssen erst noch geöffnet werden.

Set uidoc = ws.EditDocument(True, doc, False)
If uidoc.EditMode Then Call uidoc.Refresh
Call uidoc.Close(True)

Damit wirst du allerdings nicht lange Freude haben. Aus eigener Erfahrung kann ich dir sagen, dass nach relativ kurzer Zeit der Notes-Client abschmiert.

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline RonMat

  • Junior Mitglied
  • **
  • Beiträge: 64
  • Geschlecht: Männlich
  • Immer weiter, immer weiter......
Re: zuweisung UiDoc
« Antwort #4 am: 03.01.06 - 14:45:29 »
Danke für Euere Anregungen bzw. Kommentare.
Es muß doch eine funktionierende Refresh-Möglichkeit geben, die auch stabil läuft, wobei ich im Moment noch nicht sehe weshalb der Client abschmiert.

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: zuweisung UiDoc
« Antwort #5 am: 03.01.06 - 15:47:31 »
Es muß doch eine funktionierende Refresh-Möglichkeit geben, die auch stabil läuft...

@Command([ToolsRefreshSelectedDocs])

Ich hatte bisher noch nie Probleme damit. Hast du's damit mal probiert?


...wobei ich im Moment noch nicht sehe weshalb der Client abschmiert.

Das liegt irgendwie an der Speicherverwaltung. Bei mir hat sich so nach 9 bzw 10 Dokumenten, mal mehr mal auch etwas weniger, der Client verabschiedet. Kann auch versionsabhängig sein.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: zuweisung UiDoc
« Antwort #6 am: 03.01.06 - 16:22:23 »
Zitat
Bei mir hat sich so nach 9 bzw 10 Dokumenten
Darum Call uidoc.Close(True)

Zur Refresh: Ich meinte Queryrecalc und Queryrecalc. Und in diesen Events können noch Felder per Script gesetzt werden.
Und dieses Event wird durch @Command([ToolsRefreshSelectedDocs]) nicht hervorgefufen.
Gruß
Johnson

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: zuweisung UiDoc
« Antwort #7 am: 03.01.06 - 16:26:21 »
Zitat
Bei mir hat sich so nach 9 bzw 10 Dokumenten
Darum Call uidoc.Close(True)

Auch mit ...True


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: zuweisung UiDoc
« Antwort #8 am: 03.01.06 - 23:01:34 »
Ich kann Axels Erfahrungen bestätigen. Die Situation hat sich zwar mit R6 / R7 gebessert, aber nach wie vor laufen dort zwei gegenläufige Prozesse ab: Die (hauptsächliche) Bearbeitung im Backend vs. Aufrufe von Frontend-Prozessen, deren Stack sich asynchron gegenüber dem Backend-Prozess verhält.

Vielleicht lässt sich ein einfacherer Ansatz finden: Warum ist überhaupt ein Refresh aus dem Backend erforderlich? Wegen der (komplett anderen) Komplexität des FrontEnd-Documents ist das ja nicht ohne Grund nicht im Backend implementiert und sollte eigentlich auch vermieden werden. Was muss denn warum nachkalkuliert werden? Kann man das nicht anderweitig lösen? Ist das ein einmaliger Prozess (dass würde ja @Command([ToolsRefreshSelectedDocs]) mit einem nachfolgenden Agent, der den Query-/PostRecalc-Code ausführt, ausreichen. Ist es kein einmaliger Prozess, ist das m.E. sowieso bedenklich.

Bernhard

Offline RonMat

  • Junior Mitglied
  • **
  • Beiträge: 64
  • Geschlecht: Männlich
  • Immer weiter, immer weiter......
Re: zuweisung UiDoc
« Antwort #9 am: 04.01.06 - 12:25:58 »
Refreshformula geht natürlich - aber entweder man muß die Docs auswählen oder alle Docs in der Ansicht refreshen. Das Problem sind die Menge der Documents - > 300000 (in einem Jahr)
Warum muß ich die Datenbank refreshen?
Ich importiere via FTP Textfiles und in Abhängigkeit der Headers werden Hauptdokumente und Responsdocuments erstellt. Beide Dokumentarten enthalten berechnete Felder (u.a. Lookups, Währungsberechnungen) die aber während des Imports nicht befüllt werden können da die entsprechenden Felder von anderen Faktoren abhängig sind.
Markiere ich diese Felder und refreshe diese, werden die fehlenden Feldwerte eingesetzt. Das geht aber leider nicht mit Computewithform, da hier nur die default,validierten .. Felder berechnet werden. @DBLookups wollen nicht so und auch Feldwerte die von Dritten abhängig sind werden nicht computed.

Offline rhaller

  • Junior Mitglied
  • **
  • Beiträge: 67
Re: zuweisung UiDoc
« Antwort #10 am: 04.01.06 - 13:51:28 »
Das Problem hatte ich auch einmal...mit dem Öffnen der uidoc's knallt dann nach einer recht geringen Anzahl von Dokumenten (je nach Version und verfügbarem Speicher) der Notes-Client raus. Ich habe die Forms so umgestaltet, dass alles nicht per Formel sondern per Script berechnet wird, diese Scripts dann in eine LS-Lib zusammen gefasst habe und diese dann in der Batch-Verarbeitung wieder aufrufe.

Also nach folgendem Schema:

for i = 1 to coll.count
  set doc = coll.getnthdocument( i )
  Call mydocRecalcScript oder sonstwas-Script
  Call doc.Save (true, false, true)
next

A lot of work, aber es geht nicht anders. Und ist wesentlich flotter als die Methode über uidocs.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz