Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: mkrauss am 21.10.04 - 08:23:30

Titel: Feldinhalte aktualisieren
Beitrag von: mkrauss am 21.10.04 - 08:23:30
Hallo alle zusammen,

wahrscheinlich ist es ganz einfach, doch ich bekomme es nicht hin.
Ich möchte in einer Maske Felder automatisch mit dem Inhalt aus einer anderen Maske füllen.

Beispiel:

Maske A:  Feld xy

Maske B: Feld xy

Das Feld in Maske B habe ich nachträglich angelegt. Wenn ich Maske B neu erstelle, wird das Feld gefüllt. Aber wie bekomme ich es nun hin, in den Masken die bereits angelegt wurden, das Feld mit Inhalt zu füllen?

Ist wahrscheinlich ganz einfach. Aber ich komm nicht draufß
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Axel am 21.10.04 - 09:28:13
Hi,

bau dir einen Agenten für ausgewählte Dokumente mit dem Befehl

@Command([ToolsRefreshSelectedDocs])


Dann markierst du die entsprechenden Doks und läßt den Agenten laufen.


Axel
Titel: Re: Feldinhalte aktualisieren
Beitrag von: mkrauss am 21.10.04 - 11:18:08
Hab ich schon gemacht. Doch er baut die nicht auf.
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Driri am 21.10.04 - 11:27:13
Deine Formulierung ist leider ein wenig unglücklich. Ich deute das mal so, daß Du X Dokumente hast, die mit Maske A erstellt wurden und zusätzlich Y Dokumente, die mit Maske B erstellt wurden.
Maske B ist so eingerichtet, daß Feld xy den Wert aus einem Dokument mit Maske A übernimmt.

Korrekt verstanden ?

Die Felder für Dokumente B nachträglich zu füllen, dürfte nicht ganz einfach sein, Du brauchst ja nachträglich eine Verbindung zum jeweiligen Dokument A. Hast Du da irgendeinen Key, über den Du das Dokument A ermitteln kannst ? Oder sind die Dokumente B Antwortdokumente ?
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Axel am 21.10.04 - 11:28:53
Hi,

wird der Wert nur bei der Neuanlage übernommen?

Wenn ja, dann steht der Feldname im Vorgabewert und der wird nur bei neuen Dokumenten angezogen. Bei bestehenden Dokumenten hast du dann Pech.

Hast du eine Verbindung von Maske B zu Maske A, z.B. in Maske B ist die ID von Maske A abgelegt? Wenn nicht, sehe ich keine grossen Chancen das automatisiert hinzukriegen.


Axel

 
Titel: Re: Feldinhalte aktualisieren
Beitrag von: mkrauss am 21.10.04 - 12:13:37
Hallo Driri,

du hast das ganze Richtig verstanden. Maske B ist ein Antwortdokument.

Maske A wir immer zuerst angelegt. Maske A ist ein Kundenprofil in dem die kompletten daten drin stehen.

Maske B wir im Nachhinein angelegt. Maske B ist ein Antwortdokument. Dort werden zusätzliche daten abgelegt, z.Bsp Ansprechpartner der Fa. usw. In Maske B kommen nun weitere Felder hinzu, die in Maske A bereits vorhanden sind. Beim neuanlegen von Maske B werden die Felder automatisch gefüllt. Nun möchte ich die neuen Felder nachträglich auch mit den Daten befüllen. Hoffe es ist einigermasen Verständlich was ich möchte.

Gruß Michael
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Axel am 21.10.04 - 12:25:17
Hi,

so ganz grob gesprochen brauchst du einen Agent der sich die markierten Hauptdokumente in eine Collection packt (UnprocessedDocuments).
Dann wird die gesamte Collection durchlaufen und für jedes Dokumente die Antworten in eine weitere Collection gepackt. Dann kannst du mit StampAll in allen Antworten einem Feld einen Wert zuweisen, siehe Code unten. Den Wert liest du aus dem entsprechenden Feld des Hauptdokumentes aus.


