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

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

  1. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Как добавить роль, к примеру [Admin] в поле автор или ридер документа ?
     
  2. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    в чем проблемы?
    Код (Text):
    doc.replaceItemValue("ADMAuthor", "[Admin]").IsAuthors = True
    doc.replaceItemValue("ADMReader", "[Admin]").IsReaders = True
    Добавлено: или проблемы в том, чтоб добавить в мультизначное поле?
     
  3. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    <!--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 сделать.
     
  4. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    А это Вам Omh любезно разъяснил ;)

    Добавлено: молодец - и даже про сохранение документа вспомнил)
     
  5. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Ну, не до конца молодец
    До конца молодец был бы так примерно так:
    <!--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]
     
  6. alik86

    alik86 Lotus team
    Lotus team

    Регистрация:
    20 ноя 2008
    Сообщения:
    465
    Симпатии:
    0
    А можно для поля READERS_FIELD прописать Value:
    "[Admin]" : READERS_FIELD
    ;)
     
  7. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    alik86
    ... и запустить агент с собакой ToolsRefreshAllDocs @Command ?
     
  8. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    А можно сменить формулу в поле и потом зафигарить по всем документам ComputeWithForm ;)
    А как же бритва Оккама? :ya_za:
     
  9. alik86

    alik86 Lotus team
    Lotus team

    Регистрация:
    20 ноя 2008
    Сообщения:
    465
    Симпатии:
    0
    OKEN Ну так не до конца понятна задача. Может человек пишет своё приложение и хочет изначально заложить в него товарищам с ролью [Admin] возможность видеть все доки. Тогда компутед полю READERS_FIELD прописываем Value "[Admin]" : READERS_FIELD и усё. А если надо добавлять в уже существующем приложении в уже существующие документы, тогда другой вопрос... ;)
     
  10. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Omh
    В Вашем примере, если поле отсутствовало, оно не станет авторским.

    Ещё вариант. Чуть короче.
    Код (Text):
    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
    Ещё короче ;)
    Код (Text):
    v =Evaluate({FIELD Readers:=@Trim(@Unique(Readers:"[Admin]"));""}, doc)
    Doc.GetFirstItem("Readers").IsReaders = True
    Для добавления в начало
    Код (Text):
    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
     
  11. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
  12. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    TIA
    Я знал, что придёшь и поправишь! ;)

    Добавлено:
    Ну вот это жестянка :ya_za:
    Я такое не лублу.
     
Загрузка...

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