Проверка вложения файлов определённых расширений

Тема в разделе "Lotus - Программирование", создана пользователем k85, 16 ноя 2012.

  1. k85

    k85 Well-Known Member

    Регистрация:
    11 окт 2011
    Сообщения:
    137
    Симпатии:
    0
    Что делаю не так. Перед сохранением документа проверяю поле вложения на формат файлов

    Код (Text):
    Set rtitem = BackEndDoc.GetFirstItem( "Body" )
    If Not (rtitem Is Nothing) Then
    If ( rtitem.Type = RICHTEXT ) Then
    If Isempty(rtitem.EmbeddedObjects) Then
    Print "Вложения нет..."
    Exit Sub
    End If
    Forall o In rtitem.EmbeddedObjects
    If Right$(o.Name,4) = ".doc" Then
    ….
    Else
    Messagebox "нельзя использовать формат"
    Continue=False
    Exit Sub
    End If
    End Forall
    End If
    End If
    но вкладываю файл не того формата, сохраняю файл и не ругается, открываю документ, пытаюсь сохранить ругается на вложение. Потом удаляю файл вкладываю верный - ОК, не вырный вкладываю после удаления файла из поля - ОК не ругается ?! Почему?
    Как сделать, чтоб он проверял поле при удалении и при новом вложении
    При удалении одного вложения и вставки нового переходит на строку If Isempty(rtitem.EmbeddedObjects) Then
    Print "Вложения нет..."
     
  2. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Изменения RT поля происходят после сохранения, прими это мой юный друг...

    Сделай функцию с таким кодом:
    Код (LotusScript):
    Sub RefreshRT(pUIDoc As NotesUIDocument)
    Dim doc As NotesDocument
    Set doc = pUIDoc.Document
    Dim rti As New NotesRichTextItem(doc, doc.UniversalID)
    Call rti.CopyItemToDocument(doc, doc.UniversalID & "_")
    Call rti.Remove()
    Call doc.RemoveItem(doc.UniversalID & "_")
    Dim ws As New NotesUIWorkspace
    Call ws.EditDocument(True, doc)
    Call doc.ReplaceItemValue("SaveOptions", "0")
    Call pUIDoc.Close()
    End Sub
    Вызывай ее после добавления вложения или перед проверкой, посмотри что получится.
     
  3. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    мда... покровительственно-то как...
     
  4. nvyush

    nvyush Lotus team
    Lotus team

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

    RAJ Well-Known Member

    Регистрация:
    17 янв 2007
    Сообщения:
    440
    Симпатии:
    0
    а если список вложений брать так:
    Код (Text):
    Dim res as Variant
    .....
    'разрешенные расширения файлов doc и pdf
    res = Evaluate({@RightBack(@AttachmentNames;".")*="doc":"pdf"}, BackEndDoc)
    if res(0)<>1 then
    Messagebox "нельзя использовать формат"
    Continue=False
    end if
    .....
     
  6. k85

    k85 Well-Known Member

    Регистрация:
    11 окт 2011
    Сообщения:
    137
    Симпатии:
    0
    спасибо за ответы, но не могу все равно понять...
    оставиляю на QuerySave:
    Код (Text):
    Set rtitem = BackEndDoc.GetFirstItem( "Body" )
    If Not (rtitem Is Nothing) Then
    If ( rtitem.Type = RICHTEXT ) Then

    Call RefreshRT(Source)

    If Isempty(rtitem.EmbeddedObjects) Then
    Print "Вложения нет..."
    Exit Sub
    End If
    Forall o In rtitem.EmbeddedObjects
    If Right$(o.Name,4) = ".doc" Then
    ….
    Else
    Messagebox "нельзя использовать формат"
    Continue=False
    Exit Sub
    End If
    End Forall
    End If
    End If
    и

    Код (Text):
    Sub RefreshRT(pUIDoc As NotesUIDocument)
    Dim doc As NotesDocument
    Set doc = pUIDoc.Document
    Dim rti As New NotesRichTextItem(doc, doc.UniversalID)
    Call rti.CopyItemToDocument(doc, doc.UniversalID & "_")
    Call rti.Remove()
    Call doc.RemoveItem(doc.UniversalID & "_")
    Dim ws As New NotesUIWorkspace
    Call ws.EditDocument(True, doc)
    Call doc.ReplaceItemValue("SaveOptions", "0")
    Call pUIDoc.Close()
    End Sub
    при неправ. формате должен меняться влож.файл?
     
  7. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    не можешь сделать так - сделай по другому.
    Запрети вносить файлы напрямую RT-поле.
    Опиши диалог выбора файлов. Укажи какие форматы файлов можно тянуть - и проверка в принципе не нужна.
    Подошел файл - цепляй его в RT-поле.
    А тот кто захочет подсунуть свой файл - он это сделает

    А в твоем случае вполне подойдет проверка полей с именем $FILES
    На момент сохранения нового документа RT-поля еще не существует, а вот поле $FILES уже есть (если вложили какой-то файл).
    Так что делай обход по этим полям - и будет тебе счастье.
    И не нужны никакие пересохранения и переоткрытия документа

    Ну вот как-то так:
    Код (Text):
    Sub Querysave(Source As Notesuidocument, Continue As Variant)
    Dim BackEndDoc As NotesDocument

    Set BackEndDoc = Source.Document

    Forall item In BackEndDoc.Items

    If Ucase(item.Name) = "$FILE" Then

    If Right$( Lcase(item.Values(0) ),4) = ".doc" Then
    ....
    Else
    Messagebox "нельзя использовать формат"
    Continue=False
    Exit Sub
    End If

    End If

    End Forall

    End Sub
     
  8. k85

    k85 Well-Known Member

    Регистрация:
    11 окт 2011
    Сообщения:
    137
    Симпатии:
    0
    NickProstoNick
    спасибо! Такого варианта мне достаточно с головой!!!
     
Загрузка...

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