Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Don Pasquale am 17.01.03 - 09:14:16
-
Hallo liebe Notes Gemeinde
ich benötige einen Agenten, der alle Dokumente in der INBOX bearbeitet.
Da ich in diesem Agenten auch Routinen aus einer Library benutzen möchte, sollte der Agent in LScript geschrieben sein.
Im Agent habe ich bei
"Für welche Dokumente soll der Agent gelten"
die Inbox angeben.
Aber wie muß nun die Collection in Skript
aussehen ?
Dim Bearbeiter As String
Dim Status As String
Dim ws As New NotesUiWorkspace
Dim Session As New NotesSession
Dim view As NotesView
Dim dc As NotesDocumentCollection
Dim db As NotesDatabase
Set uidoc = ws.CurrentDocument
Set session = New notessession
Set db = session.CurrentDatabase
WAS KOMMT NUN HIERHIN ????????????
' Set view = db.GetView( $INBOX )
' Set dc=db.UnprocessedDocuments
' Set dc = view.GetAllDocumentsByKey(IDENT, True)
Set doc = dc.GetFirstDocument
While Not (doc Is Nothing)
Dim ID As String
ID = doc.FieldGetText("e4ihk_Identnummer")
If ID <>"" Then
Status = IST_STATUS_VON_ID(uidoc.FieldGetText("e4ihk_Identnummer"))
End If
Set item = doc.ReplaceItemValue("e4fld_Status", Status)
Call uidoc.save
Call uidoc.close
Call doc.RemoveFromFolder("($Inbox)")
End If
Set doc = dc.GetNextDocument(doc)
Wend
-
... da sind einige Fehler drin
Set view = db.GetView( $INBOX )
... Set view = db.GetView( "($Inbox)" ) ' # in Anführungszeichen
... ob du die markierten Dokumente mit UnprocessedDocuments holst, oder bestimmte Dokumente per Key liegt an deiner Vorgehensweise,
Set dc = view.GetAllDocumentsByKey(IDENT, True)
... jedoch ist der IDENT noch nicht bekannt...
ID = doc.FieldGetText("e4ihk_Identnummer")
... das geht schief, da dies eine uidoc.Methode ist. Ich würde an deiner Stelle versuchen auf das Frontend zu verzichten, und den Wert per Backend ziehen - der Agent kennt kein Frontend...
IST_STATUS_VON_ID(uidoc.FieldGetText("e4ihk_Identnummer"))
... hier gilt das bereits gesagte...
ata
-
@ata:
Ich möchte den Agenten eigentlich über
ALLE Dokumente der INBOX laufen lassen
Bisher lasse ich ihn über alle Dokumente
der Datenbank laufe, aber dass kann
ewig dauern.
Ciao
Don Pasquale
-
... grundsätzlich ist dein Ansinnen ja möglich, abgesehen von den Schwachstellen...
ata
-
@ata :
Er sieht nun derart aus :
Dim ws As New NotesUiWorkspace
Dim Session As New NotesSession
Dim view As NotesView
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim dc As NotesDocumentCollection
Dim db As NotesDatabase
Set uidoc = ws.CurrentDocument
Set session = New notessession
Set db = session.CurrentDatabase
Dim Bearbeiter As String
Dim item As NotesItem
Dim ID As Variant
Dim INDEX As Variant
Dim UNGELOESCHT As Variant
Dim Status As String
Set view = db.GetView( "_AGENT" )
Set dc = view.GetAllDocumentsByKey("True", True)
Set doc = dc.GetFirstDocument
While Not (doc Is Nothing)
INDEX = doc.GetItemValue("e4fld_Indexiert")
If INDEX(0) <> "TRUE" Then
ID = doc.GetItemValue("e4ihk_Identnummer")
If ID(0) <>"" Then
GELOESCHT = doc.GetItemValue("e4fld_Geloescht")
If GELOESCHT(0) = "" Then
Bearbeiter = IST_BEARBEITER_VON_ID( ID(0))
If Bearbeiter <> "" Then
Set item = doc.ReplaceItemValue("e4ihk_Initiator", Bearbeiter)
Status = IST_STATUS_VON_ID( ID(0))
End If
Set item = doc.ReplaceItemValue("e4fld_Indexiert", "True")
Set item = doc.ReplaceItemValue("e4fld_Status", Status)
Set item = doc.ReplaceItemValue("e4fld_AGENT", "False")
Call doc.save(True,True,True)
Call doc.RemoveFromFolder("($Inbox)")
End If
End If
End If
Set doc = dc.GetNextDocument(doc)
Wend
-
... sieht auf die schnelle gut aus...
... noch ein Tip: Wenn du in den Options die Zeile "Option Explizit" einfügst, dann passiert das mit den nicht deklarierten Variablen nicht, denn dann mußt du alles eindeutig deklarieren - ich mach das immer...
ata
-
@ata: Das mit dem Explizit ist ein guter Tipp ( und eine selbsterzieherische Maßnahme)
Zweite Frage :
Ich möchte diesem Agenten vopn einem andren Agenten aus anstossen, bekomme aber die Meldung dass dieser Agent
nur von einem Ansichtfenster aus gestartet werden darf.
Gibt es eine Möglichkeit diesen Agenten dennoch von einem
anderen Agenten aus starten zu lassen ?
Ciao
Don Pasquale
-
yep
den Agenten der gestartet werden soll muss in den Eigenschaften
"When should this Agent run?" auf "Manually from Agent List" gesetzt werden
cu
-
yep
den Agenten der gestartet werden soll muss in den Eigenschaften
"When should this Agent run?" auf "Manually from Agent List" gesetzt werden
cu
@Performance
Es ist genau diese Einstellung, bei der die Fehlermeldung kommt. :(
Wieso hat diese Zeile keinen Effekt ?
@Command([ToolsRunMacro];"(e4AgentIndex)" )
Der Agent wird und wird _nicht_ ausgelöst.
Alles sehr verwirrend
Ciao
Don Pasquale
-
- entweder Du übersetzt das falsch ins deutsche und stellst den Agent so ein, daß er aus einer Aktion gestartet wird. Es muss lauten "manuell aus der Liste der Agenten". Ich bin 100% sicher, daß dies nicht so bei Dir drin steht, bzw. der erste Agent ist, der diese Fehlermeldung erzeugt und Du das vermeintlich auf den 2.Agent schiebst
- oder Du hast ganz unten rechts stehen "Docs in Ansicht auswählen"
- oder Du hast Dich verschrieben irgendwo