Написание агента

  • Автор темы romanko
  • Дата начала
R

romanko

#1
Нужна помощь в написании агента. Есть код представленный ниже, который берет приатачменный файл, который находится в кодировке OEM 866 перегоняется в кодировку вин 1251 и сохраняется в файл в кодировке utf-8. Как этот код переделать, чтобы подкинуть его в агент который должен срабатывать по событию получение нового письма?



Sub Click(Source As Button)
Dim doc As NotesDocument
Dim rtitem As Variant
Dim sourceName As String
Dim uiDoc As NotesUiDocument
Dim ws As New NotesUIWorkspace
Dim result As NotesMIMEEntity
Dim s As New NotesSession
Dim item As notesitem
Dim mystring As String
Dim res As Integer
Dim Tmp1 As String
Dim neoEmbedAttachment As NotesEmbeddedObject
Dim nrimAttachment As NotesRichTextItem
Dim varFilePath As Variant
Dim strFilePath As String
Dim session As New NotesSession
Dim strFieldname As String
Dim rtdoc As Variant
'_________________________достаем путь прикрепленного файла
If doc.GetItemValue("From")(0) <> "CN=Vasya V Pupkin/O=Roga And Copyta" Then
Set uiDoc = ws.CurrentDocument
Set doc = uiDoc.Document
Set result = doc.CreateMIMEEntity
Set rtdoc=doc.GetFirstItem("Files")
If ( rtdoc.type = RICHTEXT ) Then
If Not Isempty(rtdoc.EmbeddedObjects) Then
Set mime = result.CreateChildEntity( )
Forall object In rtdoc.EmbeddedObjects
If (object.Type = EMBED_ATTACHMENT ) Then
filepath =Environ("Temp")+"\"+Cstr(Object.name)
Call object.ExtractFile(filepath)
'____________________________________________________________________

outputFile = Freefile()
fileName$ = "C:\111.xml"
Open fileName$ For Output As outputFile Charset = "UTF-8"

fileNum = Freefile()
Open filepath For Input As fileNum
Do While Not Eof(fileNum)
Line Input #fileNum, MyTmpString
Tmp1 = MyTmpString
res = DosToWin(MyTmpString,Tmp1)
Print #outputFile, Tmp1
Loop

Close outputFile
Close fileNum
Call object.Remove 'удаление прикрепленного файла
'_______________________________________________берем этот файл и приатачеваем его
Set nrimAttachment = doc.GetFirstItem("Files")
Set neoEmbedAttachment = nrimAttachment.EmbedObject( EMBED_ATTACHMENT, "", fileName$)
Set nudWebdoc = ws.CurrentDocument
Set ndocBackWebdoc = nudWebdoc.Document
strFieldname = uidoc.CurrentField
Set nrimAttachment = doc.GetFirstItem("Files")
If session.NotesBuildVersion >= 190 Then
nrimAttachment.Update
Else
Call doc.ComputeWithForm(True, False)
End If
Set Doc = uiDoc.Document
Call doc.Save( True, True )
doc.SaveOptions = "0"
Call uidoc.Close(True)
Set uidocNew = ws.EditDocument(True, ndocBackWebdoc, , , , True)
Delete uidoc
uidocNew.Document.RemoveItem("SaveOptions")
If strFieldname <> "" Then uidocNew.GotoField(strFieldname)

Kill "C:\111.xml" ' удаляет файл с винта

End If
End Forall
End If
End If


End Sub
 
R

romanko

#2
Нужна помощь в написании агента. Есть код представленный ниже, который берет приатачменный файл, который находится в кодировке OEM 866 перегоняется в кодировку вин 1251 и сохраняется в файл в кодировке utf-8. Как этот код переделать, чтобы подкинуть его в агент который должен срабатывать по событию получение нового письма?
Впринципе, вот так должно работать
Код:
Sub Initialize

Dim session As New NotesSession

Set db = session.CurrentDatabase	
Set collection = db.UnprocessedDocuments 
Set doc = collection.GetFirstDocument 

Call session.UpdateProcessedDoc( doc ) 
If doc.GetItemValue("From")(0) <> "CN=Vasya V Pupkin/O=Roga And Copyta" Then
Set rtitem = doc.GetFirstItem( "Files" ) 
If (Isarray(rtitem.EmbeddedObjects)) Then 
Forall object In rtitem.EmbeddedObjects
If (object.Type = EMBED_ATTACHMENT ) Then
filepath = Environ("Temp")+"\"+Cstr(Object.name)
Call object.ExtractFile(filepath)
'________________________________________________________________				
outputFile = Freefile() 
fileName$ = "C:\peredelal.xml"
Open fileName$ For Output As outputFile Charset = "UTF-8"

