Как добавить роль в поле автор или ридер?

seoman2

Lotus team
17.02.2010
463
1
#1
Как добавить роль, к примеру [Admin] в поле автор или ридер документа ?
 

hosm

* so what *
18.05.2009
2 442
6
#2
в чем проблемы?
Код:
doc.replaceItemValue("ADMAuthor", "[Admin]").IsAuthors = True 
doc.replaceItemValue("ADMReader", "[Admin]").IsReaders = True
Добавлено: или проблемы в том, чтоб добавить в мультизначное поле?
 

Omh

Lotus team
04.07.2007
2 210
1
#3
<!--shcode--><pre><code class='vb'>Dim V As Variant
V = Doc.GetItemValue(READERS_FIELD)
V = ArrayAppend(V, "[Admin]")
V = ArrayUnique(V)
Call Doc.ReplaceItemValue(READERS_FIELD, V)
Call Doc.Save(True, False)[/CODE]
Не?

Можно, по желанию, одной строчкой записать.
Можно, по желанию, ещё Fulltrim сделать.
 

Omh

Lotus team
04.07.2007
2 210
1
#5
Ну, не до конца молодец
До конца молодец был бы так примерно так:
<!--shcode--><pre><code class='vb'>Const READERS_FIELD = "FieldNameWithReaders"
Const ROLE = "[Admin]"
Dim V As Variant

V = Doc.GetItemValue(READERS_FIELD)
if IsNull(ArrayGetIndex(V, ROLE)) then
V = ArrayAppend(V, ROLE)
' V = ArrayUnique(V) 'ну вот этот тут избыточно, скажем честно
V = Fulltrim(V) 'что бы не было пустого элемента, если добавляем в несуществующий айтем

Dim Item As NotesItem
Set Item = Doc.ReplaceItemValue(READERS_FIELD, V)
if Not Item.IsReaders then Item.IsReaders = True
Call Doc.Save(True, False)
End if[/CODE]
 

alik86

Lotus team
20.11.2008
465
1
#6
А можно для поля READERS_FIELD прописать Value:
"[Admin]" : READERS_FIELD
;)
 

hosm

* so what *
18.05.2009
2 442
6
#7
alik86
... и запустить агент с собакой ToolsRefreshAllDocs @Command ?
 

Omh

Lotus team
04.07.2007
2 210
1
#8
А можно сменить формулу в поле и потом зафигарить по всем документам ComputeWithForm ;)
А как же бритва Оккама? :ya_za:
 

alik86

Lotus team
20.11.2008
465
1
#9
OKEN Ну так не до конца понятна задача. Может человек пишет своё приложение и хочет изначально заложить в него товарищам с ролью [Admin] возможность видеть все доки. Тогда компутед полю READERS_FIELD прописываем Value "[Admin]" : READERS_FIELD и усё. А если надо добавлять в уже существующем приложении в уже существующие документы, тогда другой вопрос... ;)
 

TIA

:-)
Lotus team
15.05.2009
790
3
#10
Omh
В Вашем примере, если поле отсутствовало, оно не станет авторским.

Ещё вариант. Чуть короче.
Код:
Set itm = Doc.GetFirstItem(READERS_FIELD)
if itm is nothing then
Doc.ReplaceItemValue(READERS_FIELD, ROLE).IsReaders=True
Elseif not itm.Contains(ROLE) then
itm.AppendToTextList(ROLE)
end if
Ещё короче ;)
Код:
v =Evaluate({FIELD Readers:=@Trim(@Unique(Readers:"[Admin]"));""}, doc)
Doc.GetFirstItem("Readers").IsReaders = True
Для добавления в начало
Код:
Set v = Doc.GetItemValue(READERS_FIELD)
if IsNull(ArrayGetIndex(v, ROLE)) then
Set itm=Doc.ReplaceItemValue(READERS_FIELD, ROLE)
itm.IsReaders=True
if v(0)<>"" then itm.AppendToTextList(v)
End if