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

Тема в разделе "Lotus - Программирование", создана пользователем romanko, 9 сен 2011.

  1. romanko

    romanko Гость

    Нужна помощь в написании агента. Есть код представленный ниже, который берет приатачменный файл, который находится в кодировке 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
     
  2. romanko

    romanko Гость

    Впринципе, вот так должно работать
    Код (LotusScript):
    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
     
  3. romanko

    romanko Гость

    Не срабатывает этот код ложится прям вот тут
    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.
     
  4. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    romanko
    Какой Target у документа?
    Сколько возвращает collection.count?
     
  5. romanko

    romanko Гость

    collection.count возвращает 0
    collection [0, False, ""]

    Добавлено:
    Ну это если он один документ лежит во входящих, тоесть он пропускает первый. И как его заставить отрабатывать на событие прихода сообщения?
     
  6. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Ты вообще смотрел свойства агента, в частности, Target?
     
  7. romanko

    romanko Гость

    Там стоит событие после получения почты. а что не так?
     
  8. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Тогда хорошо :)
     
  9. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    А точно после получения почты (After new mail has arrived), а не до (Before new mail arrives)?
     
  10. oshmianski

    oshmianski Гость

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

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

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    При использовании события "Before new mail arrives" имеются ограничения и в контексте задачи (детачить вложение) лучше всё-таки использовать "After new mail has arrived" + set docs = notesDatabase.UnprocessedDocuments
     
  12. romanko

    romanko Гость

    Хочется чтобы агент отрабатывал после прихода письма. но он почему-то неотрабатывает.Если запустить его принудительно то он все делает как надо а вот по событию нехочет.

    Добавлено:
    Так оно все так и написано и стоит после получения почты но почему-то неатрабатывает?когда письмо приходит то ничего не происходит.
     
  13. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    romanko
    Кем подписан агент, от чьего имени запускается?
     
  14. romanko

    romanko Гость

    Подписан менеджером бд на которой стоит. А как должно быть я просто в первый раз ставлю агент.
     
  15. romanko

    romanko Гость

    а на бд mail.box агенты вообще никак не работают, тоесть его ни как не запустиш?
     
  16. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Так Вы это в mail.box агента запихнуть пытаетесь :) ?
     
  17. romanko

    romanko Гость

    Да. И что никак с этим не справиться?
     
Загрузка...
Похожие Темы - Написание агента
  1. wellsun
    Ответов:
    0
    Просмотров:
    128
  2. vladis222
    Ответов:
    1
    Просмотров:
    626
  3. smailvolf
    Ответов:
    1
    Просмотров:
    1.036
  4. faissullin
    Ответов:
    0
    Просмотров:
    1.090
  5. IseLL
    Ответов:
    1
    Просмотров:
    997

Поделиться этой страницей