Текущее время: Пн, июл 21 2025, 23:27

Часовой пояс: 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