Как можно блокировать действие или шаг действия?
- Александр
- Активный участник
- Сообщения: 1658
- Зарегистрирован: 24 авг 2006, 08:06
- Используемое ПО: Lotsia PDM PLUS
- Откуда: 55.745578,37.665825
Как можно блокировать действие или шаг действия?
ситуация такая
есть номер (в атрибуте)
есть действие которое прибавляет к этому номеру 1
проблема в том что пару раз сталкивались с тем что два юзера одновременно с разностью в пол секунды запускали это действие и получали одинаковый номер - что не совсем интересно спасал только 'хвост' id юзера из базы - иначе-бы не разошлись
вот собственно и вопрос как заблокировать/поставить на ожидание действие (или его часть) для всех если оно уже кем то запущено???
есть номер (в атрибуте)
есть действие которое прибавляет к этому номеру 1
проблема в том что пару раз сталкивались с тем что два юзера одновременно с разностью в пол секунды запускали это действие и получали одинаковый номер - что не совсем интересно спасал только 'хвост' id юзера из базы - иначе-бы не разошлись
вот собственно и вопрос как заблокировать/поставить на ожидание действие (или его часть) для всех если оно уже кем то запущено???
Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный
- Anderyt
- Активный участник
- Сообщения: 777
- Зарегистрирован: 15 июл 2004, 13:15
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Тюмень
- Контактная информация:
Re: Как можно блокировать действие или шаг действия?
мы для уменьшения вероятности одинаковых номеров поступили следующим образом.
действие запускается, работает над чем то, а когда дело доходит до получения порядкового номера - получает его от определенного объекта и ТУТ ЖЕ обновляет счетчик, увеличивая его на 1. для этого используем update().
вероятность одинаковых номеров стала намного меньше (но они каикм то образом все таки встречаются, но ОЧЕНЬ-ОЧЕНЬ редко).
один из минусов - если отменить действие, которое уже успело получить свой порядковый номер, то номер пропадает, то есть выпадает из цепочки. какое то время объясняли юзерам, что это не страшно, вроде в итоге объяснили.
хотя конечно можно брать номер на шаге, после которого уже сложно отменить действие (когда например остались только автоматические шаги).. тогда и вероятность пропусков тоже уменьшится..
действие запускается, работает над чем то, а когда дело доходит до получения порядкового номера - получает его от определенного объекта и ТУТ ЖЕ обновляет счетчик, увеличивая его на 1. для этого используем update().
вероятность одинаковых номеров стала намного меньше (но они каикм то образом все таки встречаются, но ОЧЕНЬ-ОЧЕНЬ редко).
один из минусов - если отменить действие, которое уже успело получить свой порядковый номер, то номер пропадает, то есть выпадает из цепочки. какое то время объясняли юзерам, что это не страшно, вроде в итоге объяснили.
хотя конечно можно брать номер на шаге, после которого уже сложно отменить действие (когда например остались только автоматические шаги).. тогда и вероятность пропусков тоже уменьшится..
лучше день потерять, потом за пять минут долететь!
- Александр
- Активный участник
- Сообщения: 1658
- Зарегистрирован: 24 авг 2006, 08:06
- Используемое ПО: Lotsia PDM PLUS
- Откуда: 55.745578,37.665825
Re: Как можно блокировать действие или шаг действия?
номер ставим на последнем шаге вместе с Update
читаем правда на предпоследнем
....
может шаг все-же является 'изолированной' (однозадачной) конструкцией???
попробую 2 in 1
к сожалению (к счастью) у нас это тоже случалось крайне редко - 2-3 раза за всю историю
так что результат увижу (если увижу) не скоро
ps
а может попросить добавить функции под это дело??? для блокировки шага/шагов?
читаем правда на предпоследнем
....
может шаг все-же является 'изолированной' (однозадачной) конструкцией???
попробую 2 in 1

