很多用于创建查找的引用,但似乎都是从查询中提取它们的值。
我想在一个字段中添加一个查找,该字段将添加来自不是来自表,查询或任何其他数据源的值列表中的项目。
例如从一个字符串:“香蕉,苹果,橘子” ..或容器[“香蕉”,“苹果”,“橘子”]
假设字符串/容器是动态对象。从静态枚举中抽取不是一种选择。
有没有办法从数据源以外的地方动态创建查找?
示例代码将是一个很大的帮助,但我也会提示。
答案 0 :(得分:2)
同样在Global
中,您会找到pickXxxx
,例如pickList。
还有其他人,pickUser
,pickUserGroup
等。
看看实施情况。我猜他们会构建一个临时表然后显示它。桌很棒!
更新
继续拥有follow the rules。
对于高级用户,另请参阅:Lookup form returning more than one value。
答案 1 :(得分: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();
}
上面的代码有助于将字符串显示为查找。
答案 2 :(得分:0)
我也猜测没有桌子就无法进行查找。我这样说是因为查找只是一个包含一个或多个数据源的表单,以不同的方式显示。
我也在博客上写过这篇文章,所以你可以获得一些关于如何执行查找的信息,即使是使用临时表,这里:
http://devexpp.blogspot.com.br/2012/02/dynamics-ax-custom-lookup.html
答案 3 :(得分: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();
}
答案 4 :(得分: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;
}