Autor Thema: Mit Agent Felder aus Dokumenten auslesen  (Gelesen 10131 mal)

werner16

  • Gast
Mit Agent Felder aus Dokumenten auslesen
« am: 15.09.11 - 08:43:49 »
Hallo,

ich möchte mittels eines Agenten aus allen Dokumenten in einer DB ein Feld auslesen.

Jetzt habe ich ein Script da mir soweit auch alle Dokumente durchläuft, aber wie bzw. mit
welchem Befehl kann ich jetzt aus dem aktuellen Dokument ein Feld auslesen?

Der Befehl "mailfeld = uidoc.FieldGetText("email1")" funktioniert jedenfalls nicht!


Hier das Script:

Option Public
Use "MyScripts"
Sub Initialize
   
   Err=0
   On Error Resume Next
   MessageBox "START",1, ""
   Dim session As New NotesSession 
   Dim db As NotesDatabase 
   Dim collection As NotesDocumentCollection 
   Dim doc As NotesDocument 
   Set db = session.CurrentDatabase 
   Set collection = db.AllDocuments 

   For i = 1 To collection.Count
      Set doc = collection.GetNthDocument( i ) 
   
      mailfeld = uidoc.FieldGetText("email1")
      
      MessageBox "Die eMail Adresse Nr. " & i & " lautet " & mailfeld & " und ist vorhanden",1, " E-Mail"
   Next

   MessageBox "ENDE!",1, ""
   Exit Sub
   
End Sub


Gruß und Dank im voraus,
Werner

Offline Christian Kröll

  • Aktives Mitglied
  • ***
  • Beiträge: 197
  • Geschlecht: Männlich
Re: Mit Agent Felder aus Dokumenten auslesen
« Antwort #1 am: 15.09.11 - 08:53:09 »
Guten Morgen Werner,

erst set doc und dann aber uidoc?

Grüße Christian
Christian Kröll

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Mit Agent Felder aus Dokumenten auslesen
« Antwort #2 am: 15.09.11 - 08:55:48 »
doc.feldname(0)

doc.getItemvalue("Feldname")(0)
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline Christian Kröll

  • Aktives Mitglied
  • ***
  • Beiträge: 197
  • Geschlecht: Männlich
Re: Mit Agent Felder aus Dokumenten auslesen
« Antwort #3 am: 15.09.11 - 08:57:53 »
genau das war gemeint...
Christian Kröll

werner16

  • Gast
Re: Mit Agent Felder aus Dokumenten auslesen
« Antwort #4 am: 15.09.11 - 09:12:29 »
Hi,

ok stehe jetzt auf'm Schlauch, sorry.
Bin am herumtesten, aber es will noch nicht so!  ???

Gruß,
Werner




Offline Schnubbel

  • Junior Mitglied
  • **
  • Beiträge: 90
Re: Mit Agent Felder aus Dokumenten auslesen
« Antwort #5 am: 15.09.11 - 09:19:05 »
So würde ich es machen:

Option Public
Use "MyScripts"
Sub Initialize
  
   Err=0
   On Error Resume Next
   MessageBox "START",1, ""
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim collection As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim mailfeld as Variant
   Set db = session.CurrentDatabase
   Set collection = db.AllDocuments

   For i = 1 To collection.Count
      Set doc = collection.GetNthDocument( i )
  
      mailfeld = doc.GetItemValue("email1")

            
      MessageBox "Die eMail Adresse Nr. " & i & " lautet " & mailfeld(0) & " und ist vorhanden",1, " E-Mail"
   Next

   MessageBox "ENDE!",1, ""
   Exit Sub
  
End Sub
Client -> Notesclient 8.5.3
Betriebssystem ->Windows 7
User-> Thorsten :)

werner16

  • Gast
Re: Mit Agent Felder aus Dokumenten auslesen
« Antwort #6 am: 15.09.11 - 09:29:28 »
Hallo Schnubbel,

Dein Script funktioniert, muss es mir nach mal in Ruhe ansehen um es zu verstehen,
habe jetzt leider einen Termin, aber melde mich hier nochmal.

Danke erst mal an alle.  :)

Gruß,
Werner

Offline ata

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Mit Agent Felder aus Dokumenten auslesen
« Antwort #7 am: 15.09.11 - 09:31:18 »
... uidoc greift auf ein im Frontend geöffnetes Dokument zu - du liest aber per Backend - das kann also nicht gehen...