к сожалению (к счастью) у нас это тоже случалось крайне редко - 2-3 раза за всю историю
так что результат увижу (если увижу) не скоро
ps
а может попросить добавить функции под это дело??? для блокировки шага/шагов?
Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный
- Anderyt
- Активный участник
- Сообщения: 777
- Зарегистрирован: 15 июл 2004, 13:15
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Тюмень
- Контактная информация:
Re: Как можно блокировать действие или шаг действия?
да кто его знает..
тоже ломал голову, как такое может быть, что одинаковые номера все же появлялись..
раньше было без update - вот была веселуха!
если 2-е действие запустить, когда первое еще не выполнено, то они схватывают один и тот же номер и используют его
но с update вроде стало намного правильнее..
думаю, можно стремиться к приближению attribget, attribset и update друг к другу, чтобы между ними было как можно меньше времени (в одном шаге хотя бы).. надеясь на транзакционность работы сервера БД можно надеяться, что совсем одновременно данные не смогут записаться...
но с другой стороны.. надежнее было бы рассматривать получение номера, увеличение счетчика и обновление счетчика как одну транзакцию.. вот тогда было бы да..
сейчас вроде шаг с тремя функциями не моежт считаться одной транзакцией...
вот блин... в такие моменты я невольно вспоминаю форум Касперского.. там пользователи так же задают вопросы, думают, обсуждают решение... но там время от времени в беседу включаются сотрудники Касперского..
а здесь почему не так???
гадаем тут что то... как да как...
тоже ломал голову, как такое может быть, что одинаковые номера все же появлялись..
раньше было без update - вот была веселуха!

если 2-е действие запустить, когда первое еще не выполнено, то они схватывают один и тот же номер и используют его

но с update вроде стало намного правильнее..
думаю, можно стремиться к приближению attribget, attribset и update друг к другу, чтобы между ними было как можно меньше времени (в одном шаге хотя бы).. надеясь на транзакционность работы сервера БД можно надеяться, что совсем одновременно данные не смогут записаться...
но с другой стороны.. надежнее было бы рассматривать получение номера, увеличение счетчика и обновление счетчика как одну транзакцию.. вот тогда было бы да..
сейчас вроде шаг с тремя функциями не моежт считаться одной транзакцией...
вот блин... в такие моменты я невольно вспоминаю форум Касперского.. там пользователи так же задают вопросы, думают, обсуждают решение... но там время от времени в беседу включаются сотрудники Касперского..
а здесь почему не так???
гадаем тут что то... как да как...

лучше день потерять, потом за пять минут долететь!
- Александр
- Активный участник
- Сообщения: 1658
- Зарегистрирован: 24 авг 2006, 08:06
- Используемое ПО: Lotsia PDM PLUS
- Откуда: 55.745578,37.665825
Re: Как можно блокировать действие или шаг действия?
а что гадать
техподдержка здесь не отвечает - так что в развитие переведем - туда как никак заглядывают люди принимающие решения
а вдруг?





а вдруг?


Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный
- Anderyt
- Активный участник
- Сообщения: 777
- Зарегистрирован: 15 июл 2004, 13:15
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Тюмень
- Контактная информация:
Re: Как можно блокировать действие или шаг действия?
дак вот это и плохо..Александр писал(а):а что гадать техподдержка здесь не отвечает
я конечно догадываюсь, что других проблем хватает..
но это смотря как смотреть на ЭТУ проблему.
если просто как общение на приближенные к Лоции темы - то наверное на самом деле Николай Викторович прав, когда грозится премии лишить..
но если осуществлять здесь техподдержку - это совсем другое дело..
то ли в письмах одно и тоже всем рассказывать и показывать, то ли один раз на форуме все разжевать и потом пусть народ сам ищет (или хотя бы ссылки кидать в ответ)..
и кроме того, ведь письма не все пишут.. кто нить наверное просто сидит, бьется и корпит над Лоцией, и ругает ее про себя, типа "непонятная, сложная и все такое", а все потому, что не знает, как ей пользоваться.. а зачем нужны такие клиенты с такой антирекламой? лучше их переубедить, чтобы по-нормальному рекламировали..