fileNum = Freefile() 
Open filepath For Input As fileNum
Do While Not Eof(fileNum)
Line Input #fileNum, MyTmpString
Tmp1 = MyTmpString
res = DosToWin(MyTmpString,Tmp1)
Print #outputFile, Tmp1

Loop

Close outputFile
Close fileNum

Call object.Remove 'удаление прикрепленного файла
Call doc.Save( True, True )	
'____________________________________________________________________________
_				

Dim rtitem1 As NotesRichTextItem

Set db = session.CurrentDatabase
Set doc = collection.GetFirstDocument 

Set rtitem1 = doc.GetFirstItem("Files")
Set object = rtitem1.EmbedObject _
( EMBED_ATTACHMENT, "", fileName$)
Call doc.Save( True, True )
'______________________________________________________________________

Kill	"C:\peredelal.xml" ' удаляет файл с винта


End If
End Forall
End If

End Sub

Declarations :
Declare Function DosToWin Lib "User32" Alias "OemToCharA" (Byval lpAnsiStr As String, Byval lpOemStr As String) As Integer
Dim doc As NotesDocument 
Dim db As NotesDatabase 
Dim rtitem As Variant 
Dim collection As NotesDocumentCollection 
Dim neoEmbedAttachment As NotesEmbeddedObject
Если найдете какие-то ошибки подскажите.Потому что проверить пока немогу.((
Dim nrimAttachment As NotesRichTextItem
 
R

romanko

#3
Не срабатывает этот код ложится прям вот тут
Dim doc As NotesDocument
Dim db As NotesDatabase
Dim rtitem As Variant
Dim collection As NotesDocumentCollection
Dim neoEmbedAttachment As NotesEmbeddedObject
Dim nrimAttachment As NotesRichTextItem
Dim view As NotesView

Set db = session.CurrentDatabase
Set view = db.GetView("($Inbox)")
Set collection = db.UnprocessedDocuments
Set doc = collection.GetFirstDocument

If doc.GetItemValue("tmpDisplaySentBy")(0) <> "CN=От кого письмо" Then ВОТ СДЕСЬ ПИШЕТ ЧТО object variable not set
Call session.UpdateProcessedDoc( doc )
Set rtitem = doc.GetFirstItem( "Body" )

подскажите пожайлуста что с этим делать как правельно задавать переменную doc.
 

Omh

Lotus team
04.07.2007
2 210
1
#4
romanko
Какой Target у документа?
Сколько возвращает collection.count?
 
R

romanko

#5
romanko
Какой Target у документа?
Сколько возвращает collection.count?
collection.count возвращает 0
collection [0, False, ""]

Добавлено:
collection.count возвращает 0
collection [0, False, ""]
Ну это если он один документ лежит во входящих, тоесть он пропускает первый. И как его заставить отрабатывать на событие прихода сообщения?
 
O

oshmianski

#10
romanko
чего хочется сделать то?

Если не ошибаюсь, то для обработки пришедшего письма нужно:
1. использовать событие "Before new mail arrives"
2. документ получать как notesSession.DocumentContext
 

nvyush

Lotus team
22.04.2009
2 317
0
#11
Если не ошибаюсь, то для обработки пришедшего письма нужно:
1. использовать событие "Before new mail arrives"
2. документ получать как notesSession.DocumentContext
При использовании события "Before new mail arrives" имеются ограничения и в контексте задачи (детачить вложение) лучше всё-таки использовать "After new mail has arrived" + set docs = notesDatabase.UnprocessedDocuments
 
R

romanko

#12
romanko
чего хочется сделать то?

Если не ошибаюсь, то для обработки пришедшего письма нужно:
1. использовать событие "Before new mail arrives"
2. документ получать как notesSession.DocumentContext
Хочется чтобы агент отрабатывал после прихода письма. но он почему-то неотрабатывает.Если запустить его принудительно то он все делает как надо а вот по событию нехочет.

Добавлено:
При использовании события "Before new mail arrives" имеются ограничения и в контексте задачи (детачить вложение) лучше всё-таки использовать "After new mail has arrived" + set docs = notesDatabase.UnprocessedDocuments
Так оно все так и написано и стоит после получения почты но почему-то неатрабатывает?когда письмо приходит то ничего не происходит.