1. Мегаконкурс в апреле "Приведи друзей на codeby". Дарим деньги, подписку на журнал хакер и выдаем статус "Paid Access". Подробнее ...

    Скрыть объявление

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

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

Наш партнер Genesis Hackspace
  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.445
    Симпатии:
    8
    странно это как-то)

    Добавлено: и это
    получается, последний документ коллекции не попадает в нужную папку???
     
  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.445
    Симпатии:
    8
    мб какие-то проблемы именно с кодом, не тот doc в последнем случае получаете (если обработка ошибок есть какая-то или переходы по меткам)? Или, может, при открытии документа теряется аттач?
    возможно это связанно с проверками, которые вы не указали, но я думаю, что можно перекидывать в папку (кусок 'отправляем в другую папку) сразу после получения следующего док-та из папки, перед концом цикла Wend? или сразу получать следующий док-т и перекидывать текущий doc...
     
  6. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.216
    Симпатии:
    309
    скрепка не будет отображаться на письмах с майм вложениями (индусы не знали об этом :) )
    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. Мыш

    Мыш Well-Known Member
    Lotus team

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

    nvyush Well-Known Member
    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. Мыш

    Мыш Well-Known Member
    Lotus team

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

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.216
    Симпатии:
    309
    ну яж грил - маймы, для индусов, это что-то... ;)
    мобуть сделать скрипт, кот. будет дергать из маймов аттачи...?
     
  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

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

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