3

有很多用于创建查找的参考资料,但似乎都是从查询中提取它们的值。

我想向一个字段添加一个查找,该字段将从不来自表、查询或任何其他数据源的值列表中添加项目。

例如来自字符串:“Bananas, Apples, Oranges” ..或容器 ["Bananas", "Apples", "Oranges"]

假设字符串/容器是一个动态对象。从静态枚举中提取不是一种选择。

有没有办法从数据源以外的东西动态创建查找?

示例代码会很有帮助,但我也会提供一些提示。

4

5 回答 5

2

颜色选择器

您还会在其中Global找到pickXxxx诸如pickList。还有其他的pickUserpickUserGroup等等。

看一下实现。我猜他们建立了一个临时表然后显示它。桌子很棒!

更新:

去你自己遵守规则

对于高级用户,另请参阅:查找表单返回多个值

于 2012-04-18T07:08:23.723 回答
1
public void lookup()
{
    SysTableLookup                  sysTableLookup;
    TmpTableFieldLookup             tmpTableFieldLookup; 
    Enumerator                      en;    
    List                            entitylist      = new list(types::String);

    entitylist.addend("Banana");
    entitylist.addend("Apple");

    en = entityList.getEnumerator();

    while (en.moveNext())
    {
        tmpTableFieldLookup.TableName = en.current();               
        tmpTableFieldLookup.insert();
    }

    sysTableLookup = SysTableLookup::newParameters(tableNum(tmpTableFieldLookup), this);

    sysTableLookup.addLookupfield(fieldNum(TmpTableFieldLookup, TableName));

    //BP Deviation documented
    sysTableLookup.parmTmpBuffer(tmpTableFieldLookup);
    sysTableLookup.performFormLookup();
}

上面的代码有助于将字符串显示为查找。

于 2014-11-26T12:30:20.180 回答
0

我也猜想没有表格就无法执行查找。我这么说是因为查找只是一种具有一个或多个以不同方式显示的数据源的表单。

我也写过关于这个的博客,所以你可以在这里获得一些关于如何执行查找的信息,即使是一个临时表:

http://devexpp.blogspot.com.br/2012/02/dynamics-ax-custom-lookup.html

于 2012-04-18T10:44:55.907 回答
0

这不是最优雅的解决方案,但这确实有效,并且不会覆盖或修改任何本机 AX 2012 对象:

Copy the sysLookup form from AX2009 (rename it) and import it into AX 2012.     
We'll call mine myLookupFormCopy.
I did a find/replace of "sysLookup" in the XPO file to rename it.

创建此类方法:

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(myLookupFormCopy));
    args.parmObject(_valueList);
    args.parm(_columnLabel);
    formRun = classFactory.formRunClass(args);
    _formStringControl.performFormLookup(formRun);
}
}

在字符串控件的查找方法中,使用:

public void lookup()
{
List    valueList = new List(Types::String);
;

...build your valueList here...

MyClass::lookupList(this, valueList, "List Title");

super();
}
于 2012-04-23T12:02:28.400 回答
0

来自 global::PickEnumValue 的示例:

static int pickEnumValue(EnumId _enumId, boolean _omitZero = false)
{
    Object      formRun;
    container   names;
    container   values;
    int         i,value = -1,valueIndex;
    str         name;
    #ResAppl
    DictEnum dictEnum = new DictEnum(_enumId);
    ;
    if (!dictEnum)
        return -1;


    for (i=1;i<=dictEnum.values();i++)
    {
        value = dictEnum.index2Value(i);
        if (!(_omitZero && (value == 0)))
        {
            names += dictEnum.index2Label(i);
            values += value;
        }
    }
    formRun = classfactory.createPicklist();
    formRun.init();
    formRun.choices(names, #ImageClass);
    formRun.caption(dictEnum.label());
    formRun.run();
    formRun.wait();
    name = formRun.choice();
    value = formRun.choiceInt();
    if (value>=0) // the picklist form returns -1 if a choice has not been made
    {
        valueIndex = -1;
        for (i=1;i<=conLen(names);i++)
        {
            if (name == conPeek(names,i))
            {
                valueIndex = i;
                break;
            }
        }
        if (valueIndex>=0)
            return conPeek(values,valueIndex);
    }


    return value;
}
于 2015-06-18T08:53:36.157 回答