SAP B1 V10 PL2202:点击链接按钮后设置第二个表单prj值失败求解
SAP B1 10 PL2202:设置查找字段值无效的解决方法
现有一段代码,点击第一个表单矩阵的链接按钮打开第二个表单,期望根据点击的行列对应值在第二个表单打开特定文档,但设置prj值到Item_31的Specific.Value时无效,当前使用SAP B1 Version 10 PL 2202,代码如下:
Application.SBO_Application.ActivateMenuItem("FreightForwarders.FileMaster"); Application.SBO_Application.Forms.ActiveForm.Mode = SAPbouiCOM.BoFormMode.fm_FIND_MODE; Application.SBO_Application.Forms.ActiveForm.Items.Item("Item_31").Enabled = true; Application.SBO_Application.Forms.ActiveForm.ActiveItem = "Item_31"; Application.SBO_Application.Forms.ActiveForm.Items.Item("Item_31").Specific.Value = prj; Application.SBO_Application.Forms.ActiveForm.Items.Item("1").Click(SAPbouiCOM.BoCellClickType.ct_Regular); Application.SBO_Application.Forms.ActiveForm.Items.Item("Item_31").Enabled = false; Application.SBO_Application.Forms.ActiveForm.Mode = SAPbouiCOM.BoFormMode.fm_OK_MODE;
解决思路及修正代码
匹配字段类型与值格式
确保prj的数据类型和Item_31对应字段类型完全一致:若字段为字符串,prj需是字符串格式;若为数值字段,需转为对应数值类型。改用
DataBind.SetValue赋值
SAP B1查找模式下,部分字段直接赋值Specific.Value可能不生效,需通过DataBind.SetValue完成赋值,修正后代码:
Application.SBO_Application.ActivateMenuItem("FreightForwarders.FileMaster"); var targetForm = Application.SBO_Application.Forms.ActiveForm; // 等待表单完全加载,避免控件未初始化导致赋值失败 System.Threading.Thread.Sleep(500); targetForm.Mode = SAPbouiCOM.BoFormMode.fm_FIND_MODE; var searchItem = targetForm.Items.Item("Item_31"); searchItem.Enabled = true; targetForm.ActiveItem = searchItem.UniqueID; // 针对EditText控件的赋值方式 ((SAPbouiCOM.EditText)searchItem.Specific).DataBind.SetValue(prj.ToString()); // 执行查找操作 targetForm.Items.Item("1").Click(SAPbouiCOM.BoCellClickType.ct_Regular); searchItem.Enabled = false; targetForm.Mode = SAPbouiCOM.BoFormMode.fm_OK_MODE;
- 适配不同控件类型
若Item_31是ComboBox控件,需调整赋值逻辑:
// 针对ComboBox控件的赋值方式 ((SAPbouiCOM.ComboBox)searchItem.Specific).Select(prj, SAPbouiCOM.BoSearchKey.psk_ByValue);
额外排查点
- 调试确认
prj变量是否包含有效值; - 验证
FreightForwarders.FileMaster表单中,Item_31确实是对应文档的关键字段。
内容的提问来源于stack exchange,提问作者Kinyanjui Kamau
相关产品推荐
相关产品推荐

