Эффективная транзакция, захват записей

Как изменить код, чтобы он подходил как для обычного SAP, так и для NetWeaver?

  • Пользовательский интерфейс SAP R / 3 (я полагаю, что вы R / 3 на основе вашего снимка экрана) взаимодействие происходит с использованием SAP GUI Scripting API

  • SAP NetWeaver работает как сервер веб-приложений для продуктов SAP, вы не можете использовать то же решение как для настольных, так и для веб-приложений

Так что, к сожалению, для автоматизации SAP NetWeaver должен быть совершенно иной подход, основанный на автоматизации веб-браузера (например, Selenium + VBA) или платформах RPA, имеющих веб средства автоматизации под капотом (например, UIPath).

5
задан Jeremy 22 February 2009 в 07:57
поделиться

3 ответа

Используя READPAST, блокирующий подсказку, корректно и Ваша внешность SQL хорошо.

Я добавил бы использование XLOCK хотя, который является также HOLDLOCK/SERIALIZABLE

...
[MyRecords] WITH (READPAST, ROWLOCK, XLOCK)
...

Это означает, что Вы получаете идентификатор и исключительно блокируете ту строку, в то время как Вы продолжаете и обновляете его.

Править: добавьте индекс на столбцах Dispatched и Received для создания этого более быстрым. Если [идентификатор] (я предполагаю, что это - PK), не кластеризируется, ВКЛЮЧАЙТЕ [идентификатор]. И отфильтруйте индекс также, потому что это - SQL 2008

Вы могли также использовать эту конструкцию, которая делает все это сразу без XLOCK или HOLDLOCK

UPDATE
    MyRecords
SET
    --record the row ID
    @id = [ID],
    --flag doing stuff
    [Dispatched] = GETDATE()
WHERE
    [ID] = (SELECT TOP 1 [ID] FROM MyRecords WITH (ROWLOCK, READPAST) WHERE Dispatched IS NULL ORDER BY Received)

ОБНОВИТЕ, присвойте, установите в одном

3
ответ дан 15 December 2019 в 06:35
поделиться

Можно присвоить каждому процессу средства выбора уникальный идентификатор и добавить столбцы pickerproc и pickstate к записям. Затем

ОБНОВЛЕНИЕ MyRecords
НАБОР pickerproc = myproc,
pickstate = 'я' - для 'процесса I'n
ГДЕ идентификатор = (ВЫБИРАЮТ МАКСА (идентификатор) ИЗ MyRecords ГДЕ pickstate =) - 'A'vailable

Это получает Вас Ваша запись на одном атомарном шаге, и можно сделать остальную часть обработки на досуге. Затем можно установить pickstate на 'C'omplete', 'E'rror, или безотносительно, когда он разрешен.

Я думаю, что Mitch обращается к другой хорошей технике, где Вы составляете таблицу очереди сообщений и вставляете Ids там. Существуют несколько, ТАКИМ ОБРАЗОМ, потоки - ищут 'таблицу очереди сообщений'.

0
ответ дан 15 December 2019 в 06:35
поделиться

Можно сохранить MyRecords на таблице "MEMORY" для более быстрой обработки.

0
ответ дан 15 December 2019 в 06:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: