3

そこにルックアップを作成するための多くの参照がありますが、すべてがクエリから値を引き出しているようです。

テーブル、クエリ、またはその他のデータソースからのものではない値のリストからアイテムを追加するフィールドにルックアップを追加したいと思います。

文字列からなど:「バナナ、リンゴ、オレンジ」..またはコンテナ[「バナナ」、「リンゴ」、「オレンジ」]

文字列/コンテナが動的オブジェクトであると想定します。静的列挙型からの描画は選択できません。

データソース以外のものからその場でルックアップを作成する方法はありますか?

サンプルコードは非常に役立ちますが、ヒントも取り上げます。

4

5 に答える 5

2

カラーピッカーがあります。

また、pickListなどがありGlobalます。他にもあります、など。pickXxxxpickUserpickUserGroup

実装を見てください。彼らは一時的なテーブルを作成し、それを表示していると思います。テーブルは素晴らしいです!

アップデート:

自分で続けるには、ルールに従ってください。

上級ユーザーの場合は、「複数の値を返すルックアップフォーム」も参照してください。

于 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

また、テーブルなしでルックアップを実行する方法はないと思います。ルックアップは、異なる方法で表示される1つ以上のデータソースを持つ単なるフォームであるためです。

これについてもブログに書いているので、一時テーブルを使用している場合でも、ルックアップを実行する方法に関する情報をここで入手できます。

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

于 2012-04-18T10:44:55.907 に答える
0

これは最も適切なソリューションではありませんが、これは機能し、ネイティブのAX2012オブジェクトをオーバーライドまたは変更しません。

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 に答える