Code
...
Dim collection As NotesDocumentCollection

Set collection = doc.Responses
Call collection.StampAll("Feldname", "Feldwert")
...


So könnte es gehen.

Axel
Titel: Re: Feldinhalte aktualisieren
Beitrag von: mkrauss am 21.10.04 - 13:11:24
Danke werd ich gleich mal ausprobieren
Titel: Re: Feldinhalte aktualisieren
Beitrag von: cococo69 am 21.10.04 - 17:42:30
Hallo,

in "At Notes Best Practices" gibt es einen guten Artikel über Haupt- und Antwortdokumente http://www.atnotes.de/index.php?topic=13984.0.

Dort wird dies m.E. ausführlich beschrieben!

Gruß
Armin
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Schnulli am 22.10.04 - 14:00:06
Hallo Armin,

bei Feldern mit Mehrfachwerten scheint aber nur jeweils der erste Wert übertragen zu werden .....
Titel: Re: Feldinhalte aktualisieren
Beitrag von: koehlerbv am 22.10.04 - 14:04:09
Das scheint nicht nur so, sondern das ist auch so. Das wird im Code dort ausdrücklich so gemacht.
Wenn man den Index (0) weglässt, wird natürlich das komplette Item übertragen.

Bernhard
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Schnulli am 22.10.04 - 14:16:37
Na, dann hätte ich ja schon mal einen meiner Fehler gefunden!!! Wie doof! Vielen Dank!


Leider habe ich mir wohl dadurch ein paar Leserfelder abgeschossen.
Kann man noch etwas retten, wenn Dokumente sich zwar noch in der DB befinden, aber für niemanden mehr sichtbar sind? (ich sehe, daß sie noch da sind anhand der Anzahl von Antworten zum Mutterdoku)
Titel: Re: Feldinhalte aktualisieren
Beitrag von: koehlerbv am 22.10.04 - 14:21:08
IMHO: Nein. Da vermutlich in den Feldern jetzt irgendein String steht, ist da kein Herankommen mehr.

Ich kann mir übrigens nicht vorstellen, dass diese "neuen" Inhalte durch irgendeine Korruption der DB entstanden sind. Hat da jemand mal 'nen Agent laufen lassen (da Du ja sagst, dass die Dokumente "früher" mal korrekt waren) ?

Bernhard
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Glombi am 22.10.04 - 14:24:03
Man kommt an die Dokumente heran, wenn der Admin Dir eine Kopie der Datenbank ohne konsistente ACL sendet. Die Kopie muss mit dem Betriebssystem auf dem Server gemacht werden.
Oder der Admin sucht die Dokumente mit dem Full Admin Access (beliebtes Thema heute).

Andreas
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Schnulli am 22.10.04 - 14:39:56
@Andreas: Du machst mir Hoffnung, werde mir am Montag gleich einen Admin schnappen
Die erste Methode hatten wir soweit ich mich erinnere schon ausprobiert, das hatte nicht funktioniert. Aber die zweite ist vielleicht eine Chance.
Laut Admin ist es ihnen übrigens inzwischen gelungen, die Dasi der DB von gestern zurückzuholen....

@Bernhard: Tja, ob da ein Agent lief oder was auch immer da los war, kann ich nicht mehr lückenlos nachvollziehen. (Ich muss meine Dokumentation verbessern, das steht auf jeden Fall fest.) Sicherheitskopien habe ich irgendwann nicht mehr gemacht, weil es hieß, die Platten wären voll und die DB würde ja gesichert ......
Habe jetzt in einer Kopie (die natürlich die unsichtbaren nicht enthält) alle Autoren und Leserfelder erstmal "geleert".
Muss halt die ganze Programmierung noch mal durchgehen.

