Текущее время: Вт, дек 16 2025, 03:32

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Пт, мар 25 2005, 07:08 
Гость
как вариант, без создания собственной таблицы можно воспользоваться ENQUEUE_ESINDX/DEQUEUE_ESINDX

CALL FUNCTION 'ENQUEUE_ESINDX'
EXPORTING
relid = 'ZZ'
srtfd = key
srtf2 = 0
EXCEPTIONS
foreign_lock = 1
system_failure = 2.

написав для них свои фм-адаптеры, в которых будет допустим в цикле вызываться ENQUEUE_ESINDX/DEQUEUE_ESINDX с параметром key, в котором будет зашито имя программы и счётчик. или вообще через класс глобальный сделать, с атрибутами "максимальное число инстанций" и "текущая заблокированная инстанция". можно с srtf2 поиграться - не пробовал. один ньюанс - длина параметра srtfd 22 символа.


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения: *
СообщениеДобавлено: Пт, мар 25 2005, 07:21 
Гость
а как тогда собирать логины тех, кто в данный момент уже сидит в транзакции (ну чтобы вывалить сообщение, что "превышен лимит инстанций, в транзакции сидят такието юзеры, звоните им и разруливайте")? С таблицей всё просто, а тут как быть?


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, мар 25 2005, 09:43 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Anonymous написал(а):
или вообще через класс глобальный сделать, с атрибутами "максимальное число инстанций" и "текущая заблокированная инстанция".

Очень заинтересовал предложенный Вами способ. Однако в версии 4.7 я не нашёл способа ограничить число инстанций глобального класса. Не подскажете, как это сделать?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, мар 25 2005, 10:11 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вс, окт 17 2004, 14:20
Сообщения: 326
Откуда: Москва
EGF написал(а):
Anonymous написал(а):
или вообще через класс глобальный сделать, с атрибутами "максимальное число инстанций" и "текущая заблокированная инстанция".

Очень заинтересовал предложенный Вами способ. Однако в версии 4.7 я не нашёл способа ограничить число инстанций глобального класса. Не подскажете, как это сделать?

Ограничить количество экземпляров класса можно так - делаешь тип Instantiation для этого класса = private (конструктор будет закрытым), закрытую переменную instance_count, открытый статический метод create_instance, возвращающий объект этого же класса. В этом методе проверяешь значение переменной instance_count и, если максимальное количество экземпляров еще не достигнуто, то создаешь экземпляр и возвращаешь его. Если уже достигнуто, то не создаешь и не возвращаешь :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, мар 25 2005, 10:38 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
ABC написал(а):
Ограничить количество экземпляров класса можно так - делаешь тип Instantiation для этого класса = private (конструктор будет закрытым), закрытую переменную instance_count, открытый статический метод create_instance, возвращающий объект этого же класса. В этом методе проверяешь значение переменной instance_count и, если максимальное количество экземпляров еще не достигнуто, то создаешь экземпляр и возвращаешь его. Если уже достигнуто, то не создаешь и не возвращаешь :)

Спасибо. То, что Вы описали, очень интересно. Однако я расчитывал на некую "волшебную" галочку.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:   Тема решена
СообщениеДобавлено: Пт, мар 25 2005, 10:48 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Ср, мар 16 2005, 09:37
Сообщения: 42
Откуда: Москва
ABC написал(а):
Ограничить количество экземпляров класса можно так - делаешь тип Instantiation для этого класса = private (конструктор будет закрытым), закрытую переменную instance_count, открытый статический метод create_instance, возвращающий объект этого же класса. В этом методе проверяешь значение переменной instance_count и, если максимальное количество экземпляров еще не достигнуто, то создаешь экземпляр и возвращаешь его. Если уже достигнуто, то не создаешь и не возвращаешь :)

Все это интересно, но...
Во-первых, методы поздней инициализации принято называть не create_instance, а get_instance.
Во-вторых, в абапе с деструкторами сложно и как тогда уменьшать счетчик?
И совершенно не понятно, на каком уровне создается (в смысле, инстанцируется) объект в системе: система, сервер приложений, мандант, сеанс, .....?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, мар 25 2005, 10:50 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вс, окт 17 2004, 14:20
Сообщения: 326
Откуда: Москва
EGF написал(а):
ABC написал(а):
Ограничить количество экземпляров класса можно так - делаешь тип Instantiation для этого класса = private (конструктор будет закрытым), закрытую переменную instance_count, открытый статический метод create_instance, возвращающий объект этого же класса. В этом методе проверяешь значение переменной instance_count и, если максимальное количество экземпляров еще не достигнуто, то создаешь экземпляр и возвращаешь его. Если уже достигнуто, то не создаешь и не возвращаешь :)

Спасибо. То, что Вы описали, очень интересно. Однако я расчитывал на некую "волшебную" галочку.

Ну описанный способ вроде не намного сложнее, чем "волшебная галочка". А вообще, если возвратиться к теме топика, то для счетчика запусков транзакции использовать класс с контролируемым количеством экземпляров не получится, т.к. контроль будет действовать только в текущем контексте, т.е. не будет оказывать влияния на других пользователей. Тут нужен контроль на уровне БД или блокировок, т.к. они глобальны по отношению к пользователям.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 28 2005, 04:23 
Гость
по порядку.
тему под гостем начал я.

насчёт логинов - можно зашивать в тот же key.

насчёт деструкторов - стандартный способ явно вызывать метод освобождения ресурсов.

насчёт контроля на уровне БД - поскольку функциональность отслеживания количества экземпляров скрыта за интерфейсом, то за ним можно делать всё что угодно - например, учёт влияния других пользователей - в запросе на количество экземпляров делать инкрементальный вызов ФМ, что конечно неэффективно с точки зрения нагрузки на БД. а если базис ещё посвежее, то лучше сразу использовать Persistence Service(
[url]http://help.sap.com/saphelp_nw04/helpdata/en/b0/9d0a3ad259cd58e10000000a11402f/frameset.htm
[/url])


Пометить тему как нерешенную
Вернуться к началу
  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB