我想自定义SOLineInventoryID
选择器,以根据它们所属的类的值过滤掉某些库存项目。我已经阅读了有关该[PXRestrictor]
属性及其如何用于过滤选择器的信息。这似乎可行,除了Item类名称在该DAC中不可用之外,因此我尝试了以下操作:
[PXRestrictor(typeof(SelectFrom<InventoryItem>.
InnerJoin<INItemClass>.On<INItemClass.itemClassID.IsEqual<InventoryItem.itemClassID>>.
Where<INItemClass.itemClassCD.IsEqual<itemClassValue>>), "Custom items")]
但这显然是不允许的。
似乎我需要重写选择器本身,但是现有的选择器相当复杂,并且隐藏在属性层之下,我不确定该如何复制,更不用说那个选择看起来很近了。
我该如何解决?还是这不是一个好选择?
PXRestrictor与where子句一起使用以指定如何进行限制。
[PXRestrictor(typeof(
Where<Current<InventoryItem.itemClassID>, Equal<itemClassValue>>
), "Custom Items")]
在上面的示例中,itemClassValue必须是classID的类型。
如果选择器需要在所有地方都存在,则可以将其与选择器定义为DAC扩展的字段上的当前属性合并,或者仅在特定图形中与CacheAttached合并。
更新资料
正如您指出需要在注释中允许整个项目类树一样,您可以尝试这种方法,这种方法在我只需要在条件上允许某些值的情况下对我有用。
将BASE项目类的PXInt字段添加到SOLine上。使用RowSelecting事件进行设置,然后在限制器中使用它。
样本基本项目类ID字段:
#region BaseItemClassID
[PXInt]
public virtual int? BaseItemClassID { get; set; }
public abstract class baseItemClassID : PX.Data.BQL.BqlInt.Field<baseItemClassID> { }
#endregion
在CacheAttached中使用的限制器仅限于基本项目类的项目:
[PXRestrictor(typeof(Where<InventoryItem.baseItemClassID, Equal<myBaseItemClassType>>), "")]
如果将此方法应用于所有SOLine记录,则需要将“何时仅允许我的特定物料类别树”添加到限制器。请记住,限制器必须返回True才能给出结果,因此它可能需要为“ Where NOT my condition OR BaseItemClassID == myBaseItemClassID”。
就我而言,我需要一个简单的条件以允许使用标准位置,在该位置我已将某些位置配置为特殊用途以隔离某些库存。当我想允许使用标准位置时,我只是将PXBool字段设置为true,并且限制器翻转了允许的选择。我认为这个概念可能也适用于您的情况,也如上所述。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句