Чудеса сервера Domino 6.0

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

  1. Don_VinNi

    Don_VinNi Member

    Регистрация:
    20 июн 2007
    Сообщения:
    12
    Симпатии:
    0
    Лотусоиды скажите пожалуста что могло привести к ледующему действию:

    Существует документ(Response) у нее есть поле которое хранит номер и генерируется авто. т.е при создание следующего дока генерируется следующий число. Проблема такова:

    1. Алексей
    2. Вова
    2. Леонид
    4. Карл

    код учитовал что Леонид должен был быть 3, а получилось 2. И то что странно Карл стал 4 а не 3 т.е должен был быть такой результат:

    1. Алексей
    2. Вова
    3. Леонид
    4. Карл

    Ну и укого какие мысли есть на счет этого
     
  2. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Трава?! Где Вы брали траву????

    чесно нифига не понятно

    <!--QuoteBegin-Don_VinNi+20:06:2007, 10:47 -->
    <span class="vbquote">(Don_VinNi @ 20:06:2007, 10:47 )</span><!--QuoteEBegin-->код учитовал что
    [snapback]70009" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Какой код КАК учитыва, где учитыва ???
     
  3. root

    root Гость

    Я тоже так хочу :)
     
  4. K-Fire

    K-Fire Гость

    <!--QuoteBegin-Don_VinNi+20:06:2007, 09:47 -->
    <span class="vbquote">(Don_VinNi @ 20:06:2007, 09:47 )</span><!--QuoteEBegin-->Существует документ(Response) у нее есть поле которое хранит номер и генерируется авто
    [snapback]70009" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Проблема зарылась в коде генерации номера.
    Например может быть такой алгоритм:
    Есть профиль который хранит текущий номер последовательности.
    2 пользователя одновременно берут оттуда номер при создании документа, и прибавляют в нем 1 когда документ сохраняется. Тогда получается что у обоих будет 2 и 2, и следущий номер будет 4.

    В любом случае, генерировать строго возрастающую последовательность номеров без дырок нереально имхо.
     
  5. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Профиль - в смысле profile? Детская болезнь, гарантированно будет работать неправильно. Профайл КЕШИРУЕТСЯ на каждом клиенте -> т.о. все будут генерить одни и те же номера
     
  6. Don_VinNi

    Don_VinNi Member

    Регистрация:
    20 июн 2007
    Сообщения:
    12
    Симпатии:
    0
    генерация происходит в следующем порядке:

    ds:=@Elements(@DbLookup("":"NoCache";"";"Student";ID;1;[FailSilent]))+1;
    @If(@IsNewDoc;ds;"")

    в данном коде как я понимаю выключаю кеширование, не так ли?
     
  7. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    База на одном сервере ?
     
  8. Don_VinNi

    Don_VinNi Member

    Регистрация:
    20 июн 2007
    Сообщения:
    12
    Симпатии:
    0
    Да
     
  9. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Что здесь ID? От куда берется?
     
  10. K-Fire

    K-Fire Гость

    <!--QuoteBegin-Constantin A Chervonenko+20:06:2007, 22:06 -->
    <span class="vbquote">(Constantin A Chervonenko @ 20:06:2007, 22:06 )</span><!--QuoteEBegin-->Профиль - в смысле profile? Детская болезнь, гарантированно будет работать неправильно. Профайл КЕШИРУЕТСЯ на каждом клиенте -> т.о. все будут генерить одни и те же номера
    [snapback]70067" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Спасибо, был не в курсе про кеширование. Но я как раз и не предлагал так сделать, просто предполагал что так могло быть сделано.

    <!--QuoteBegin-Don_VinNi+21:06:2007, 06:24 -->
    <span class="vbquote">(Don_VinNi @ 21:06:2007, 06:24 )</span><!--QuoteEBegin-->ds:=@Elements(@DbLookup("":"NoCache";"";"Student";ID;1;[FailSilent]))+1;
    @If(@IsNewDoc;ds;"")
    [snapback]70077" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Этот код в вычисляемом поле находится, я правильно понял? Значит значение берется когда документ создается, а эта вьюшка обновляется, когда документ сохраняется.
    Вот и получается что в промежуток времени между созданием и сохранением нового документа значение следующего номера не обновилось. В этом и есть проблема.
     
  11. Xushnud

    Xushnud Гость

    ID это типа имя группы студентов(в этом примере)
    А так наверное k-Fire прав, в тот момент наверное тот кто вводил данные открыл два таких документа и сохранил оба.
     
  12. Don_VinNi

    Don_VinNi Member

    Регистрация:
    20 июн 2007
    Сообщения:
    12
    Симпатии:
    0
    Думаю ты прав, спс.
     
  13. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Делай это поле формы не Computed when composed, а просто Computed, но с "оговоркой":
    @If(@IsNewDoc; @Yes; @Return(@ThisValue));
    .. далее твой код.

    Смысл: Компутед поле будет еще раз пересчитано в момент 1-го сохранения и вероятность дублирования практически обнулится
     
Загрузка...

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