лучше день потерять, потом за пять минут долететь!
-
- Site Admin
- Сообщения: 403
- Зарегистрирован: 18 июн 2004, 17:53
- Используемое ПО: Lotsia PLM
Re: Как можно блокировать действие или шаг действия?
Господа, если вы хотите получать ответы на вопросы по технической поддержке, следует отправлять их по электронной почте.
Ещё раз уточняем, что официальная техподдержка в форуме не отвечает. Форум служит для общения пользователей.
Как вы знаете, мы - в отличие от наших коллег из некоторых других компаний-разработчиков - не удаляем критические замечания из сообщений на этом форуме. Более того, мы не удаляем критические замечания не только пользователей, но и наших партнёров, хотя они и несколько нарушают иной раз своими высказываниями правила деловой этики.
Но если человек не пишет в техподдержку, а потом начинает ругаться на форуме, что "всё плохо", - наверное, это не очень правильно. Также, вероятно, не очень корректно сначала получать помощь от техподдержки, а потом критиковать её, вырывая фразы и события из контекста. Так что необоснованные замечания и ругань мы будем удалять.
Разумеется, нам не хотелось бы, чтобы форум превращался в "стену плача". Но если вы настаиваете, мы легко пересмотрим нашу политику в этой части. И будут у нас публиковаться только "позитивные" сообщения.
И ещё, мы пока не готовы предоставлять бесплатную техническую поддержку через форум лицам, использующим наше ПО без лицензии. Надеемся на ваше понимание.
Ещё раз уточняем, что официальная техподдержка в форуме не отвечает. Форум служит для общения пользователей.
Необходимые дополнительные разъяснение относительно "антирекламы".Anderyt писал(а):и кроме того, ведь письма не все пишут.. кто нить наверное просто сидит, бьется и корпит над Лоцией, и ругает ее про себя, типа "непонятная, сложная и все такое", а все потому, что не знает, как ей пользоваться.. а зачем нужны такие клиенты с такой антирекламой? лучше их переубедить, чтобы по-нормальному рекламировали..
Как вы знаете, мы - в отличие от наших коллег из некоторых других компаний-разработчиков - не удаляем критические замечания из сообщений на этом форуме. Более того, мы не удаляем критические замечания не только пользователей, но и наших партнёров, хотя они и несколько нарушают иной раз своими высказываниями правила деловой этики.
Но если человек не пишет в техподдержку, а потом начинает ругаться на форуме, что "всё плохо", - наверное, это не очень правильно. Также, вероятно, не очень корректно сначала получать помощь от техподдержки, а потом критиковать её, вырывая фразы и события из контекста. Так что необоснованные замечания и ругань мы будем удалять.
Разумеется, нам не хотелось бы, чтобы форум превращался в "стену плача". Но если вы настаиваете, мы легко пересмотрим нашу политику в этой части. И будут у нас публиковаться только "позитивные" сообщения.

