AX有个很不错的功能,可以隐藏或者显示某个维度,比如仓库,库位,批处理号等,这样的操作几乎在涉及业务的各个窗体都有,比如销售,采购订单行,库存日志,物料现有量,等等窗体,都可以库存->维度显示 按钮进行相关维度的设置。这个功能在大多数情况下没什么问题,只是有些时候用户想每次进入的时候都显示特定的维度,这个时候就有些困惑,当然我们可以要求用户去选择 维度显示窗体里的 保存设置,但是由于AX的这个功能是依托于SysPackable接口的,它的实现机制跟RunBase的保存用户的选择完全一样,所以这样所有的用户都要在每个窗体上操作一遍类似的动作。其实有些公司的物料的维度设定是差不多的,比如其实都只有仓库维度,去要求每个用户都每个窗体都做一遍这动作确实有些残忍,有几个同行跟我讨论过这个问题,在这里记录一下。

我们知道在RunBase框架下,如果SysLastValue表里没有保存用户的选择记录,也就是如果用户是第一次操作某个窗体或者报表,AX用initParmDefault去初始化一些值。AX中控制维度显示与否是通过InventDimCtrl及其一系列的子类实现的,其中其直接子类InventDimCtrl_Frm实现了SysPackable接口,可以保存用户输入。与RunBase框架下的保存用户输入一样,InventDimCtrl_Frm也预留了initParmDefault这个方法,由于Sys层的实现者并不知道具体使用AX的公司需要显示哪些维度,所以他也不好在这个方法里写代码,于是这个方法并没有实现。
更改维度显示void initParmDefault()
}

如果我们在实施的时候具体知道需要显示哪些维度,就可以在这里写代码了,比如如下代码:
更改维度显示void initParmDefault()
}


注意这里有一点与RunBase的不同之处,RunBase里只有在用户没有操作过该窗体时才会调用initParmDefault方法,一旦操作过了,就会在SysLastValue里有了记录,也就不会调用initParmDefalut方法了,这是因为一般情况下如果SysLastValue表里有了相应的值,通过unPack方法恢复的时候,unPack方法都会返回true,而在类xSysLastValue的get方法里会根据unPack方法的返回值决定是否调用initParmDefault方法,一般情况下只有在SysLastValue表里没找到对应的记录的时候才会返回false,于是会调用initParmDefault,但是类InventDimCtrl_Frm的unPack方法

更改维度显示public boolean unpack(container packedClass)
}

我们可以看到,该方法的最后返回的false,这样它始终会调用initParmDefault,于是如果你在initParmDefalut方法里加了要显示某个维度的话,它就按照在InitParmDefault中指定的维度与用户上次保存的维度取并集来显示了,我不是很清楚是写Sys层代码的哥们故意为之还是手误,无所谓了,如果觉得奇怪,让unPack返回ture好了,这样一旦用户操作过该窗体并选择了保存设置就不会调用InitParmDefault方法了。

相关文章:

  • 2021-05-25
  • 2021-05-29
  • 2022-12-23
  • 2022-12-23
  • 2021-10-12
  • 2021-12-14
  • 2022-12-23
  • 2021-07-26
猜你喜欢
  • 2022-01-12
  • 2022-01-15
  • 2021-04-06
  • 2021-12-10
  • 2022-12-23
  • 2022-12-23
  • 2021-07-18
相关资源
相似解决方案