我想问一下如何从FormBuildStringControl获取物理表字段名称。
Genarally我可以说我必须循环一个表单的所有字符串控件。 并找到相应的表字段名称。
首先,我需要借助以下链接浏览所有控件。 Loop form fields
第一部分就像魅力一样,我可以导航到没有任何promlems的表单控件,但我的问题是当我想找到Table fieldName时。
switch(control.handle())
{
case classnum(FormBuildStringControl):
FormBuildStringControl formBuildStrControl =Control FormBuildStringControl;
str name = formBuildStrControl.name();
info( formBuildStrControl.name()); // THE CORRECT VALUE CustTable_CustAccount
info(fieldId2Name(formBuildStrControl.dataSource(),formStrControl.Datafield()));// THE FALSE VALUE ORDERID
info(tableId2Name(formBuildStrControl.dataSource()))// false value SalesLine
break;
}
我没有方法fieldId2Name()和tableId2Name()的结果。原因是datadield和datasource()方法没有从SalesTable和CustAccount返回更正ID
有人建议如何从FormBuildStringControl中获取正确的表字段名称吗?
由于 尼科斯。
答案 0 :(得分:4)
问题在于你的价值formStrControl.dataSource()
。
将其更改为formStrControl.dataSourceObject().table()
。
您可能会发现更有用的内容来自FieldBinding
formStringControl.fieldBinding()
,它提供了您可能想要的所有信息。
以下是一些显示我正在谈论的内容的代码:
FormStringControl fsc;
FieldBinding fieldBinding;
// Using your current method
fsc = element.control(element.controlId('CustTable_AccountNum'));
info(strFmt("%1", fieldId2name(fsc.dataSourceObject().table(), fsc.dataField())));
// Using Field Binding
fieldBinding = fsc.fieldBinding();
info(strFmt("%1, %2, %3", fieldBinding.fieldId(), fieldBinding.fieldName(), fieldBinding.tableId()));
答案 1 :(得分:0)
我想发布我的问题解决方案,该问题来自@Alex Kwitny的帖子
case classnum(FormBuildStringControl):
FormStringControl fsc = new FormStringControl(control as FormBuildStringControl,_formRun) ;
FieldBinding fieldBinding;
fieldBinding = fsc.fieldBinding();
info(strFmt("%1, %2, %3", fieldId2Name(fieldBinding.tableId(),fieldBinding.fieldId()), fieldBinding.fieldName(), tableId2Name( fieldBinding.tableId())));
_this.add(fieldBinding.fieldId());
break;