Gruß
Iris
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Glombi am 22.10.04 - 14:48:15
Wichtig ist wie gesagt, dass die Kopie direkt am Server über das Betriebssystem gemacht wird bzw. über eine Netzwerkverbindung.

Eine Kopie über Notes ist nicht hilfreich, da ja nur diejenigen Dokumente kopiert werden, die derjenigen in Notes lesen darf.

Damit Du wieder alle Dokumente lesen, solltest Du in der lokalen Kopie einen Agenten erstellen, der in allen Dokumenten ein neues Autorenfeld setzt. Dort schreibst Du dann die Rolle [EditAll] rein. Diese Rolle musst Du zur ACL hinzufügen und zumindest mal Dir, dem Server und der Admingruppe gegeben.
Der Agent sollte über alle Dokumente der Datenbank laufen.

Da alle Dokumente geändert wird, besteht natürlich ie Gefahr von Speicher- und Replizierkonflikten, wenn Du die Datenbank wieder zurückreplizierst. Daher würde ich für die Zeit der "Reparatur" die Datenbank sperren. Wenn Du die Datenbank repariert hast, soll der Admin diese wieder auf dem Server ersetzen.


Nachtrag: Wichtig - Autorenfeld, kein Lesenamensfeld!

Andreas
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Schnulli am 25.10.04 - 14:18:49
@Andreas,
Vielen Dank für Deine Hilfe bezüglich meiner "unsichtbaren" Dokumente.
Mein Admin hat mir inzwischen eine Kopie mitsamt der "unsichtbaren" Dokus zur Verfügung stellen können.

Nun Schritt 2, den Du mir empfohlen hast: "Erstelle per Agent ein neues Autorenfeld und füge [EditAll] ein ......"

Ich beherrsche leider nur die Formel-Sprache, deshalb meine Frage:

Ich würde ein neues Feld mit FIELD := "[EditAll]" erstellen, aber wie sage ich Notes, daß es sich dabei um ein Autorenfeld handelt?

Geht wahrscheinlich nur mit Script, oder?

Viele Grüße
Iris


Antwort von Glombi:
Hallo Iris,
ja das geht nur mit Script. Hier ein Script, das in ALLE Dokumente der Datenbank das neue Autorfeld schreibt.

Der Code muss in einen Agenten, der über alle Dokumente der Datenbank läuft. Du kannst es auch auf alle gewählten Dokumente setzen, musst dann natürlichvorher die Dokumente wählen:

Sub Initialize
dim session as New NotesSession
dim db as NotesDatabase
dim dc as NotesDocumentCollection
dim doc as NotesDocument
dim item as NotesItem

set db = session.CurrentDatabase
set dc = db.UnprocessedDocuments
set doc = dc.GetFirstDocument
while not (doc is Nothing)
set item = New NotesItem(doc,"DefaultAuthors","[EditAll]",AUTHORS)
call doc.Save(false,true,true)
set doc = dc.GetNextDocument(doc)
wend
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Axel am 25.10.04 - 14:35:56
Antwort von Glombi:
Hallo Iris,
ja das geht nur mit Script. Hier ein Script, das in ALLE Dokumente der Datenbank das neue Autorfeld schreibt.

Der Code muss in einen Agenten, der über alle Dokumente der Datenbank läuft. Du kannst es auch auf alle gewählten Dokumente setzen, musst dann natürlichvorher die Dokumente wählen:

Sub Initialize
dim session as New NotesSession
dim db as NotesDatabase
dim dc as NotesDocumentCollection
dim doc as NotesDocument
dim item as NotesItem

set db = session.CurrentDatabase
set dc = db.UnprocessedDocuments
set doc = dc.GetFirstDocument
while not (doc is Nothing)
set item = New NotesItem(doc,"DefaultAuthors","[EditAll]",AUTHORS)
call doc.Save(false,true,true)
set doc = dc.GetNextDocument(doc)
wend

Hi,

