Axapta 如何从FormBuildStringControl控件获取表字段名

Axapta 如何从FormBuildStringControl控件获取表字段名,axapta,x++,Axapta,X++,我想问一下如何从FormBuildStringControl获取物理表字段名 总的来说,我可以说我必须循环一个窗体的所有字符串控件。 并找到相应的表字段名 首先,借助以下链接,我可以浏览所有控件 第一部分工作起来很有魅力,我可以毫无疑问地导航到表单控件,但我的问题是什么时候我想找到表字段名 switch(control.handle()) { case classnum(FormBuildStringControl): F

我想问一下如何从FormBuildStringControl获取物理表字段名

总的来说,我可以说我必须循环一个窗体的所有字符串控件。 并找到相应的表字段名

首先,借助以下链接,我可以浏览所有控件

第一部分工作起来很有魅力,我可以毫无疑问地导航到表单控件,但我的问题是什么时候我想找到表字段名

     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中获取正确的表字段名吗

谢谢
尼科斯

问题在于您的值
formStrControl.dataSource()

将其更改为
formStrControl.dataSourceObject().table()

您可能会发现更有用的东西是
formStringControl.FieldBinding()
中的
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()));

问题在于您的值
formStrControl.dataSource()

将其更改为
formStrControl.dataSourceObject().table()

您可能会发现更有用的东西是
formStringControl.FieldBinding()
中的
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()));

我想为我的问题发布我的解决方案,该解决方案来自@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;

我想为我的问题发布我的解决方案,该解决方案来自@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;

谢谢你的回答,看起来像是一个有效的解决方案,但是在我的方法中,我没有这个元素对象,或者至少没有一个对象有controlId方法。fsc=element.control(element.controlId('custable_AccountNum');另外,我想说的是,FormBuildStringControl对象没有方法DataSourceObject():(,因此仍然无法获取正确的值。感谢您的回答,看起来像是一个desent解决方案,但在我的方法中,我没有此元素对象,或者至少没有一个具有controlId方法的对象。fsc=element.control(element.controlId('CustTable_AccountNum');我还想说,FormBuildStringControl对象没有DataSourceObject()方法:(,因此仍然无法获取正确的值。