Как можно блокировать действие или шаг действия?
- Anderyt
- Активный участник
- Сообщения: 777
- Зарегистрирован: 15 июл 2004, 13:15
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Тюмень
- Контактная информация:
Re: Как можно блокировать действие или шаг действия?
хм... чем то чувствую, что можно без таблиц (как говорилось в "Ширли-Мырли" - "что то не нравятся они мне.. нет, я конечно не расист... ну так... чувствую какой то дискомфорт"... )
если в действии, которое берет значение счетчика, перед этим самым считыванием, установить для этого же объекта другой атрибут (типа "счетчик занят"), сделать update, потом считать, увеличить, записать и убрать флаг занятости, и тут же снова сделать update?
и перед всем этим сначала проверять, занят ли счетчик.. если не занят - начинаем его занимать и обрабатывать, если занят - снова проверяем, занят или нет...
если между двумя update не будет никакой реакции юзера, то вроде 2-е действие не будет слишком долго ожидать..
если в действии, которое берет значение счетчика, перед этим самым считыванием, установить для этого же объекта другой атрибут (типа "счетчик занят"), сделать update, потом считать, увеличить, записать и убрать флаг занятости, и тут же снова сделать update?
и перед всем этим сначала проверять, занят ли счетчик.. если не занят - начинаем его занимать и обрабатывать, если занят - снова проверяем, занят или нет...
если между двумя update не будет никакой реакции юзера, то вроде 2-е действие не будет слишком долго ожидать..
лучше день потерять, потом за пять минут долететь!
- Александр
- Активный участник
- Сообщения: 1652
- Зарегистрирован: 24 авг 2006, 08:06
- Используемое ПО: Lotsia PDM PLUS
- Откуда: 55.745578,37.665825
Re: Как можно блокировать действие или шаг действия?
нет нет и нет
зачем?
я настаиваю на базовых функциях типа при редактировании действия добавить флаг в настройки действия - действие работает в многозадачном режиме или в однозадачном это будет проще, но правда несколько дольше
зачем?
я настаиваю на базовых функциях типа при редактировании действия добавить флаг в настройки действия - действие работает в многозадачном режиме или в однозадачном это будет проще, но правда несколько дольше
Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный
- Disillusioned
- Активный участник
- Сообщения: 420
- Зарегистрирован: 15 июл 2004, 15:12
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Подольск
- Контактная информация:
Re: Как можно блокировать действие или шаг действия?
Возникла мысль...
Что если заранее централизовано создать некоторое количество объектов-"пустышек" у которых из всех атрибутов один только номер и есть. Тогда пользователю надо не создавать новый объект-"документ", а изменить существующую "пустышку".
Для того чтобы один объект не взяли на изменение два пользователя:
- в первом шаге записать в атрибут код пользователя и следом Update(). "Бронируем" объект.
- создать бизнес-правило блокирующее изменение атрибута с кодом пользователя если такой атрибут существует.
- на втором шаге проверить, совпадает ли код пользователя? Если да, редактировать объект, если нет сообщить о том, что объект занят.
Создание новых "пустышек" можно повесить, к примеру, на сервер автопереходов (просто первое что пришло в голову).
P/S Можно разделить объекты "Номер документа" и "Документ". "Номера" создаем заранее, потом, по потребности, подключаем к ним "Документы". При таком подходе будут даже шаблоны прав работать.
P/P/S Проблему пробелов в нумерации этот подход также поможет решить... Видим, что номер свободный и используем несмотря на то что он не последний...
P/P/P/S Чтобы пользователь не заблудился в свободных номерах "Пустышки" можно хранить в недоступной пользователю папке и при запуске действия искать в ней через SQL наименьший незанятый номер...
P/P/P/P/S Наверное, можно обойтись и без "пустышек", также "бронируя" объект хранящий очередной номер документа. В действии, если счетчик не занят пишем в него код пользователя, потом Update(), потом проверка кода пользователя. После того как счетчик на единичку увеличили, атрибут с кодом пользователя удаляем и снова Update(). Если счетчик занят, в цикле ожидаем, чтобы он освободился... Бизнес-правило должно работать только на изменение атрибута, удаление должно происходить без ограничений.
Что если заранее централизовано создать некоторое количество объектов-"пустышек" у которых из всех атрибутов один только номер и есть. Тогда пользователю надо не создавать новый объект-"документ", а изменить существующую "пустышку".
Для того чтобы один объект не взяли на изменение два пользователя:
- в первом шаге записать в атрибут код пользователя и следом Update(). "Бронируем" объект.
- создать бизнес-правило блокирующее изменение атрибута с кодом пользователя если такой атрибут существует.
- на втором шаге проверить, совпадает ли код пользователя? Если да, редактировать объект, если нет сообщить о том, что объект занят.
Создание новых "пустышек" можно повесить, к примеру, на сервер автопереходов (просто первое что пришло в голову).
P/S Можно разделить объекты "Номер документа" и "Документ". "Номера" создаем заранее, потом, по потребности, подключаем к ним "Документы". При таком подходе будут даже шаблоны прав работать.
P/P/S Проблему пробелов в нумерации этот подход также поможет решить... Видим, что номер свободный и используем несмотря на то что он не последний...
P/P/P/S Чтобы пользователь не заблудился в свободных номерах "Пустышки" можно хранить в недоступной пользователю папке и при запуске действия искать в ней через SQL наименьший незанятый номер...
P/P/P/P/S Наверное, можно обойтись и без "пустышек", также "бронируя" объект хранящий очередной номер документа. В действии, если счетчик не занят пишем в него код пользователя, потом Update(), потом проверка кода пользователя. После того как счетчик на единичку увеличили, атрибут с кодом пользователя удаляем и снова Update(). Если счетчик занят, в цикле ожидаем, чтобы он освободился... Бизнес-правило должно работать только на изменение атрибута, удаление должно происходить без ограничений.
Ах и с ними невозможно
И без них никак нельзя
И без них никак нельзя
- Anderyt
- Активный участник
- Сообщения: 777
- Зарегистрирован: 15 июл 2004, 13:15
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Тюмень
- Контактная информация:
Re: Как можно блокировать действие или шаг действия?
хм.... где то я это уже видел... вот только не могу вспомнить, где именно...Disillusioned писал(а):P/P/P/P/S Наверное, можно обойтись и без "пустышек", также "бронируя" объект хранящий очередной номер документа. В действии, если счетчик не занят пишем в него код пользователя, потом Update(), потом проверка кода пользователя. После того как счетчик на единичку увеличили, атрибут с кодом пользователя удаляем и снова Update(). Если счетчик занят, в цикле ожидаем, чтобы он освободился... Бизнес-правило должно работать только на изменение атрибута, удаление должно происходить без ограничений.
Александр, вы хотите чтобы вообще все действие блокировалось????
ого..
а если оно большое? а если человека отвлекли, он начал говорить по телефону, а действие не закрыл?
все остальные будут его ждать??
лучше день потерять, потом за пять минут долететь!
- Александр
- Активный участник
- Сообщения: 1652
- Зарегистрирован: 24 авг 2006, 08:06
- Используемое ПО: Lotsia PDM PLUS
- Откуда: 55.745578,37.665825
Re: Как можно блокировать действие или шаг действия?
я тут покурил и понял...
клиентские действия - лезут без очереди
серверные - в очередь
соответственно никаких двойных номеров - только вот проблема - мы не используем сервер автопереходов
клиентские действия - лезут без очереди
серверные - в очередь
соответственно никаких двойных номеров - только вот проблема - мы не используем сервер автопереходов
Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный
- Александр
- Активный участник
- Сообщения: 1652
- Зарегистрирован: 24 авг 2006, 08:06
- Используемое ПО: Lotsia PDM PLUS
- Откуда: 55.745578,37.665825
Re: Как можно блокировать действие или шаг действия?
>Anderyt
нет зачем ждать... действие должно быть полностью автоматическое и выходить если повисло по тайм-ауту - как wathdog в однокристаллках - завис - на перезагрузку...
в общем наверно только на сервере автопереходов проблема решится благоприятно, а вот как на клиентских местах без автопереходов???? нужно что-то совсем простое
может все тот же флаг в очередь или без очереди ... по моему должно работать (я все на перспективу смотрю, с дополнительными атрибутами что-то не очень хочется связываться - в конце концов мы же не программируем систему - а только настраиваем ее)
нет зачем ждать... действие должно быть полностью автоматическое и выходить если повисло по тайм-ауту - как wathdog в однокристаллках - завис - на перезагрузку...
в общем наверно только на сервере автопереходов проблема решится благоприятно, а вот как на клиентских местах без автопереходов???? нужно что-то совсем простое
может все тот же флаг в очередь или без очереди ... по моему должно работать (я все на перспективу смотрю, с дополнительными атрибутами что-то не очень хочется связываться - в конце концов мы же не программируем систему - а только настраиваем ее)
Последний раз редактировалось Александр 17 дек 2008, 15:43, всего редактировалось 1 раз.
Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный
- Disillusioned
- Активный участник
- Сообщения: 420
- Зарегистрирован: 15 июл 2004, 15:12
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Подольск
- Контактная информация:
Re: Как можно блокировать действие или шаг действия?
Идею использования блокиратора я себе и не приписываю...хм.... где то я это уже видел... вот только не могу вспомнить, где именно...
Просто факт занятости счетчика ровным счетом ничего не значит, если не известно, кто именно его занял, и нет механизма предотвращения повторной блокировки, т.к. запрос на установку блокиратора может поступить от двух пользователей "почти одновременно" и мы получим
вероятность одинаковых номеров стала намного меньше (но они каикм то образом все таки встречаются, но ОЧЕНЬ-ОЧЕНЬ редко).
Ах и с ними невозможно
И без них никак нельзя
И без них никак нельзя
- Anderyt
- Активный участник
- Сообщения: 777
- Зарегистрирован: 15 июл 2004, 13:15
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Тюмень
- Контактная информация:
Re: Как можно блокировать действие или шаг действия?
ой... ой-ой-ой... какой такой watch-dog ???
пока мне самым простым решением видится блокиратор в самом действии с использованием дополнительного атрибута (Disillusioned придумал наконец название для того, что мы тут обсуждаем )Александр писал(а):нужно что-то совсем простое
да я ж не в упрек я ж шучу...Disillusioned писал(а):Идею использования блокиратора я себе и не приписываю...
хм... а механизмом предотвращения повторной блокировки разве не будет тот самый цикл проверки наличия блокировки?... че то я запутался тогдаDisillusioned писал(а):Просто факт занятости счетчика ровным счетом ничего не значит, если не известно, кто именно его занял, и нет механизма предотвращения повторной блокировки, т.к. запрос на установку блокиратора может поступить от двух пользователей "почти одновременно" и мы получим
лучше день потерять, потом за пять минут долететь!
- Anderyt
- Активный участник
- Сообщения: 777
- Зарегистрирован: 15 июл 2004, 13:15
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Тюмень
- Контактная информация:
Re: Как можно блокировать действие или шаг действия?
оофтопик, но я уже давно не видел на форуме одновременно ЧЕТЫРЕХ человек!
лучше день потерять, потом за пять минут долететь!
- Александр
- Активный участник
- Сообщения: 1652
- Зарегистрирован: 24 авг 2006, 08:06
- Используемое ПО: Lotsia PDM PLUS
- Откуда: 55.745578,37.665825
Re: Как можно блокировать действие или шаг действия?
watch-dog сторожевой таймер на действие если-бы лоция была зашита в плисине вот можно было-бы развернуться то!!! соскучился уже я по ним по микросхемам родным
я видел 7 сегодня 5+2глюка эт я о форуме
я видел 7 сегодня 5+2глюка эт я о форуме
Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный
- Disillusioned
- Активный участник
- Сообщения: 420
- Зарегистрирован: 15 июл 2004, 15:12
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Подольск
- Контактная информация:
Re: Как можно блокировать действие или шаг действия?
Пример:хм... а механизмом предотвращения повторной блокировки разве не будет тот самый цикл проверки наличия блокировки?
Два пользователя "почти одновременно" (разница в доли секунды) запустили действие. Если первый еще не успел установить блокиратор и выполнить Update(), второй получит информацию о незаблокированном счетчике. В обоих действиях будет выполнен AttribSet для установки блокиратора и оба действия будут считать, что работают со счетчиком в монопольном режиме. Такие ситуации будут, вопрос только в вероятности их возникновения.
Собственно, код пользователя, получается, и необязателен. Достаточно бизнес-правила. Тогда первый пользователь установит блокиратор, а у второго сработает бизнес-правило... Надо только сразу после блокировки update() сделать.
Ах и с ними невозможно
И без них никак нельзя
И без них никак нельзя
- Anderyt
- Активный участник
- Сообщения: 777
- Зарегистрирован: 15 июл 2004, 13:15
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Тюмень
- Контактная информация:
Re: Как можно блокировать действие или шаг действия?
вот блин...Disillusioned писал(а):Два пользователя "почти одновременно" (разница в доли секунды) запустили действие. Если первый еще не успел установить блокиратор и выполнить Update(), второй получит информацию о незаблокированном счетчике. В обоих действиях будет выполнен AttribSet для установки блокиратора и оба действия будут считать, что работают со счетчиком в монопольном режиме. Такие ситуации будут, вопрос только в вероятности их возникновения.
ну да, похоже...
блокиратор - это все равно какой то дополнительный атрибут?Disillusioned писал(а):Собственно, код пользователя, получается, и необязателен. Достаточно бизнес-правила. Тогда первый пользователь установит блокиратор, а у второго сработает бизнес-правило... Надо только сразу после блокировки update() сделать.
а что будет, когда сработает бизнес-правило? будет ошибка в действии?
как ее перехватывать?..
а если вместо attribset для установки блокиратора использовать attribadd - эффект будет другой?
просто боюсь приближаться к бизнес-правилам..
кстати..
мне кажется, нет такой необходимости.. такие объекты уже скорее всего созданы - откуда то ведь действия берут текущие значение счетчика?Disillusioned писал(а):Что если заранее централизовано создать некоторое количество объектов-"пустышек" у которых из всех атрибутов один только номер и есть. Тогда пользователю надо не создавать новый объект-"документ", а изменить существующую "пустышку".
лучше день потерять, потом за пять минут долететь!
- Disillusioned
- Активный участник
- Сообщения: 420
- Зарегистрирован: 15 июл 2004, 15:12
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Подольск
- Контактная информация:
Re: Как можно блокировать действие или шаг действия?
Он самый.блокиратор - это все равно какой то дополнительный атрибут?
Так точно. Не очень красиво, но если учесть что пересечение пользователей по времени очень маловероятно, на это можно не обращать внимание.а что будет, когда сработает бизнес-правило? будет ошибка в действии?
Эффект будет тот же самый.а если вместо attribset для установки блокиратора использовать attribadd - эффект будет другой?
Настоятельно рекомендую приблизится, полезная штука!просто боюсь приближаться к бизнес-правилам..
Ах и с ними невозможно
И без них никак нельзя
И без них никак нельзя
- Anderyt
- Активный участник
- Сообщения: 777
- Зарегистрирован: 15 июл 2004, 13:15
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Тюмень
- Контактная информация:
Re: Как можно блокировать действие или шаг действия?
фуф... ну я выходит хоть что то понялDisillusioned писал(а):Цитата:
Эффект будет тот же самый.
ок, спасибо!
думаю, если у нас снова поднимется вопрос с дубликатами - буду настраивать так, как договорились в этой ветке
лучше день потерять, потом за пять минут долететь!
- Старик Крупский
- Активный участник
- Сообщения: 803
- Зарегистрирован: 27 июл 2006, 22:17
- Откуда: Москва
Re: Как можно блокировать действие или шаг действия?
Если вызывать действие из действия, то вложенное действие и будет транзакцией. А судя по информации из Лоции - это будет уже в ближайшей сборке 4.30.Anderyt писал(а):да кто его знает..
сейчас вроде шаг с тремя функциями не моежт считаться одной транзакцией...
"Лучше меньше, да лучше" (C)