Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: robertpp am 14.04.03 - 07:36:54
-
Ich hab ein kleines Problem mit diesem Agent!!!
Er funktioniert nicht richtig!!! Erst wenn ich im Designer in den Agent reingehe und dann speichern sag dann versendet er mir mails er soll aber jede nacht laufen!
Kann mir wer helfen und mir sagen was ich falsch gemacht habe!
Danke robertpp
Dim s As New NotesSession
Dim db As NotesDatabase
Set db = s.CurrentDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim memo As NotesDocument
Dim rtitem As NotesRichTextItem
Dim umstellgrund As String
Set view=db.GetView("To Do")
Set doc=view.GetFirstDocument
Do Until doc Is Nothing
If Isempty (doc.Umstellungsgrund) Then
umstellgrund =" "
Else
umstellgrund = doc.Umstellungsgrund(0)
End If
If doc.Status(0) = "1.) new" Or doc.Status(0) = "2.) in work" Then
If doc.EndTime(0) +1 = Date Then
Set memo =db.CreateDocument
With memo
.Form="Memo"
.Subject="To Do entry ''"+ doc.beschreibung(0) + "'' to finish"
.SendTo=doc.who
Set rtitem = memo.CreateRichTextItem( "Body" )
Call rtitem.AppendText("Your To-Do-entry ''" + doc.beschreibung(0) + "'' should have been finished until today. Please finish the job or make an update of the enddate ")
Call rtitem.AddNewLine(2)
Call rtitem.AppendText("Subject: "+ umstellgrund+ "")
Call rtitem.AddNewLine(2)
Call rtitem.AppendDocLink(doc,doc.beschreibung(0))
Call memo.Send(False)
End With
Delete memo
Set memo =db.CreateDocument
With memo
.Form="Memo"
.Subject="To Do entry ''"+ doc.beschreibung(0) + "'' to finish"
.SendTo=doc.whom
Set rtitem = memo.CreateRichTextItem( "Body" )
Call rtitem.AppendText("The To-Do-entry ''" + doc.beschreibung(0) + "'' from ''" + doc.who(0) + "'' should have been finished until today")
Call rtitem.AddNewLine(2)
Call rtitem.AppendText("Subject: "+ umstellgrund+ "")
Call rtitem.AddNewLine(2)
Call rtitem.AppendDocLink(doc,doc.beschreibung(0))
Call memo.Send(False)
End With
Delete memo
Elseif doc.EndTime(0) = Date Then
Set memo =db.CreateDocument
With memo
.Form="Memo"
.Subject="To Do entry ''"+ doc.beschreibung(0) + "'' to finish"
.SendTo=doc.who
Set rtitem = memo.CreateRichTextItem( "Body" )
Call rtitem.AppendText("Don't forget to finish your todo-entrie ''" + doc.beschreibung(0) + "'' today ")
Call rtitem.AddNewLine(2)
Call rtitem.AppendText("Subject: "+ umstellgrund+ "")
Call rtitem.AddNewLine(2)
Call rtitem.AppendDocLink(doc,doc.beschreibung(0))
Call memo.Send(False)
End With
Delete memo
End If
End If
Set doc=view.getnextdocument(doc)
Loop
End Sub
-
... was sagt das protokoll des agenten ?
server eingetragen, wo der agent laufen soll ?
-
das Protokoll sagt :
Agent 'sendtofinish' wurde am 14.04.2003 04:00:11 gestartet
Bearbeitet alle Dokumente in der Datenbank: insgesamt 1495
1495 Dokumente gefunden, die die Suchkriterien erfüllen
LotusScript Code ausgeführt
Agent 'sendtofinish' wurde am 14.04.2003 04:00:15 beendet
Kann mir nicht vorstellen das der agent in 4 sec fertig ist!! Da passt irgenwas nicht!! Wenn ich ihn aber händisch aufrufe dann geht er!!!
robertpp
-
hm...hast Du eine Default View definiert im Designer? Wenn man mit DocLinks arbeitet, benötigt Notes unbedingt so eine View.
-
Ich behelfe mir in solchen Situationen immer damit, daß ich Protokolleinträge erzeugr, die mir dann AUfschluß darüber geben, ob der Agent an einer bestimmten Stelle überhaupt irgend etwas macht.
http://www.atnotes.de/index.php?board=9;action=display;threadid=3043;start=0
Dann kann ich zumindest testen, ob der Agent in ein IF reingeht, oder nicht.
Der Fehler läßt sich damit recht schnell finden. Ist auch ganz nützlich, wenn im produltiven mit "richtigen Daten" gearbeitet wird und dann trotz fehlerfreiem Testlauf des Agenten Probleme auftreten.
Kann man natürlich auch mit der NoteLOG class lösen :D
eknori
-
die "to do" ansicht ist die Default view in der ich arbeite!!
Aber sonst hab ihr ab script keinen fehler gefunde?
ich glaub nämlich das mit dem Code:
Do Until doc Is Nothing
If Isempty (doc.Umstellungsgrund) Then
umstellgrund =" "
Else
umstellgrund = doc.Umstellungsgrund(0)
End If
irgendwas nicht passt!! wenn im Umstellungsgrund nichts drinnen steht dann hat er mir den code abgebrochen! und wenn ich hier:
umstellgrund = doc.Umstellungsgrund(0)
nicht direkt auf array (0) zugreife dann geht es auch nicht!!!
robertpp
-
... man kann das auch über das Feld abprüfen
If doc.HasItem("Feldname") Then...
... wenn ein Feld existiert, dann ist es immer als Array ansprechbar, und mit
If Fulltrim(Cstr(doc.Feldname(0))) = "" Then...
... kann man überprüfen, ob auch wirklich nichts drin war...
ata
-
Ich glaub ich weiß eines der probleme warum das nicht geht!! ich hab aus dem Richtextfeld "Umstellungsgrund" ein Textfeld gemacht und da liegt jetzt das problem!! Ich hab auch schon probiert mit "computedwithform" das feld zu aktualisieren aber bei machen docs geht das nicht!! Zweite variante was ich probiert habe ist das doc im forntend zu öffnen und dann wieder speichern das geht aber auch nicht bei allen docs! jetzt weiß ich nicht mehr weiter!!
gibt es sonst noch eine möglichkeit das feld in ein textfeld umzuwandeln?
robertpp
-
... das Feld initialisieren
Dim ws As New NotesUIWorkspcae
Dim docThis As NoteDocument
Dim rtItem As NotesRichtTextItem
Dim sText As String
Set docThis = ws.CurrentDocumentDocument
Set rtItem = docThis.GetFirstItem("FeldName")
If rtItem.Type = 1 Then ' # es handelt sich um ein Richtextfeld
sText = rtItem.Text
Call rtItem.Remove
doc.Feldname = sText
doc.IsSummary = True
End If
ata
-
Ich hab das ganze jetzt so erweitert ! wenn bei ersten durchlaufen das feld kein RTF ist dann springt er mir zu nextdoc: aber wenn beim zweiten durchlaufen das feld wieder kein RTF ist dann gibt er mir Type Missmatch zurück!!
Es ist nämlich so das manche doc's das Feld schon als Textfeld gespeichert haben!!
Dim s As New NotesSession
Dim doc As NotesDocument
Dim db As NotesDatabase
Dim rtItem As NotesRichTextItem
Dim sText As String
Dim view As NotesView
Set db =s.CurrentDatabase
Set view = db.GetView("To Do")
Set doc = view.GetFirstDocument
On Error Goto nextdoc
Do Until doc Is Nothing
Set rtItem = doc.GetFirstItem("Umstellungsgrund")
If rtItem.Type = 1 Then ' # es handelt sich um ein Richtextfeld
sText = rtItem.Text
Call rtItem.Remove
doc.Umstellungsgrund = sText
doc.IsSummary = True
End If
Call doc.Save(True, False)
nextdoc:
Set doc = view.GetNextDocument(doc)
Loop
was mach ich falsch?
robertpp
-
... ich sehe gerade noch einen Fehler von mir doc.IsSummary macht keinen Sinn - das müßte wenn, dann auf das Feld gemünzt sein...
... Überprüfe, ob es das Feld gibt... doc.HasItem...
... den Speicherbefehl würde ich zur Aktualisierung in die Überprüfung packen, da sonst alle Dokumente gespeichert werden - und das ist unnötig...
ata
-
danke ich hab das jetzt wie gesagt mit hasitem gelöst!!
jetzt muss ich halt mal den agent starten und schaun ob der funktioniert!!
Hat Sonst jemand ein problem beim agent entdeckt warum er nicht funkt?
robertpp