Axapta 代码是在客户端运行还是作为批处理作业运行?

Axapta 代码是在客户端运行还是作为批处理作业运行?,axapta,x++,dynamics-ax-2009,Axapta,X++,Dynamics Ax 2009,有没有办法确定代码是在客户端还是在批处理作业中执行?我曾想过使用并检查用户是否是我们用于批处理作业的用户,但如果用户发生更改,这种方法将失败 我试图在运行到客户机时使用Yes/No对话框修改tableVendTable的update方法,但我不希望在代码以批处理方式运行时发生这种情况 有什么想法吗?对于扩展了runbasebatch的批处理类,您可以使用this.isInBatch()。如果代码在批处理中运行,则返回true;如果不在批处理中运行,则返回false。然后可以将其作为参数传递给其他

有没有办法确定代码是在客户端还是在批处理作业中执行?我曾想过使用并检查用户是否是我们用于批处理作业的用户,但如果用户发生更改,这种方法将失败

我试图在运行到客户机时使用Yes/No对话框修改table
VendTable
update
方法,但我不希望在代码以批处理方式运行时发生这种情况


有什么想法吗?

对于扩展了
runbasebatch
的批处理类,您可以使用
this.isInBatch()
。如果代码在批处理中运行,则返回true;如果不在批处理中运行,则返回false。然后可以将其作为参数传递给其他类。(我建议这样做)

不过需要注意的是,您不应该在
VendTable
表的
update
方法中显示对话框,因为您不应该在我假设的事务中进行用户交互


如果希望在用户在表单上写入记录时进行用户交互,请尝试覆盖表单数据源的写入方法。这将在写入(插入、更新)记录时执行。您可以在此处请求用户输入。例如,检查purctable表单(purctable ds,write方法),它应该包含类似的内容(它要求将字段从标题复制到行)

对不起,我更正了我要执行此操作的位置。将该对话框置于任何
ttsbegin
之前是否算作“事务中的用户交互”?嗨,弗朗西斯。如果代码在
update
方法中,它将始终在事务中,否则更新将失败。如果将对话框放在all
ttsbegin
call之前,则它将不在事务中。但是,您的代码可能被创建事务的其他代码调用。您可以检查
appl.ttsLevel()==0
,它检查当前的ttlevel是否为
0
。顺便说一句,事务中用户交互的问题是,它可能会导致长时间运行的事务和不平衡的TTS级别。尝试调整您的设计:-)。我删除了关于xsession的部分,它不是防弹的,所以您最好不要使用它。最好的方法是先进行用户交互,然后进行业务逻辑。如果您不能这样做,请使用
isinbatch()
,但这只适用于批处理类。因此,如果我希望在用户修改客户端中的供应商时弹出对话框,我最好修改“保存”按钮的代码,而不是
更新
方法。我不知道这是否可能,我会调查一下。Francis,这会覆盖您形成数据源的
write
方法。这将在写入(插入、更新)记录时执行。您可以在此处请求用户输入。例如,检查purctable表单(purctable ds,write方法),它应该包含类似的内容(它要求将字段从标题复制到行)