Rich Text - значение по умолчанию

  • Автор темы serg1y
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

serg1y

Подскажите, пожалуйста. Есть поле rich text, есть форма - документ MS Word. Сейчас пользователь заполняет форму в MS Word, создает новый документ в Lotus и вставляет в поле rich text файл с заполненной формой . А теперь нужно чтобы при создании нового документа в Lotus эта форма (не файл) уже была в поле rich text, а пользователи прямо в ней заполняли данные. Я могу выделить и скопировать в MS Word эту форму, потом открыть документ в Lotus и вставить форму в поле rich text - все ОК, форматирование останется. А как мне сделать, чтобы при открытии документа, эта форма уже была в поле rich text по умолчанию? Если я его вставляю в Default Value поля - форматирование нарушается, а иногда вообще выдает ошибку. Может можно при открытии документа каждый раз копировать эту форму откуда-то (не понятно откуда) в rich text, или как-то еще?

Могу ли я скопировать спец форму Lotus в поле rich text другой формы этой-же базы, по аналогии как если бы включить в свойствах формы "Inherit entire selected document into rich text field" ?

Если я сохраню форматированный текст в поле rich text спец документа. Могу ли я скопировать это поле в поле rich text нового докумета, как мне обратиться к этому спец документу?
 
A

aks

Есть поле rich text, есть форма - документ MS Word. Сейчас пользователь заполняет форму в MS Word, создает новый документ в Lotus и вставляет в поле rich text файл с заполненной формой. А теперь нужно чтобы при создании нового документа в Lotus эта форма (не файл) уже была в поле rich text, а пользователи прямо в ней заполняли данные

Возможно я чего-то не понял, но почему бы не создать форму документа Lotus Notes с нужными полями, и уже в этой форие отформатировать все как надо?! Это само-собой напрашивается - ведь форма это некий набор текста (и/или не только) где часть текста остается неизменной, а часть "вписывается". Вот этот вписываемый текст и будет "вписываться" в поля документа. Ну, если надо это вывести в Word, то этот вопрос неоднократно обсуждался на форуме.
 
D

Duedev

Предлагаю создать отдельную форму "Шаблоны документов".... и соответственно для нее отдельное представление, где каждый пользователь может создавать эти шаблоны
В состав формы "Шаблоны документов" включить RTF поле куда и забивать, собственно, шаблон

При создании нового документа, спрашивать, например, по какому шаблону его создать, выбирать из списка существующих шаблонов и подставлять в нужное RTF поле значение из RTF поля шаблона...

Ну или рядом с RTF полем в документе повесить кнопочку "По шаблону" с условием скрытия
"@If(@IsNewDoc;@False;@True)" .... по этой кнопочке, опять же , выдавать список шаблонов и подставлять необходимое значение
 
S

serg1y

AKS, Неизменного текста нет, есть шаболон, но пользователь должен иметь возможность его править как он хочет, хоть весь затереть и создать все в свободной форме. Так и было с документом Word, но так не совсем удобно.
Duedev, Да, наверное, можно копировать RTF поле документа-шаблона в RTF поле нового документа. Вопрос, - как к документу-шаблону обратиться? по id? А если я сделаю копию базы и id базы поменяется, не перестанет ли работать вся база? Можно ли обратиться к документу, например, через какое-то ключевое поле, или по аналогии с @DbColumn,@DbLookup - из какого нибудь скрытого представления (views)?
 
K

K-Fire

serg1y, по поводу ID, эта задачу легко решить если использовать не UNID документа как ключ, а
класть на форму Computed when composed поле, с формулой @Unique. Называть его например ID. И дальше везде где нужно, использовать в качестве ссылки на документ это поле.

А по поводу шаблона: сделайте отдельную формочку, там поле "Название" добавьте, вот по нему и ищите. Дешево и сердито. Доступ на редактирование шаблонов оставьте администратору, обычный юзер пусть содержание ричтекст поле редактирует уже в главном документе. Если же пользователям нужно иметь каждому свой собственный шаблон, то тут тоже никаких проблем, дело техники уже :)
 
S

serg1y

Спасибо за помощь!
K-Fire, немного не понял, что за Computed when composed поле, с формулой @Unique? Поле "Название" - это альтернатива тому самому полю Computed when composed с формулой @Unique, или это разные способы обратиться к документу? И, собственно, с помощью каких команд можно искать (обратиться) к документу по полю Computed when composed с формулой @Unique либо по полю "Название", например, если поле "Название" = "Шаблон1"?
 
A

allex

AKS, Неизменного текста нет, есть шаболон, но пользователь должен иметь возможность его править как он хочет, хоть весь затереть и создать все в свободной форме.

Если это необходимо по заданию то показать открытый Word документ впод шапкой формы можно на LS

Код:
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim obj As Variant	
Set db = session.CurrentDatabase
Set dc = db.UnprocessedDocuments
Set doc = dc.GetFirstDocument
obj = doc.EmbeddedObjects
  obj(0).FitToWindow = True	 
Call doc.Save(True, True, True)
End Sub
 
K

K-Fire

Спасибо за помощь!
K-Fire, немного не понял, что за Computed when composed поле, с формулой @Unique? Поле "Название" - это альтернатива тому самому полю Computed when composed с формулой @Unique, или это разные способы обратиться к документу? И, собственно, с помощью каких команд можно искать (обратиться) к документу по полю Computed when composed с формулой @Unique либо по полю "Название", например, если поле "Название" = "Шаблон1"?

