我在Axapta 3.0中创建了一个自定义查找表单,用户可以从ProdRoute数据源中选择一个OprId。在显示查找之前,ProdId已设置,用户不得更改。用户只能使用有效的ProdId从生产订单的ProdRoute中选择OprId。根据文档,可以通过锁定范围来阻止用户更改查询。我这样做了:
qbrProdId.value(queryValue(_prodId));
qbrProdId.status(RangeStatus::Locked);
此处qbrProdId是 QueryBuildRange 类型的变量,而_prodId指定 ProdId 。
当显示查找并且用户尝试更改过滤器时,ProdId被锁定。好。但是,当用户在查找的ProdId字段上按Ctrl + F时,或者如果用户单击工具栏上的“搜索”,则可以输入不同的ProdId。
我该如何防止这种情况?
我想过将查找网格中的ProdId字段更改为“Display”类型,而不是数据源字段。但对此没有更好的解决方案吗?
(顺便说一句,查询不是自动创建的,而是在表单数据源的“init”方法中手动创建的。)
答案 0 :(得分:1)
好的,你可以覆盖task()方法。 这应该在查找表单上禁用过滤器功能。
public int task(int _taskId)
{
int ret;
switch(_taskId)
{
case 2855:
case 2844:
case 2837:
case 799:
return 0;
}
ret = super(_taskId);
return ret;
}
答案 1 :(得分:0)
只需使用dynalink而不是范围。
HTH