2012-10-12 46 views
0

我已成功在AX2009中使用自定义查找多年。在提升到RU7之后,似乎之前的方法不再有效。任何关于我应该改变以解决问题的建议?AX2009 RU7自定义查找列表

这是我一直在使用调用自定义查找代码:

public void lookup() 
{ 
List valueList = new List(Types::String); 
; 
    //add the choices to the list 
    valueList.addEnd('@ABC123'); 
    valueList.addEnd('@ABC246); 
//display the list using the customized syslookup routine 
SysLookup::lookupList(this, valueList, "@ABC369"); 
super(); 
} 

这是我加入sysLookup类中的方法:

public static client void lookupList(FormStringControl _formStringControl, List _valueList, str _columnLabel = '') 
{ 
Args args; 
FormRun formRun; 
; 
if (_formStringControl && _valueList && _valueList.typeId() == Types::String) 
{ 
    args = new Args(formstr(SysLookup)); 
    args.parmObject(_valueList); 
    args.parm(_columnLabel); 
    formRun = classFactory.formRunClass(args); 
    formRun.init(); 
    _formStringControl.performFormLookup(formRun); 
} 
} 

,直到我们安装RU7这完美地工作。现在,我们收到以下错误:

执行代码时出错:DictEnum对象未初始化。 (C)\类\ DictEnum \标签 (C)\形式\ SysLookup \方法\运行 (C)\类\ FormStringControl \ performFormLookup (C)\类\ SysLookup \ lookupList - 线16 (C)\类\ FormStringControl \ Lookup

我很乐意提出如何解决当前问题或如何在RU7中创建相同效果的建议(没有引入RU7之前的syslookup类,它可以工作,但不是' t可以接受。)

+0

经过进一步的审查,看起来sysLookup表单是在RU7中进行更改的地方。如果我使用pre-RU7覆盖RU7 sysLookup表单,那么一切正常。我不想那么做... – Brad

+0

另一个有趣的观察。如果我在文本框的查找覆盖方法中注释掉所有内容,我仍然会得到相同的错误。未覆盖的查找仍然正常工作。 – Brad

回答

1

我不知道你可以成功地使用自定义查找的应用程序版本。 即使在RU-3中它也不能工作。我想你的SysLookup表格已被定制,以便你可以使用你的lookupList方法 - 我建议你验证它。

标准SysLookup表格仅使用args.parm()而不使用args.parmObject(),因此您的_valueList根本不会被使用。您可以检查查找形式如何调用\Forms\KMQuestionnaireStatistics\Designs\Design\[Tab:Tab]\[TabPage:RangesTab]\[Group:Ranges]\StringEdit:rangeGender\Methods\lookup

我不知道你的标签"@ABC369"的价值,但在标准的AX你不会有一个错误,只有当它这个标签的拥有一些基本枚举的ID(如“732”为NoYesCombo)。您也可以检查它,但是您的列表将不会显示在查找中。您最好检查在成功使用您提供的代码段的环境中如何定制SysLookup表单。

+0

你是对的。看看sysLookup表单是如何修改的,在关键位置有if语句可以让它访问parmObject()。它看起来非常无害,因为所有现有功能都保持不变。我可能只是将修改后的表单整合到RU7中,除非您知道更好的自定义查找方式,您可以提供一个选项列表。谢谢您的帮助。 – Brad