И ещё, мы пока не готовы предоставлять бесплатную техническую поддержку через форум лицам, использующим наше ПО без лицензии. Надеемся на ваше понимание.
-
- Активный участник
- Сообщения: 239
- Зарегистрирован: 13 янв 2005, 14:30
- Используемое ПО: Lotsia PDM PLUS LT
- Откуда: Украина, Донецк
- Контактная информация:
Re: Как можно блокировать действие или шаг действия?
Выход из данной ситуации такой - создать свою табличку и в ней хранить значения
счетчиков. При считывании значения делать это командой SQL с установкой блокировки
наращивать значение и отпускать таблицу.
При таком подходе если кто-то в момент установленной блокировки попытается
считать значение - он будет ожидать конца блокировки, и только после этого получит значение.
В таком варианте вообще невозможно получить два одинаковых номера.
счетчиков. При считывании значения делать это командой SQL с установкой блокировки
наращивать значение и отпускать таблицу.
При таком подходе если кто-то в момент установленной блокировки попытается
считать значение - он будет ожидать конца блокировки, и только после этого получит значение.
В таком варианте вообще невозможно получить два одинаковых номера.
- Александр
- Активный участник
- Сообщения: 1658
- Зарегистрирован: 24 авг 2006, 08:06
- Используемое ПО: Lotsia PDM PLUS
- Откуда: 55.745578,37.665825
Re: Как можно блокировать действие или шаг действия?
вот эту бы блокировку и вынести в виде пары функций Party - для шага или действия в целом
....
неохота опять в SQL залезать
и так уже много своих xp и видов создали
теперь уже избавляемся от них понемногу... функционала Лоции достаточно на 90% наших задач, в остальном - лучше изменим свою структуру данных
и выдвинем пару предложений на развитие
....
неохота опять в SQL залезать







Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный
-
- Активный участник
- Сообщения: 239
- Зарегистрирован: 13 янв 2005, 14:30
- Используемое ПО: Lotsia PDM PLUS LT
- Откуда: Украина, Донецк
- Контактная информация:
Re: Как можно блокировать действие или шаг действия?
Если вы хотите заблокировать действие - это еще проще:
Для этого нам необходимо создать общую временную таблицу во время запуска действия.
1. при запуске действия проверяем есть ли таблица, если нет создаем ее (таблица вида ##имя MSSQL)
2. далее проверяем есть ли в ней признак что это действие необходимо блокировать, если есть - зацикливаемся
до пропадания данного признака.
Далее добавляем этот признак и делаем свои действия. Перед выходом из действия
убираем признак.
Признак может быть строкой типа "счетчик № 1" или другой, по вкусу.
Для этого нам необходимо создать общую временную таблицу во время запуска действия.
1. при запуске действия проверяем есть ли таблица, если нет создаем ее (таблица вида ##имя MSSQL)
2. далее проверяем есть ли в ней признак что это действие необходимо блокировать, если есть - зацикливаемся
до пропадания данного признака.
Далее добавляем этот признак и делаем свои действия. Перед выходом из действия
убираем признак.
Признак может быть строкой типа "счетчик № 1" или другой, по вкусу.
-
- Активный участник
- Сообщения: 239
- Зарегистрирован: 13 янв 2005, 14:30
- Используемое ПО: Lotsia PDM PLUS LT
- Откуда: Украина, Донецк
- Контактная информация:
Re: Как можно блокировать действие или шаг действия?
Если блокировать атрибуты Лоции - повиснет она у всех...Александр писал(а):вот эту бы блокировку и вынести в виде пары функций Party - для шага или действия в целом
....
Вот я и предлагаю свою структуру. А реализацию предложений для развития можно и не дождаться...Александр писал(а):лучше изменим свою структуру данных![]()
![]()
и выдвинем пару предложений на развитие

- Александр
- Активный участник
- Сообщения: 1658
- Зарегистрирован: 24 авг 2006, 08:06
- Используемое ПО: Lotsia PDM PLUS
- Откуда: 55.745578,37.665825
Re: Как можно блокировать действие или шаг действия?
хотелось конечно базовым функционалом - я например второй раз не смогу погрузиться в SQL настолько чтобы понять как же он работает
- не мое
а развитие - идет и в лучшую сторону
ps
вот только последнего обновления хочется дождаться уже в этом году или хотя-бы интересующей меня части




а развитие - идет и в лучшую сторону



ps
вот только последнего обновления хочется дождаться уже в этом году или хотя-бы интересующей меня части



Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный
- Anderyt
- Активный участник
- Сообщения: 777
- Зарегистрирован: 15 июл 2004, 13:15
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Тюмень
- Контактная информация:
Re: Как можно блокировать действие или шаг действия?
Юрий, а нельзя сделать примерно то же самое, с блокировкой и зацикливанием, но силами самого действия, без использования временных таблиц и всего остального богатства сервера? 

лучше день потерять, потом за пять минут долететь!
-
- Активный участник
- Сообщения: 239
- Зарегистрирован: 13 янв 2005, 14:30
- Используемое ПО: Lotsia PDM PLUS LT
- Откуда: Украина, Донецк
- Контактная информация:
Re: Как можно блокировать действие или шаг действия?
Необходима общая ячейка для флага блокировки, если предположить
что мы делаем это силами действия, то возникает аналогичная проблема, так как контейнером
флага будет атрибут и скорость срабатывания будет недостаточно быстрой.
Для этого нам нужна временная общая таблица, потому что время записи значения в эту таблицу
очень мало, что сводит практически на нет возможность одновременной записи.
В данной реализации зацикливается именно действие. А SQL мы используем только для создания
временной таблицы, проверки ее существования и проверки блокировки(проверки нахождения в этой таблице
интересующей нас записи), а все остальное штатными средствами действия.
что мы делаем это силами действия, то возникает аналогичная проблема, так как контейнером
флага будет атрибут и скорость срабатывания будет недостаточно быстрой.
Для этого нам нужна временная общая таблица, потому что время записи значения в эту таблицу
очень мало, что сводит практически на нет возможность одновременной записи.
В данной реализации зацикливается именно действие. А SQL мы используем только для создания
временной таблицы, проверки ее существования и проверки блокировки(проверки нахождения в этой таблице
интересующей нас записи), а все остальное штатными средствами действия.
- Александр
- Активный участник
- Сообщения: 1658
- Зарегистрирован: 24 авг 2006, 08:06
- Используемое ПО: Lotsia PDM PLUS
- Откуда: 55.745578,37.665825
Re: Как можно блокировать действие или шаг действия?
а можно из действия проверить запущено ли это действие другими?? и если да то подождать в самом действии запуская запросы на проверку занятости?
экземпляр действия говорит...
типа - 'меня запускают - а могу ли я запуститься или стоит подождать'

циклическая ссылка на самого себя или на экземпляр...ы
экземпляр действия говорит...
типа - 'меня запускают - а могу ли я запуститься или стоит подождать'




циклическая ссылка на самого себя или на экземпляр...ы
Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный