Axapta:阻止用户通过搜索更改表单查询

时间:2009-10-23 18:12:39

标签: axapta x++

我在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”方法中手动创建的。)

2 个答案:

答案 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