Идею реализовал и оттестировал. вкратце:
сделал стат методы класса test, из джобиков вызывал testRunBufCS изменяя модификатор client/server метода RunBufT (метод вызывает тестовый runBuf).
testRunBufCS1 - серверная реализация тестового механизма для тестирования 2х одновременных серверных исполнений.
Результаты одновременного запуска testRunBufCS и testRunBufCS1 в разных клиентах:
1) при запуске тестов с модификаторами server как и ожидалось произошел сбой.
2) в RunBufT ставим модификатор client - при запуске тестов все отработало без ошибок (1 runBuf исполнился в серверном процессе, 2-й в клиентском)
Результаты задержек при исполнении runBuf на клиенте:
1) RunBufT на сервере - 18 сек
2) RunBufT на клиенте - 37 сек
Т.о. задержка при передаче исполнения клиенту возрастает в 2 раза при данной реализации вызова runBuf.
X++:
static server void testRunBufCS()
{
inventTable it;
str s;
int cnt;
;
timeStamp();
while select it
{
s=test::RunBufT(it.ItemId, it);
cnt++;
}
info(int2str(cnt));
timeStamp();
}
X++:
static client str RunBufT(str _s, common _c)
{
str expr;
;
expr=@'str convert2(str _s, common _c)
{
inventTable it = _c;
inventItemGroup iig = inventItemGroup::find(it.ItemGroupId);
;
return _s+iig.Name;
}';
return runbuf(expr,_s,_c);
}
X++:
static server void testRunBufCS1()
{
inventTable it;
str s;
int cnt;
str expr;
;
expr=@'str convert2(str _s, common _c)
{
inventTable it = _c;
inventItemGroup iig = inventItemGroup::find(it.ItemGroupId);
;
return _s+iig.Name;
}';
timeStamp();
while select it
{
s=runbuf(expr,it.ItemId, it);
cnt++;
}
info(int2str(cnt));
timeStamp();
}
PS: к слову, при реализации RunBufT как
static server str RunBufT(str _s, common _c, common _c1, common _c2 ), время выполнеия у меня следующее: 47 / 79 (сервер/клиент соответственно)