Заколдованные Ридерсы

Тема в разделе "Lotus - Программирование", создана пользователем Idea, 19 дек 2007.

  1. Idea

    Idea Гость

    Ещё раз всем - здравствуйте! Кто о чем, я а всё о своих баранах.
    Исходные данные:
    форма с полями -
    Author (множественное, редактируемое, дефолт @UserName) типа Authors - авторы текущего документа
    Auth (множественное, скрытое, вычисляемое поле @Implode(@Unique(@Explode((@ThisValue + "," + Author);","));",")) типа Authors - авторы родительского документа, которые на самом деле тоже могут редактировать текущий

    TeamLeader и Members (вычисляемые, хранят имена в каноническом виде) - типа Names
    Reader (множественное, редактируемое, дефолт @ThisValue) - типа Names - люди, которые не входят в остальные поля, но должны читать документ
    SummReaders (множественное, вычисляемое, формула:
    Код (Text):
    @Implode(@Unique(@Explode(@If (@IsNull(Readers); ""; Readers + "," +Auth +@If(@IsNull(Team);""; "," + Team) + @If(@IsNull(Members);"";"," + Members));","));",")
    - типа Readers - все-все-все, кто может читать этот документ

    Что было: раньше не было поля SummerReaders, а у каждого поля из второй группы был тип Readers. Не устраивало то, что прописанные в Auth пользователи, соответственно не имели права читать документ.
    Теперь всё так, как описано выше, но ничего не изменилось! Люди есть в SummReaders, пробовала и каноническое имя, и короткое - бесполезно. Человек есть в поле SummReaders, а документ так и не видит. Пересохранять пробовала, рефрешить - ничего. Подскажите плиз, где я накосячила? :)
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    попробуйте - @Unique( Readers:Members:Team:Auth)

    SummReaders - у Вас в результате формулы получает ТЕКСТОВОЕ значение потому что @Implode - возвращает СТРОКУ
     
  3. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    <!--QuoteBegin-Morpheus+19:12:2007, 13:06 -->
    <span class="vbquote">(Morpheus @ 19:12:2007, 13:06 )</span><!--QuoteEBegin-->SummReaders - у Вас в результате формулы получает ТЕКСТОВОЕ значение потому что @Implode - возвращает СТРОКУ
    [snapback]90529" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Какая разница? Главное, что тип поля Readers.

    <!--QuoteBegin-Idea+19:12:2007, 12:59 -->
    <span class="vbquote">(Idea @ 19:12:2007, 12:59 )</span><!--QuoteEBegin-->Человек есть в поле SummReaders, а документ так и не видит. Пересохранять пробовала, рефрешить - ничего. Подскажите плиз, где я накосячила? sad.gif

    [snapback]90526" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Проверь многозначное ли поле.
     
  4. Sandr

    Sandr Гость

    Или поставте разделитель значений запятую в свойствах поля (а может у вас поле не множественное? или, хуже того, не ридерс?)
     
  5. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Всё. Увидел, что многозначное. :)
     
  6. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Тогда до кучи проверить ЧЕМ разделяються значеия в поле
     
  7. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    <!--QuoteBegin-Idea+19:12:2007, 12:59 -->
    <span class="vbquote">(Idea @ 19:12:2007, 12:59 )</span><!--QuoteEBegin-->Auth (множественное, скрытое, вычисляемое поле @Implode(@Unique(@Explode((@ThisValue + "," + Author);","));",")) типа
    [snapback]90526" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Здесь непонятно. Зачем такие сложности и, главное, зачем в результате всё из списка преобразовывать в строку?
    Можно просто @Unique(@Trim(@ThisValue : Author)). Ну и везде так.
     
  8. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    разница в том, что многократные преобразования текст/список испортили структуру имен. Там местами канонические имена а местами - их конкатенация.
     
  9. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    <!--QuoteBegin-Constantin A Chervonenko+19:12:2007, 12:29 -->
    <span class="vbquote">(Constantin A Chervonenko @ 19:12:2007, 12:29 )</span><!--QuoteEBegin-->, что многократные преобразования текст/список испортили структуру имен
    [snapback]90541" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    именно, потому то я предложил во 2м ссобщении просто уникью
     
  10. Idea

    Idea Гость

    сделала @Unique, и ещё в Auth переписала все имена ручками в каноническом виде (были в перемешку с CN) - работает, только запаришься во всех доках это парить руками. Мораль: не смешивайте имена в разных видах.

    з.ы. А разделители я проверяла в первую очередь, ибо уже были грабли :blink:
     
  11. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    а руками и не надо!..

    учим NotesName, @Name

    и подсобные операции работы с массивами и т.п.

    ЗЫ: первым делом нужно глянуть в значение требуемого поля на второй закладке свойств требуемого документа... обычно, когда что-то путается с именах, там отлично видно лажу... и когда массив одной строкой не правильно впихнут, тоже видно...
     
  12. Idea

    Idea Гость

    если я правильно поняла мысль, то надо написать агента, который пробежав по всем документам, а конкретнее по всем полям, содержащим имена. прогнать значения этих полей в цикле и переприсвоить что-то типа:
    Код (Text):
    Dim userName As NotesName

    Set userName = /значение из поля, добытое через массив/
    /элемент другого массива/ = userName.Canonical
    и запихать массив обратно в поле. так?
     
  13. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    типа того, но даже не обязательно использовать другой массив...
    можно в этом же массиве заменять значения... а потом вернуть их в поле...
     
  14. Idea

    Idea Гость

    Я тут подумала ещё на счет собачного агента с выборкой по всем документам базы.
    Код (Text):
    @If(!@IsNull(Author); FIELD Author := @Name([Canonicalize]; Author);"");
    @If(!@IsNull(Auth); FIELD Auth := @Name([Canonicalize]; Auth);"");
    @If(!@IsNull(Reader); FIELD Reader := @Name([Canonicalize]; Reader);"");
    @If(!@IsNull(TechManager); FIELD TechManager := @Name([Canonicalize]; TechManager);"");
    @If(!@IsNull(SummReaders); FIELD SummReaders := @Name([Canonicalize]; SummReaders);"");
    @If(!@IsNull(Team); FIELD Team := @Name([Canonicalize]; Team);"");
    @If(!@IsNull(Members); FIELD Members := @Name([Canonicalize]; Members);"");
    @If(!@IsNull(TeamLeader); FIELD TeamLeader := @Name([Canonicalize]; TeamLeader);"");
    @If(!@IsNull(Developers); FIELD Developers := @Name([Canonicalize]; Developers);"")
    может это будет проще? только что-то мне подсказывает, что какого-нить рефреша не хватает или типа того.
     
  15. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Собачный проще в написании... похоже на правду, тестируйте :)
     

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