Поле NotesRichTextItem и SaveOptions

На поле нет поля SaveOptions.
Такого поля не было.
Мож на форму поставить перед открытием (или на событие после открытия) удаление поля SaveOptions ?
 
Последнее редактирование:
Код:
doc.ReplaceItemValue({SaveOptions},{0}).SaveToDisk=False
Call doc.save (False, True)
Call uidoc.Close
Call workspace.EditDocument(False, doc)
Проблема в том, что Вы не понимаете сути того, что происходит.
SaveOptions="0" отключает UI-запрос сохранения документа при его закрытии, если он был в режиме редактирования.
Вы это поле сами вписали в документ первой строчкой кода, который выше. Я обычно его после переоткрытия удалял, чтобы если попытаться закрыть документ, то он бы спросил, сохранять или нет. Типа вот так:
Код:
Set uidoc = workspace.EditDocument(False, doc)
Set doc = uidoc.Document
Call doc.removeItem("SaveOptions")
Многое в этом Вашем коде непонятно...
1. Почему в EditDocument передаётся False? После вставки атача пользователю не надо дать возможность дальше редактировать документ?
Или документ изначально был в режиме чтения? В таком случае вообще непонятно, зачем эти игры с SaveOptions.
2. Зачем строка
Код:
Call doc.save (False, True)
? А если после вставки атача пользователь откажется сохранять документ (допустим, передумал)?

Добавлено: посмотрите тему Обновление RTField, там есть альтернативная рабочая реализация переоткрытия документа для обновления RT-полей.
 
Последнее редактирование:
Почему в EditDocument передаётся False?
Да в моем докобороте это не важно, т.к. на постопен Source.EditMode = True

Call doc.save (False, True) - да, лишнее.
посмотрите тему Обновление RTField,....
Если док создавался с помощью Compose, то НА ФОРМЕ ПЕРЕОТКРЫВАЕМОГО ДОКУМЕНТА Д.Б. ПОЛЕ Form!!!
- не очень понятно, когда вызывать эту функцию RefreshRT?

Код:
Const IN_SAVEOPTIONS = "SaveOptions"

Function RefreshRT(EditMode As Boolean, nuid As NotesUIDocument) As NotesUIDocument
    'Если док создавался с помощью Compose, то НА ФОРМЕ ПЕРЕОТКРЫВАЕМОГО ДОКУМЕНТА Д.Б. ПОЛЕ Form!!!
    'методом Compose или соотв. формулой создаю только простые документы, типа справочников, чего и всем желаю
    Dim nuiws As New NotesUIWorkSpace
    If nuid.ModifiedSinceSaved Or nuid.Document.GetItemValue(IN_SAVEOPTIONS)(0) = "1" Then
        Call nuid.Document.ReplaceItemValue(IN_SAVEOPTIONS, "0")
    End If
    Call nuid.Close()
    Set RefreshRT = nuiws.EditDocument(EditMode, nuid.Document)
    If (Not RefreshRT Is Nothing) And EditMode Then
        RefreshRT.Document.ReplaceItemValue(IN_SAVEOPTIONS, "1").SaveToDisk = False
    End If
End Function
Если SAVEOPTIONS = 1 , то делает SAVEOPTIONS=0 и закрывает док?
 
не очень понятно, когда вызывать эту функцию RefreshRT?
Она вместо всего того кода, который Вы писали в этой теме для переоткрытия документа.

Если SAVEOPTIONS = 1, то делает SAVEOPTIONS=0 и закрывает док?
Да, потом возвращает. Это сделано потому, что на QuerySave, OnSubmit могут быть вызовы Refresh(True), таким образом уходим от случайного (неконтролируемого) сохранения документа на диск.
 
If nuid.ModifiedSinceSaved - это поле такое на форме?
Вызываю функцию Call RefreshRT(0,uidoc)
всё равно есть окошко сохранения дока, аттач выкидывает с его поля.
 
Последнее редактирование:
If nuid.ModifiedSinceSaved - это поле такое на форме?
Это свойство объекта NotesUIDocument, означающее, что документ изменялся в UI.

