Axapta 错误:光标对于实例化recordViewCache无效
我试图重新使用一个类,并在作业中运行它,以证明某些东西。以下是职务代码:Axapta 错误:光标对于实例化recordViewCache无效,axapta,x++,dynamics-ax-2009,Axapta,X++,Dynamics Ax 2009,我试图重新使用一个类,并在作业中运行它,以证明某些东西。以下是职务代码: InventQuarantineOrder_Scrap scrap = new InventQuarantineOrder_Scrap(); ; scrap.parmInventQuarantineId('00016749_077'); scrap.parmScrapQty(360); scrap.parmTransDate(Today()); scrap.run(); 当我运行此代码时,我得到错误: 光标对于实例化
InventQuarantineOrder_Scrap scrap = new InventQuarantineOrder_Scrap();
;
scrap.parmInventQuarantineId('00016749_077');
scrap.parmScrapQty(360);
scrap.parmTransDate(Today());
scrap.run();
当我运行此代码时,我得到错误:
光标对于实例化recordViewCache无效
通过研究这个错误,我得到了这个,我试图实现它,但我得到了语法错误,我不知道如何修复。我复制了这个类并创建了一个新的runOnServer方法。但是验证方法不起作用。因此,我修改了validate方法以在服务器上运行:
static server boolean validate()
{
InventQuarantineOrder inventQuarantineOrder = InventQuarantineOrder::find(inventQuarantineId);
;
....
}
这给了我这个错误:
尚未声明inventQuarantineId变量
如果我注释掉runOnServer方法中的validate()调用,则不会声明inventQuarentineId变量(它也在run方法中使用),会出现相同的错误/问题
从这里开始,我不知道如何继续。我做错了什么?是否可以在服务器方法中使用这些方法?我认为另一件值得注意的事情是,我认为作业代码实际上是有效的,但它确实抛出了3行“游标对于实例化recordViewCache无效。”信息警报。正如您已经发现的那样,
recordViewCache
只能在服务器层上使用。通过在客户端层上的作业中启动进程,也会在客户端层上执行创建RecordViewCache
(表InventTrans
的方法viewCacheInventTransId
)的方法,从而导致错误。如果在此方法中放置断点,调试器中的调用堆栈将显示以下内容:
Tier Method Line
[c] \Data Dictionary\Tables\InventTrans\Methods\viewCacheInventTransId 9
[c] \Classes\InventMovement\viewCacheInventTransId 7
[s] \Classes\InventUpd_Financial\initUpdate 14
[s] \Classes\InventUpd_Financial\newVirtuelQuarantineLoss 19
[c] \Classes\InventQuarantineOrder_Scrap\run 76
[c] \Jobs\Job4
您在链接中给出的解决方案对于您的案例来说比需要的复杂一点(我的评论是我修复此解决方案的第一个想法)。您只需要使用执行作业代码的静态服务器方法创建一个类。然后可以在代码中调用此静态服务器方法。现在,调试器将向您显示以下调用堆栈:
Tier Method Line
[s] \Data Dictionary\Tables\InventTrans\Methods\viewCacheInventTransId 9
[s] \Classes\InventMovement\viewCacheInventTransId 7
[s] \Classes\InventUpd_Financial\initUpdate 14
[s] \Classes\InventUpd_Financial\newInventQuarantineOrder 21
[s] \Data Dictionary\Tables\InventQuarantineOrder\Methods\startFinancial 12
[s] \Classes\InventQuarantineOrder_Scrap\run 54
[s] \Classes\Class1\jobOnServer 10
[c] \Jobs\Job4 5
您已经发现,
RecordViewCache
只能在服务器层上使用。通过在客户端层上的作业中启动进程,也会在客户端层上执行创建RecordViewCache
(表InventTrans
的方法viewCacheInventTransId
)的方法,从而导致错误。如果在此方法中放置断点,调试器中的调用堆栈将显示以下内容:
Tier Method Line
[c] \Data Dictionary\Tables\InventTrans\Methods\viewCacheInventTransId 9
[c] \Classes\InventMovement\viewCacheInventTransId 7
[s] \Classes\InventUpd_Financial\initUpdate 14
[s] \Classes\InventUpd_Financial\newVirtuelQuarantineLoss 19
[c] \Classes\InventQuarantineOrder_Scrap\run 76
[c] \Jobs\Job4
您在链接中给出的解决方案对于您的案例来说比需要的复杂一点(我的评论是我修复此解决方案的第一个想法)。您只需要使用执行作业代码的静态服务器方法创建一个类。然后可以在代码中调用此静态服务器方法。现在,调试器将向您显示以下调用堆栈:
Tier Method Line
[s] \Data Dictionary\Tables\InventTrans\Methods\viewCacheInventTransId 9
[s] \Classes\InventMovement\viewCacheInventTransId 7
[s] \Classes\InventUpd_Financial\initUpdate 14
[s] \Classes\InventUpd_Financial\newInventQuarantineOrder 21
[s] \Data Dictionary\Tables\InventQuarantineOrder\Methods\startFinancial 12
[s] \Classes\InventQuarantineOrder_Scrap\run 54
[s] \Classes\Class1\jobOnServer 10
[c] \Jobs\Job4 5
您需要使用pack/unpack模式将变量的值从客户端传输到服务器层。我一找到时间(或者有人抢先告诉我)就会写一个答案。您需要使用打包/解包模式将变量的值从客户端传输到服务器层。我一找到时间(或者有人抢先我一步)就会写一个答案。