da hast du doch schon die Antwort. Genauso geht das, fast.  ;)
Hinter der Zeile

Set item = New...

musst du noch

item.IsAuthors= True

einfügen, damit es auch wirklich ein Autorenfeld wird.


Axel

Titel: Re: Feldinhalte aktualisieren
Beitrag von: koehlerbv am 25.10.04 - 14:39:26
Unnötig, Axel - das macht schon der Parameter specialType% von New NotesItem  ;)

Bernhard
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Schnulli am 25.10.04 - 14:42:45
Vielen Dank, habe das Script nun ausprobiert, den Agent gestartet und leider folgende Fehlermeldung erhalten:
Auch mit der Zeile von Axel kam leider die gleiche Fehlermeldung:

"Could not create field DefaultAuthors!"

Der Agent ist "gemeinsam", "Alle Dokumenten in der Datenbank",
Options -> Option Public
Initialize -> Formel wie beschrieben

Hat jemand eine Idee warum Notes nicht will?

Viele Grüße
Iris
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Glombi am 25.10.04 - 14:50:27
Also, mein Code funktioniert. Es kann sein, dass Du keine Dokumente ändern darfst! Welches Recht hast Du denn in der Datenbank?
Du solltest mindestens Editorrecht haben.

Andreas
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Axel am 25.10.04 - 14:51:30
Unnötig, Axel - das macht schon der Parameter specialType% von New NotesItem  ;)

Bernhard

Hi,

wirklich?  ???

Ich hatte aber da ganz andere Erfahrungen gemacht. Oder hat sich da in Version 6 was geändert?


Axel
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Schnulli am 25.10.04 - 14:57:44
@Glombi:

Bin Manager der DB und habe mir alle verfügbaren Rollen zugewiesen.

Habe übrigens dies hier auch noch probiert:
- Per Agent alle Autoren und Leserfelder auf "" gesetzt. -> kann die "unsichtbaren" trotzdem nicht sehen (lt. Notes wurde der Agent auch auf allen 124 Dokumenten ausgeführt, ich sehe aber weiterhin nur 102)
- Habe mir die Papierkorbansicht angeschaut, da ich wiederherstellbare Löschungen zulasse und mir dachte, vielleicht sind sie ja da drin -> auch nix
Titel: Re: Feldinhalte aktualisieren
Beitrag von: klaussal am 25.10.04 - 15:04:00
Nächster Versuch:

alle Leserfelder löschen : FIELD DeinLeserfeld:=@DeleteField

