Computed-поля

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#1
Доброго времени суток!
Нужна помошь.
Есть не большая проблема.... нужно копировать содержимое одного поля в другое между двумя разными документами в бекэнде. Оба поля Computed
Но все бы ничего если бы исходное поле не содержало таблицу. Вот тут и возникает вопрос - как скопировать все и таблицу в том числе?
Если исходное поле сделать Editadle - проблем не возникает, но делать поле Editadle нельзя.
 

Omh

Lotus team
04.07.2007
2 210
1
#2
А в чём проблема поконкретнее?
Там что Computed RichText'ы?
Если это так, то их в печЪ, и заменяем на Editable RichText + Controlled Access section.
Computed RichText - зло.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#4
Omh
Прошу прощения.. не написал что-то.... Да, поля RichText
А почему Computed - чтоб не дать его редактировать

Medevic
в том то и дело, что не всегда :angry:
Да... этим методом копируется, нотолько текст... самой рамки таблицы нет
 

Omh

Lotus team
04.07.2007
2 210
1
#5
Замени на Editable RichText + Controlled Access Section
Не надо использовать Computed RichText
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#6
:angry: вряд ли получится.
Суть в чем, Человеку даны права для просмотра документа, но в документе есть кнопка "печать". При нажатии на нее формируется новый временный документ для печати. И при формировании из исходного документа должно копироваться RichText поле, но не просто с содержимым, а еще и с табличкой. А если у человека доступ только на чтнеие - то таким методом notesItem.CopyItemToDocument копируются тлько текстовые данные! Потому как курсор не может попасть в поле, чтоб полностью его копировать

Ну так вот, если использовать Controlled Access Section - это равносильно указанию параметров доступа в самом поле.. и по сути получатся те же яйца, только в профиль.
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#7
Непонятна связь прав доступа, метода CopyItemToDocument и курсора. Скорее всего нет никакой связи. :angry:
Может действительно попробовать сменить на Editable. Я с computed почти не работал, поэтому не знаю. Но насчет секций полностью поддерживаю.
Также какой тип поля? Везде RichText, а не просто Text?
Попробуй ещё метод notesRichTextItem.AppendRTItem.
 

Omh

Lotus team
04.07.2007
2 210
1
#8
NickProstoNick
Как копируешь-то?
Через uidoc.Copy чтоль? :angry:
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#9
Omh
копирую так notesItem.CopyItemToDocument

Чтоб было понятней (кому будет не лень).... в computed RichText-поле програмон постройте таблицу, заполните ее чем-нить (в хелпе есть пример). а потом попробуйте скопировать это поле в другое RichText. В результате будет просто текст! т.е. никаких границ таблицы, ячеек...

почему computed - чтоб пользователь видел содержимое, но не мог редактировать.
 

Omh

Lotus team
04.07.2007
2 210
1
#10
NickProstoNick
Убери нафик этот computed richtext.
Сделай нормальный ричтескт и помести его в controlled access section.
Дался тебе этот ComputedRichtext! Глюкавая штука, зачем она тебе?

Попробуй хоть.
Я на computed richtext такие глюканы ловил :angry:

После построения всякие update делаешь?
Где-то что-то пропустил...
И убери кампутед :eek:
 

morpheus

скриптописец
07.08.2006
3 915
1
#11

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#12
Вот только что сделал. Всё прекрасно работает. И с Computed полем, и с Editable, и с секцией.

Morpheus
NotesRichTextItem
Inherits from: NotesItem

И вообще код в студию!

И формулу для Computed RichText поля тоже.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#13
Сейчас у меня на форме 2 поля NotesRichTextItem
1. Body (Computed)
2. Copy_Body (Computed)

Первая кнопка
Вот код, который заполняет поле Body. строит табличку. Притензий к коду нет. все работает
Код:
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
REM Create document with Body rich text item
Dim doc As New NotesDocument(db)
Call doc.ReplaceItemValue("Form", "Main topic")
Call doc.ReplaceItemValue("Subject", "Table 4 x 3")
Dim body As New NotesRichTextItem(doc, "Body")
REM Create table in Body item
rowCount% = 4
columnCount% = 3
Call body.AppendTable(rowCount%, columnCount%)
REM Populate table
Dim rtnav As NotesRichTextNavigator
Set rtnav = body.CreateNavigator
Call rtnav.FindFirstElement(RTELEM_TYPE_TABLECELL) 
For iRow% = 1 To 4 Step 1
For iColumn% = 1 To 3 Step 1
Call body.BeginInsert(rtnav)
Call body.AppendText("Row " & iRow% & ", _
Column " & iColumn%)
Call body.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Next
Next
REM Save document and refresh view
Call doc.Save(True, False)
Dim ws As New NotesUIWorkspace
Call ws.ViewRefresh
End Sub

Далее.... Вторая кнопка
в ней вот такой метод
Код:
Set NotesItem = Doc.GetFirstItem( "Body" )	
notesItem.CopyItemToDocument(Doc, "Copy_Body" )
вот тут какраз возникает проблема (есть текст из таблицы, но нет самой таблицы)
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#15
Т.е. работаешь с одним документом.
А вторую кнопку полностью можно?
Откуда берется Doc, что дальше происходит?
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#16
вторая кнопка

Код:
	Dim ws As New NotesUIWorkspace
Dim Doc As NotesDocument, 
Dim NotesItem As NotesItem

Set Doc = ws.CurrentDocument.Document
Set NotesItem = Doc.GetFirstItem( "Body" )	
Call NotesItem.CopyItemToDocument(Doc, "Copy_Body" )
Call Doc.Save(True, False, True)
Все... разобрался.... секции помогли (просто я с ними не дружил... придется начать)
Спасибо огромное
 

Omh

Lotus team
04.07.2007
2 210
1
#17
Вывод: computed richtext - гогно
Да и тебе тепреь два ричтекста, как я понимаю не особо-то и нужно...
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#18
нее... 2 ричтекста это просто для отработки алгоритма... для тренировки... на самом деле все немного сложнее, но главное - понял что к чему :)