Axapta:防止用户使用搜索更改表单查询
我在Axapta 3.0中创建了一个自定义查找表单,用户可以在其中从ProdRoute数据源中选择OprId。在显示查找之前,ProdId已设置,用户不得更改。用户只能从生产订单的ProdRoute中选择具有有效ProdId的OprId。根据文档,可以通过锁定范围来防止用户更改查询。我是这样做的:Axapta:防止用户使用搜索更改表单查询,axapta,x++,Axapta,X++,我在Axapta 3.0中创建了一个自定义查找表单,用户可以在其中从ProdRoute数据源中选择OprId。在显示查找之前,ProdId已设置,用户不得更改。用户只能从生产订单的ProdRoute中选择具有有效ProdId的OprId。根据文档,可以通过锁定范围来防止用户更改查询。我是这样做的: qbrProdId.value(queryValue(_prodId)); qbrProdId.status(RangeStatus::Locked); 这里qbrProdId是QueryBuild
qbrProdId.value(queryValue(_prodId));
qbrProdId.status(RangeStatus::Locked);
这里qbrProdId是QueryBuildRange类型的变量,_prodId指定prodId
当显示查找并且用户尝试更改过滤器时,ProdId被锁定。好。但是,当用户在查找的ProdId字段上按Ctrl+F时,或者如果用户单击工具栏上的搜索,则可以输入不同的ProdId
我怎样才能防止这种情况
我曾考虑将查找网格中的ProdId字段更改为“Display”类型,而不是数据源字段。但是没有更好的解决办法吗
(顺便说一句,查询不是自动创建的,而是在表单数据源的“init”方法中手动创建的)。只需使用dynalink而不是range
HTH只需使用动态链接而不是范围
HTH好的,然后您可以重写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;
}
好的,然后您可以重写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;
}
如上所述,查询是手动创建的。这是findValue()方法正常工作所必需的。dynalink是不可能的。如上所述,查询是手动创建的。这是findValue()方法正常工作所必需的。dynalink是不可能的。谢谢你的回答。你的解决方案是正确的。但是,对于我的问题,唯一正确的taskid是779,这不在您的示例中。我通过调试器找到了这个值。taskid的2844、2837和799都出现在Task宏中,但779没有。这让我很惊讶。那么,该值记录在哪里?值2855也不是任务宏的一部分。因此,似乎有比任务宏中的有效taskid更多的有效taskid?解决方案的一个缺点是所有字段都被禁用。最后,我对特定字段使用了一种显示方法。是的,我认为宏中没有包含某些TaskID。我在AX4和AX5上尝试了这段代码,对我有效的值是2855。不幸的是,我不知道这方面的任何文档。谢谢你的回答。你的解决方案是正确的。但是,对于我的问题,唯一正确的taskid是779,这不在您的示例中。我通过调试器找到了这个值。taskid的2844、2837和799都出现在Task宏中,但779没有。这让我很惊讶。那么,该值记录在哪里?值2855也不是任务宏的一部分。因此,似乎有比任务宏中的有效taskid更多的有效taskid?解决方案的一个缺点是所有字段都被禁用。最后,我对特定字段使用了一种显示方法。是的,我认为宏中没有包含某些TaskID。我在AX4和AX5上尝试了这段代码,对我有效的值是2855。不幸的是,我不知道这方面的任何文档。