klaus
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Schnulli am 25.10.04 - 15:17:20
@Klauss: Leider auch nix!  :-[

Anbei mal der Screenshot einer Ansicht. Hier sieht man, daß die Dinger noch da sind.
(Oder irre ich mich da grundsätzlich?)

PS: 2. Zeile= Name Maske
"Proj" bezeichnet immer das Mutterdokument

Noch Vorschläge? Bin datenbanktechnisch zu allem bereit!!!  :-\

Iris
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Glombi am 25.10.04 - 15:24:01
Machst Du das eigentlich in der Datenbank auf dem Server oder in der lokalen, die der Admin Dir gegeben hat?
Du musst es nämlich in der lokalen (ohne konsistente ACL) machen.

Andreas
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Schnulli am 25.10.04 - 16:17:54
@Glombi: Das war's! War zwar lokal, konsistente ACL war aber noch nicht deaktiviert. Musste Notes noch neu starten, dann waren sie da!!!! (Hört Ihr die Korken knallen???)

Jetzt hat auch das mit dem DefaultAuthors geklappt!

Sorry, daß ich da nicht gleich noch mal geguckt hatte, hatte die kons ACL auf dem Server deaktiviert und dann erst auf Lokal umgeschaltet, ich Depp!!!

Ihr seid echt die Größten, vielen vielen Dank!!!!
Viele Grüße
Iris
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Schnulli am 25.10.04 - 17:11:36
Ich dreh hier noch durch!!!

Jetzt hatte ich die funktionierende, alle anzeigende DB mit Doks mit dem neuen Feld DefaultAuthors ([EditAll]). Alle anderen Autoren- und Leserfelder sind leer.
Nun wollte ich das Dingen wieder fit für den Server morgen machen:
(Zuerst habe ich mir noch ein Kopie gemacht, für alle Fälle, die enthält auch alle Doks.)

Dann weiter:
Aktiviere also auf der lokalen Datei wieder die konsistente ACL , ordne noch ein paar Rollen zu und will die DB anschließend wieder öffnen. Da kommt wieder diese sch.... Fehlermeldung "Page format is incorrect" und es geht gar nichts mehr. Weder öffnen der DB, noch der Zugriffskontrolle, noch Öffnen im Designer noch sonst was.

Hat jemand eine Idee, was das sein kann? Auch nach Computer-Neustart läßt sich die DB nicht öffnen!

Gruß
Iris
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Glombi am 25.10.04 - 19:52:47
Das erfordert wohl ein indutkives Vorgehen:
Nimm Deine Sicherung und mache eine neue Kopie.
Weise Dir die Rolle [EditAll] zu.
Aktiviere konsistente ACL.
Ergänze die restlichen Rollen.

Nach jedem dieser Schritte öffne bitte die DB. Dann weißt Du ja, wann es knallt.

Andreas
Titel: Re: Feldinhalte aktualisieren
Beitrag von: koehlerbv am 25.10.04 - 20:26:37
Könnte es bei derartigen Aktionen nicht auch die View-Indizes zerhauen ?  Die Fehlermeldung deutet ja u.U. auf sowas hin.
Was passiert, wenn Du nach den ACL-Anpassungen erstmal ein nupdall.exe auf die DB startest oder eine weitere Replik anlegst ?

Irgendwie ein mystisches Ding ...

Bernhard
Titel: Re: Feldinhalte aktualisieren
Beitrag von: Schnulli am 26.10.04 - 08:26:22
Guten Morgen zusammen!

Habe gestern einfach mal die Fehlermeldung in Google eingegeben, und festgestellt, daß ich anscheinend nicht die einzige mit dem Problem bin. Hat irgendetwas mit korrupten DBs oder Views zu tun.
Anbei zur Info ein Link, auf den ich u.a. gestoßen bin ....

Eventuell liegt es an einer "korrupten" Ansicht. (Da ist die Frage: Wer bezahlt wen!? ;-))Werde jetzt folgendermaßen vorgehen: kopieren der DB, löschen aller Ansichten und dann einzeln die Ansichten wieder eintragen und beobachten, was passiert.

Oh Mann, als ob irgendjemand soetwas brauchen könnte.....
Melde mich wieder, wenn ich was entdeckt habe!

Viele Grüße
Iris

http://www-12.lotus.com/ldd/doc/domino_notes/Rnext/help6_admin.nsf/0/806687caf1b30a5185256c1d0039b7f2?OpenDocument

Titel: Re: Feldinhalte aktualisieren
Beitrag von: Schnulli am 26.10.04 - 08:53:11
@Bernhard:

Habe von der nicht funktionierenden DB über die Kachel eine neue Kopie gezogen.
Die funktioniert wieder einwandfrei.....!!??!?!?!?

Zumindest ist dies eine Lösung, wenn es wieder auftritt, aber eigentlich würde ich gerne im Vorfeld verhindern, daß das passiert. Die DB (bzw. die Inhalte) wird in gewissen Zeitabständen unserer Geschäftsleitung präsentiert und es wäre mir doch superpeinlich, wenn dann ausgerechnet das Dingen nicht funktionörkelt!!!!

Mein Admin läßt jetzt mal Fixup und was sonst noch in dem Link genannt war, drüberlaufen und dann schauen wir, ob sie sich dadurch überhaupt reparieren läßt.