печать документов из вида

Тема в разделе "Lotus - Программирование", создана пользователем deeeman, 18 авг 2010.

  1. deeeman

    deeeman Well-Known Member

    Регистрация:
    4 дек 2007
    Сообщения:
    382
    Симпатии:
    0
    Привет!

    Есть вид в почтовой бд "Входящие". В клиенте по кнопке из этого вида делается обработка коллекции имеющихся в этой папке документов и выводиться на печать документы и аттачи (если есть). одним разом нужно обработать все документы.

    Затор в том, что при перебирании документов, иногда у скрипка сносит крышу и он посылает на печать не те документы.

    Решал:
    -дополнительными задержками (тупо цикл по всем документам базы с сохранением)
    -через таймер, по 5 документов посылаю через 5 секунд

    не решает проблему, она возникает непонятно от куда, закономерности нет, выводит на печать левое.

    код такой:

    Код (LotusScript):
    flagP = False
    Set doc = uiDoc.Document
    Set doc = view.GetFirstDocument
    While Not doc Is Nothing

    'отправляем в другую папку
    Set doc1 = db.getDocumentbyUNID(id)
    If doc1 Is Nothing Then
    If flagP Then
    Call doc1.PutInFolder("Распечатанные")
    Else
    Call doc1.PutInFolder("Не распечатанные")
    End If
    Call doc1.RemoveFromFolder("($Inbox)")
    End If

    flagP = False

    if (выполнены условия) then

    'ставим флаг что печатаем
    flagP = True

    Set uidoc = ws.EditDocument(True,doc,True)

    Call StopF()

    Call uiDoc.Print(1)

    Call StopF()

    uidoc.Close True       


    Call StopF()

    'печатаем вложения .doc  если есть

    'если не выполнены условия
    Else
    'что то делаем
    End If     

    'запоминаем документ
    id = doc.UniversalID

    Set doc = view.GetNextDocument(doc)
    Wend
     
  2. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    А что если не открывать каждый документ и сделать так:
    Код (Text):
    Dim ws As New NotesUIWorkspace
    Dim uiview As NotesUIView
    Dim doc As NotesDocument

    Set uiview = ws.CurrentView
    Set doc = uiview.View.GetFirstDocument()
    Do Until (doc Is Nothing)
    Call uiview.SelectDocument(doc)
    Call uiview.Print(1)

    Set doc = uiview.View.GetNextDocument(doc)
    Loop
    Можно было бы выделить все документы и обойтись без Call uiview.SelectDocument(doc)
     
  3. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    странно это как-то)

    Добавлено: и это
    получается, последний документ коллекции не попадает в нужную папку???
     
  4. deeeman

    deeeman Well-Known Member

    Регистрация:
    4 дек 2007
    Сообщения:
    382
    Симпатии:
    0
    Medevic

    Код (LotusScript):
     Call uiview.SelectDocument(doc)
    Call uiview.Print(1)
    за это спс! но дело наверное не в этом...

    OKEN
    >получается, последний документ коллекции не попадает в нужную папку???

    спасибо! Но фиг с ним с последним.. дело в другом...


    Такая мура твориться в базе:
    я тут нашел документ в котором есть аттач но в папке "Входящие" он не отображен как документ с аттачем(не показыватеся значек скрепка.)
    у него есть поле $File

    далее проверяю его скриптом,

    -Если этот документ в виде один, то скрипт видит аттач (методы: Evaluate({@AttachmentNames},doc) и doc.HasEmbedded работают )
    -Если в виде несколько документов и этот документ первый то все ок
    -Если в виде несколько документов и этот документ НЕ первый то все печально! методы показывают что нет там ничего аттачного...

    как быть?
     
  5. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    мб какие-то проблемы именно с кодом, не тот doc в последнем случае получаете (если обработка ошибок есть какая-то или переходы по меткам)? Или, может, при открытии документа теряется аттач?
    возможно это связанно с проверками, которые вы не указали, но я думаю, что можно перекидывать в папку (кусок 'отправляем в другую папку) сразу после получения следующего док-та из папки, перед концом цикла Wend? или сразу получать следующий док-т и перекидывать текущий doc...
     
  6. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    скрепка не будет отображаться на письмах с майм вложениями (индусы не знали об этом :) )
    http://codeby.net/ipb.html?s=&sh...st&p=175812
    вот это может помочь
    аттачнэм нужен с (0)
     
  7. deeeman

    deeeman Well-Known Member

    Регистрация:
    4 дек 2007
    Сообщения:
    382
    Симпатии:
    0
    lmike

    странно но это не помогло... все методы перечисленные ниже показывают пусто, хотя аттач явно есть в документе. и поле $File не пусто и еще название аттача прописывается в самом конце поля Body

    doc.HasEmbedded
    res = Evaluate({@AttachmentNames(0)},doc)
    doc.GetItemValue("$File")(0)

    Даже когда документ 1 в папке

    код:

    Код (Text):
    Set doc = view.GetFirstDocument
    While Not doc Is Nothing

    res = Evaluate({@AttachmentNames(0)},doc)

    Msgbox "doc.HasEmbedded=" & doc.HasEmbedded

    Msgbox "$File=" & doc.GetItemValue("$File")(0)

    Msgbox "Join(res)=" & Join(res)

    'Нет аттачей
    If Join(res) = "" Then
    Msgbox "Нет аттачей"
    End If     

    Set doc = view.GetNextDocument(doc)

    Wend
     
  8. deeeman

    deeeman Well-Known Member

    Регистрация:
    4 дек 2007
    Сообщения:
    382
    Симпатии:
    0
    Причем, получается такая фишка с документом:

    если смотреть свойства полей из вида, то поля $File нет, если документ открыть то поле появляется. (и если документ пересохранить вручную то аттач будет нормальный)
    т е по видимому документ приходит из вне в каком то непонятном для лотуса виде, и аттач не виден.

    как можно это победить? пробовал сделать:

    Код (LotusScript):
    Call doc.ComputeWithForm(False,False)
    Call doc.Save(True,True)
    но документ не хотит пересохраняться скриптом.
    как можно превратить его в нормальный вид?
     
  9. deeeman

    deeeman Well-Known Member

    Регистрация:
    4 дек 2007
    Сообщения:
    382
    Симпатии:
    0
    товарисчи!

    как определить что письмо типа майм?
    есть какое то отличие от обычного письма??

    еще когда его открываю появляется сообщение в логе:
    Begin MIME to CD Conversion (Process: ? (00000E04:00000002), Database: ***.nsf, Note: 00017D62)

    скрипт упорно не видит у них аттачи, приходиться открывать их в uiDoc и пересохранять(скриптом.все мелькает)... но это идиотизм... ИМХО
     
  10. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.021
    Симпатии:
    8
    Хммм, а это часом не inline attachment? Тогда все хуже...
    Посмотрите в свойствах док-та поля Body - там данные в формате MIME (есть строки типа "BOUNDARY=", "content-type"?) или обычный текст?
     
  11. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
  12. deeeman

    deeeman Well-Known Member

    Регистрация:
    4 дек 2007
    Сообщения:
    382
    Симпатии:
    0
    Мыш

    поле боди содержит 4 куска текста см ниже:

    Field Name: Body
    Data Type: MIME Part
    Data Length: 148 bytes
    Seq Num: 1
    Dup Item ID: 4
    Field Flags: SIGN SEAL

    "Content-Type: multipart/mixed;
    boundary="------------050605060400090104000808"

    This is a multi-part message in MIME format."


    но скриптом то это не видно... а надо бы увидеть хотя бы. как мне определить скриптом, что именно этот документ содержит майм и его надо конвертнуть?


    nvy

    т е нужно просто все документы конвертнуть в рт? а не пофигачиться ли при этом часть инфы?
    стили уже пофигачились... без этого никак? можно как то отобрать те документы которые нужно конвертить? чтобы минимизировать потери...
     
  13. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.021
    Симпатии:
    8
    Код (LotusScript):
    Dim ss As New NotesSession
    ss.ConvertMIME= false
     
  14. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    ну яж грил - маймы, для индусов, это что-то... ;)
    мобуть сделать скрипт, кот. будет дергать из маймов аттачи...?
     
  15. deeeman

    deeeman Well-Known Member

    Регистрация:
    4 дек 2007
    Сообщения:
    382
    Симпатии:
    0
    Господа!

    помог этот волшебный код: (ссыль)
    спс nvy и автор кода: ToxaRat


    Код (LotusScript):
    Function ConvertRTDoc(Doc As NotesDocument) As String ' Конверт Mime в РТ
    '   ses.ConvertMIME = False
    Dim mime As NotesMIMEEntity, v1 As Variant
    Set mime = doc.GetMIMEEntity
    v1 = ""
    If Not(mime Is Nothing) Then
    Call mime.DecodeContent
    v1 = mime.ContentAsText
    End If
    If Len(v1)>64000 Then v1 = Left(v1, 64000)
    Let Doc.ReplaceItemValue("Body2", v1).Issummary = False
    ConvertRTDoc = v1
    '   ses.ConvertMIME = True
    End Function

    им можно конвертить все подряд, хоть и есть потери стиля и значков аттачей, переживут, но зато документ превращается хоть во что то родное =))
     
Загрузка...

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