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模式将变量的值从客户端传输到服务器层。我一找到时间(或者有人抢先告诉我)就会写一个答案。您需要使用打包/解包模式将变量的值从客户端传输到服务器层。我一找到时间(或者有人抢先我一步)就会写一个答案。