Toni
Grüßle Toni :)

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Mit Agent Felder aus Dokumenten auslesen
« Antwort #8 am: 15.09.11 - 09:32:07 »
WICHTIGER TIPP: IMMER Option Declare hinzufügen... (kann man auch einstellen, dass das automatisch hinzugefügt wird).

1. wird man gezwungen, alle Variablen, die man verwendet zu deklarieren
2. Hättest Du sofort gemerkt, dass uidoc <> doc (weil uidoc eben NICHT deklariert wurde...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Mit Agent Felder aus Dokumenten auslesen
« Antwort #9 am: 15.09.11 - 09:50:41 »
Was machst du, wenn die Mailadresse nict auf (0), sondern auf (1) steht?

Und zu deiner Iteration:

http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/finding-docs1

das ist häufig besser aus Performancegründen

Set collection = db.AllDocuments
set doc = collection.getfirstdocument

For i = 1 To collection.Count
'tu was
set doc = collection.getnextDocment(doc)

Next


edith:
Eknori sagt:

bei View und ViewEntryCollection kannst du das nehmen, nur bei Collection nicht
« Letzte Änderung: 15.09.11 - 09:55:26 von DAU-in »
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline marschul

  • Senior Mitglied
  • ****
  • Beiträge: 280
  • Geschlecht: Männlich
Re: Mit Agent Felder aus Dokumenten auslesen
« Antwort #10 am: 15.09.11 - 09:56:10 »
Noch'n Tipp:

...
For i = 1 To collection.Count
 Set doc = collection.GetNthDocument( i ) 
...
 MessageBox "Die eMail Adresse Nr. " & i & " lautet " & mailfeld & " und ist vorhanden",1, " E-Mail"
Next
...

Dann hoffe mal, dass da nicht tausende Mails enthalten sind, sonst bekommst Du Probleme mit Deinem Klick-Finger  ;)

Und (zwischenzeitlich gibt's den Hinweis bereits):
.getnthdocument geht anfangs schnell, wird aber immer langsamer, da Notes bei jedem Schleifendurchlauf die Collection bis zum Wert durchzählt, deshalb besser z.B.

Code
set doc = collection.getfirstdocument
do until doc is nothing
...Dein Code...
set doc = collection.getnextdocument (doc)
loop
Gruß
Marco

Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß. (Sokrates)
Keiner ist unnütz, er kann immer noch als schlechtes Beispiel dienen. (unbekannt)

werner16

  • Gast
Re: Mit Agent Felder aus Dokumenten auslesen
« Antwort #11 am: 15.09.11 - 10:24:36 »
Hallo,

so jetzt, viele Infos, gehen wir das mal durch:

1)
mailfeld = doc.GetItemValue("email1")
MessageBox "Die eMail Adresse Nr. " & i & " lautet " & mailfeld(0) & " und ist vorhanden",1, " E-Mail"

Wenn ich mit  "mailfeld = doc.GetItemValue("email1")" die Variable deklariere wie so muss ich dann
in der Weiterverarbeitung mit "mailfeld(0)" und nicht "mailfeld" arbeiten?


2)
>>... uidoc greift auf ein im Frontend geöffnetes Dokument zu - du liest aber per Backend - das kann also nicht gehen...

OK, habe ich kapiert!


3)
>> WICHTIGER TIPP: IMMER Option Declare hinzufügen...

stimmt!  ;)


4)
>> Was machst du, wenn die Mailadresse nicht auf (0), sondern auf (1) steht?

Siehe Punkt ein wo ist der Unterschied bei (0) und (1)?  ???


5)
>> Dann hoffe mal, dass da nicht tausende Mails enthalten sind, sonst bekommst Du Probleme mit Deinem Klick-Finger

In der Testdatenbank sind jetzt erst mal nur 9 Dokumente, bzw. zum Testen kann ich ja auch den
Schleifenzähler auf z.B. 9 reduzieren.
In der Endversion fliegt der MessageBox raus, war jetzt nur um zu sehen ob es fuktioniert.


Gruß,
Werner



Offline Schnubbel

  • Junior Mitglied
  • **
  • Beiträge: 90
