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

20.06.2007
12
0
32
#1
Лотусоиды скажите пожалуста что могло привести к ледующему действию:

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

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

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

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

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

morpheus

скриптописец
07.08.2006
3 915
1
34
Украина, Киев
#2
Трава?! Где Вы брали траву????

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

<!--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]

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

K-Fire

Гость
#4
<!--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.

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

Constantin A Chervonenko

Well-Known Member
Lotus team
#5
Проблема зарылась в коде генерации номера.
Например может быть такой алгоритм:
Есть профиль который хранит текущий номер последовательности.
...
Профиль - в смысле profile? Детская болезнь, гарантированно будет работать неправильно. Профайл КЕШИРУЕТСЯ на каждом клиенте -> т.о. все будут генерить одни и те же номера
 
20.06.2007
12
0
32
#6
Профиль - в смысле profile? Детская болезнь, гарантированно будет работать неправильно. Профайл КЕШИРУЕТСЯ на каждом клиенте -> т.о. все будут генерить одни и те же номера
генерация происходит в следующем порядке:

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

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

K-Fire

Гость
#10
<!--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]

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

Xushnud

Гость
#11
Что здесь ID? От куда берется?
ID это типа имя группы студентов(в этом примере)
А так наверное k-Fire прав, в тот момент наверное тот кто вводил данные открыл два таких документа и сохранил оба.
 
20.06.2007
12
0
32
#12
Спасибо, был не в курсе про кеширование. Но я как раз и не предлагал так сделать, просто предполагал что так могло быть сделано.
Этот код в вычисляемом поле находится, я правильно понял? Значит значение берется когда документ создается, а эта вьюшка обновляется, когда документ сохраняется.
Вот и получается что в промежуток времени между созданием и сохранением нового документа значение следующего номера не обновилось. В этом и есть проблема.
Думаю ты прав, спс.
 

Constantin A Chervonenko

Well-Known Member
Lotus team
#13
Этот код в вычисляемом поле находится, я правильно понял? Значит значение берется когда документ создается, а эта вьюшка обновляется, когда документ сохраняется.
Вот и получается что в промежуток времени между созданием и сохранением нового документа значение следующего номера не обновилось.
Делай это поле формы не Computed when composed, а просто Computed, но с "оговоркой":
@If(@IsNewDoc; @Yes; @Return(@ThisValue));
.. далее твой код.

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