У меня этот код работает без вопросов с тех пор как появилось свойство ModifiedSinceSaved.
Первым параметром желательно передавать тот тип, что указан в описании функции.
Если не работает, попробуйте закоментировать строку, начинающуюся на "If nuid.ModifiedSinceSaved" и её "End If", чтобы строка
Код:
Call nuid.Document.ReplaceItemValue(IN_SAVEOPTIONS, "0")
осталась нетронутой.

Что такое
аттач выкидывает с его поля.
я не понял.
 
Дабы не создавать новую тему напишу здесь.
Имеется поле Rich Text . Тип - Editable. в нем файл.
Задача - При нажатии на кнопку проверить если в этом поле есть файл, то стереть его и заменить на новый файл, Но:
Как удалить аттачмент без переоткрытия документа? или переоткрывать документ но SaveOptions не удалять - потому как необходимо сохранить диалоговое окно - сохранить документ/нет/отмена.
 
Дабы не создавать новую тему напишу здесь.
Имеется поле Rich Text . Тип - Editable. в нем файл.
Задача - При нажатии на кнопку проверить если в этом поле есть файл, то стереть его и заменить на новый файл, Но:
Как удалить аттачмент без переоткрытия документа? или переоткрывать документ но SaveOptions не удалять - потому как необходимо сохранить диалоговое окно - сохранить документ/нет/отмена.
ничего не понял
если инмемори интерактивно-открытый док - придется перечитать, есть трюк с заменой инмемори дока
есть uidoc.Refresh(true) но насколько я помню - открытый интерактивно док не обновится
а не понял про SaveOptions - ставьте ему OnDisk=False (.SaveToDisk=False) и ничего не изменится
 
Последнее редактирование:
Дабы не создавать новую тему напишу здесь.
Имеется поле Rich Text . Тип - Editable. в нем файл.
Задача - При нажатии на кнопку проверить если в этом поле есть файл, то стереть его и заменить на новый файл, Но:
Как удалить аттачмент без переоткрытия документа? или переоткрывать документ но SaveOptions не удалять - потому как необходимо сохранить диалоговое окно - сохранить документ/нет/отмена.
Храните аттачмены в респонзах, отображайте в документе через embedded view, над view разместите две кнопки "Добавить" и "Удалить". Можно будет что угодно делать с аттачментами не перезагружая и не изменяя основной документ.
 
Есть лотус документ, в нем Rich Text поле(attach). Открыл лотус документ Нажал кнопку А:
Код:
Call rtitem.EmbedObject ( EMBED_ATTACHMENT, "", FileName)
'Приатачился файл, но чтобы мне увидеть его , нужно вызвать
Call uidoc.Close
Call workspace.EditDocument(True, doc)
'а чтобы не было диалога сохранить да/нет/отмена
doc.ReplaceItemValue({SaveOptions},{0}).SaveToDisk=False
Все бы хорошо, но мне нужен диалог сохранить да/нет/отмена.
Поэтому приатачить файл сделал другим путем как в статье :

Теперь возникла другая задача. Если в Rich Text поле(attach) есть файл тогда его нужно стереть по кнопке А и приатачить другой:
Код:
If rtitem.Type = RICHTEXT Then
            Forall o In rtitem.EmbeddedObjects
                If o.Type = EMBED_ATTACHMENT Then
                            Call o.Remove
                        End If
                    End Forall
                 Call rtitem.Update
Но опять уперся в то - что нужно переоткрыть документ, но при этом нужен диалог сохранить да/нет/отмена
В этом и вопрос.
Храните аттачмены в респонзах, отображайте в документе через embedded view, над view разместите две кнопки "Добавить" и "Удалить". Можно будет что угодно делать с аттачментами не перезагружая и не изменяя основной документ.
Не вариант. Переделывать всю логику не представляется возможным.
 
Последнее редактирование модератором:
Наверное не до конца мысль правильно оформил - когда стереть аттач - необходимо чтоб диалоговое окно не появлялось, а когда уже аттач другой прикреплен тогда при закрытии документа на крестик - чтоб выходило - сохранить документ да/нет/отмена.
 
По мере надобности, создаёте либо удаляете поле SaveOptions (либо заполняете его чем-то или очищаете) перед сохранением документа.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!