Re: Mit Agent Felder aus Dokumenten auslesen
« Antwort #12 am: 15.09.11 - 10:36:05 »
1)
Das GetItemValue liefert nunmal immer ein Array zurück. (Steht so auch in der Hilfe) Und du willst ja das erste Element haben aus dem Array , also mailfeld(0). Zu dem was DAU-in gesagt (was man macht wenn es in (1) liegt) hat, kann ich dir leider nichts sagen, bin aber auch gespannt auf eine/dessen Antwort. (wann das denn überhaupt passieren kann)

Thorsten








Client -> Notesclient 8.5.3
Betriebssystem ->Windows 7
User-> Thorsten :)

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Mit Agent Felder aus Dokumenten auslesen
« Antwort #13 am: 15.09.11 - 10:37:12 »
Hallo,

Wenn Du mit doc.GetItemValue(...) Werte aus dem betreffenden Feld ausliest, wird Dir als Ergebnis immer ein Array zurueckgeliefert.
Daher sollte Deine Variable, in die Du den Wert einlesen moechteste immer als Variant deklariert werden.


Andreas

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Mit Agent Felder aus Dokumenten auslesen
« Antwort #14 am: 15.09.11 - 10:39:20 »
@Schnubbel (Thorsten)
Zitat
Zu dem was DAU-in gesagt (was man macht wenn es in (1) liegt) hat, kann ich dir leider nichts sagen, bin aber auch gespannt auf eine/dessen Antwort. (wann das denn überhaupt passieren kann)
Pruefunden einbauen.  ;)


Andreas

Offline Schnubbel

  • Junior Mitglied
  • **
  • Beiträge: 90
Re: Mit Agent Felder aus Dokumenten auslesen
« Antwort #15 am: 15.09.11 - 10:47:54 »
Selbstverständlich sind Prüfungen sinnvoll, das beantwortet aber nicht die Frage, warum denn der Wert in (1) aufeinmal liegen soll. Wann passiert das? Mir ist das (noch) nicht untergekommen.
Client -> Notesclient 8.5.3
Betriebssystem ->Windows 7
User-> Thorsten :)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Mit Agent Felder aus Dokumenten auslesen
« Antwort #16 am: 15.09.11 - 10:52:39 »
Warum sollte das denn nicht passieren können? Du scheinst nur an den ganz simplen Fall zu denken, dass es ein im Frontend existierendes Feld gibt, dass keine Mehrfachwerte erlaubt. Aber soooo simpel ist die Welt des Programmierers ja nun bei weitem nicht!  ;D

Bernhard

Offline Schnubbel

  • Junior Mitglied
  • **
  • Beiträge: 90
Re: Mit Agent Felder aus Dokumenten auslesen
« Antwort #17 am: 15.09.11 - 11:09:45 »
Hallo Bernhard,

ich empfinde eine gewisse Überheblichkeit in deinen Worten. Aber da kann ich mich ja auch täuschen.

Also wenn ich so ein Script wie Werner erstelle, dann weiß ich doch, dass in dem Feld "email1" nur eine E-Mail-Adresse stehen kann. Dafür habe ich doch beim Erstellen des Wertes bereits gesorgt, dass kein Nutzer dort 2 Email-Adressen oder sonstigen Müll hinterlegen kann.

Ich verstand den Einwand von DAU-in so, dass durch irgendeinen Zufall / oder ähnliches Ereignis der Wert in (1) liegt und darauf zielte mein Nachfragen ab. Natürlich können, dann auch Werte in (1) (2) etc. liegen, aber dann ist das von mir als - simpler - Programmierer gewollt.

Thorsten



Client -> Notesclient 8.5.3
Betriebssystem ->Windows 7
User-> Thorsten :)

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Mit Agent Felder aus Dokumenten auslesen
« Antwort #18 am: 15.09.11 - 11:12:36 »
Und was ist, wenn Du das Script in einer datenbank erstellen sollst, die eben NICHT von Dir erstellt wurde.
Woher willst Du in einem solchen Fall wissen, das die Programmierer eben genauso denken wie Du.


Andreas

klaussal

  • Gast
Re: Mit Agent Felder aus Dokumenten auslesen
« Antwort #19 am: 15.09.11 - 11:13:49 »
Zitat
Aber da kann ich mich ja auch täuschen.

Du täuschst Dich.

In der Programmierung sollte man nie "nie" sagen. Irgendwann tritt's doch ein. Und darauf zielte Bernhard ab.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz