Текущее время: Вт, июл 22 2025, 04:37

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


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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