Про CWC поле ID с @Unique я писал как способ избавится от поиска по UNIDам. Это можно использовать во всех документах, и искать такие документы просто по вьюшке со 1 столбцом с полем ID.

Поле "Название" - в каком-то смысле альтернатива, просто узость задачи позволяет использовать такой способ. Т.е. для документа шаблона вы можете гарантировать то что имя будет всегда одним и тем же, причем уже известным вам во время разработки.
А когда вам надо получить ключ документа в рантайме (и не UNID и не NoteID) - то лучшего способа чем @Unique не найти.
 
S

serg1y

Я себе представляю алгоритм так:
-Есть форма Doc - документ и форма Dot - шаблон. В форме Dot два поля: 1. DotName, тип - text, 2. DotBody, тип - rich text. В поле Doc есть rich text поле Body куда нужно вставлять шаблон из поля DotBody.
-Например, я создаю документ по форме Dot, в DotName заношу название - "Шаблон1", в DotBody - сам шаблон.
-Есть view - "Шаблоны", где отображается, пока, один, только что созданный документ под названием "Шаблон1". Этот view видят пользователи с ролью [Admin].
-На форме Doc, есть , например, кнопка, при нажатии на которую DotBody документа "Шаблон1" заносится в поле Body открытого (текущего) документа (формы Doc).

В Lotus help есть код, который можно повесить на кнопку

Код:
Dim docA As NotesDocument
Dim docB As NotesDocument
Dim rtitemA As Variant
Dim rtitemB As Variant
'...set values of docA and docB...
Set rtitemA = docA.GetFirstItem( "Body" )
Set rtitemB = docB.GetFirstItem( "DotBody" )
If ( rtitemA.Type = RICHTEXT And _
rtitemB.Type = RICHTEXT ) Then
Call rtitemA.AppendRTItem( rtitemB )
Call docA.Save( False, True )
End If

DocA можно, наверное, описать так

Код:
Dim w As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim docA As NotesDocument
Set uidoc = w.CurrentDocument
Set docA = uidoc.Document

А как описать DocB - т.е как обратиться к документу с шаблоном?
 
K

K-Fire

Если во вью "Шаблоны" 1й столбец (сортированный/некатегоризованный) по полю DotName, то найти DocB можно так:

Код:
Set view = db.GetView("Шаблоны")
Set docB = view.GetDocumentByKey("Шаблон1")

Только это вью, плюс сам документ шаблона должны видеть (точнее говоря - иметь доступ) не только админы, но все пользователи. Иначе view будет тупо Nothing, если код кнопки под обычным пользователем будет выполняться.

Кстати, вопрос: а зачем вам кнопка? Сразу при создании документа Doc разве не лучше ричтекст скопировать из шаблона?
 
S

serg1y

Спасибо!
Насчет кнопки - это так, пример.Окончательный вариант должен выглядеть ледующим образом.
Есть несколько шаблонов, количество может меняться, сами шаблоны - тоже.
Есть поле - dialog list, откуда пользователь выбирает один или сразу несколько шаблонов. Есть либо одно rich text поле куда подставляются выбранные шаблоны, один за другим, либо на каждый шаблон - отдельное поле, но не знаю как заранее угадать на форме количество этих полей, или их можно создавать в процессе?
Для меня важно, чтобы не требовалось вмешиваться в дизайн при изменении-добавлении шаблонов, в общем, - универсальная база документов.
 
S

serg1y

Спасибо всем за помощь, особенно K-Fire!
Получилось и с помощью GetDocumentByKey, но мне больше понравилось - PickListCollection
Приведу код который я повесил на кнопку, может, кому-то пригодится
Код:
	Sub Click(Source As Button)
Dim session As NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim ws As New NotesUIWorkspace
Dim coll As NotesDocumentCollection	
Dim uidoc As NotesUIDocument
Dim docA As NotesDocument
Dim docB As NotesDocument
Dim rtitemA As NotesRichTextItem
Dim rtitemB As NotesRichTextItem
Dim n As Integer

Set session = New NotesSession
Set db = session.CurrentDatabase	
Set view = db.GetView("Шаблоны")
Set uidoc = ws.CurrentDocument
Set docA = uidoc.Document
Set rtitemA = New NotesRichTextItem(docA, "Body" )

'выбор шаблонов из представления "Шаблоны"
Set coll=ws.PickListCollection(3, True,db.Server, db.FilePath,"Шаблоны","Выберите шаблоны", "Список шаблонов")
n=coll.count
If n = 0 Then Exit Sub
Set DocB=coll.GetFirstDocument

'подстановка выбранных шаблонов в rich text поле один за другим по циклу
While Not DocB Is Nothing
Set rtitemB = docB.GetFirstItem( "DotBody" )
Call rtitemA.AppendRTItem( rtitemB )
Call rtitemA.AddNewLine(1)
Set docB=coll.GetNextDocument(docB)
Wend

'переоткрытие документа, чтобы изменения отображались сразу
Call rtitemA.Update
Call ws.EditDocument(True,docA)
docA.SaveOptions = "0"
Call uidoc.Close
Set uidoc = ws.CurrentDocument
Set docA = uidoc.Document
docA.SaveOptions = "1"	
End Sub
 
M

morpheus

Для: serg1y
Если считаете что кому то пригодиться , то заливайте link removed :(
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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