Как изменить код, чтобы он подходил как для обычного SAP, так и для NetWeaver?
blockquote>
Пользовательский интерфейс SAP R / 3 (я полагаю, что вы R / 3 на основе вашего снимка экрана) взаимодействие происходит с использованием SAP GUI Scripting API
SAP NetWeaver работает как сервер веб-приложений для продуктов SAP, вы не можете использовать то же решение как для настольных, так и для веб-приложений
Так что, к сожалению, для автоматизации SAP NetWeaver должен быть совершенно иной подход, основанный на автоматизации веб-браузера (например, Selenium + VBA) или платформах RPA, имеющих веб средства автоматизации под капотом (например, UIPath).
Используя 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)
Можно присвоить каждому процессу средства выбора уникальный идентификатор и добавить столбцы pickerproc и pickstate к записям. Затем
ОБНОВЛЕНИЕ MyRecords
НАБОР pickerproc = myproc,
pickstate = 'я' - для 'процесса I'n
ГДЕ идентификатор = (ВЫБИРАЮТ МАКСА (идентификатор) ИЗ MyRecords ГДЕ pickstate =) - 'A'vailable
Это получает Вас Ваша запись на одном атомарном шаге, и можно сделать остальную часть обработки на досуге. Затем можно установить pickstate на 'C'omplete', 'E'rror, или безотносительно, когда он разрешен.
Я думаю, что Mitch обращается к другой хорошей технике, где Вы составляете таблицу очереди сообщений и вставляете Ids там. Существуют несколько, ТАКИМ ОБРАЗОМ, потоки - ищут 'таблицу очереди сообщений'.
Можно сохранить MyRecords на таблице "MEMORY" для более быстрой обработки.