SAP B1 V10:服务呼叫默认技师Choose from list需显示员工姓名
解决方案:SAP B1 V10服务呼叫技师字段问题修复
一、恢复BP默认技师到服务呼叫主表单
- 创建关联UDF:在服务呼叫主表单(FormID: 167)新增用户自定义字段(UDF),建议设置为关联"员工"对象的类型,或文本类型用于后续绑定数据。
- 自动填充BP默认值:通过SAP B1 SDK或事务通知实现自动赋值:
- 当创建/打开服务呼叫时,读取当前关联业务伙伴(OCRD表)的
DefaultTechnician字段(员工代码),再关联OHEM表获取对应员工姓名,填充到UDF中。 - 事务通知SQL示例:
IF @object_type = '167' AND @transaction_type IN ('A', 'U') BEGIN DECLARE @CardCode NVARCHAR(50), @EmpCode NVARCHAR(50), @EmpName NVARCHAR(100) SELECT @CardCode = CardCode FROM OCLG WHERE DocEntry = @list_of_cols_val_tab_del SELECT @EmpCode = DefaultTechnician FROM OCRD WHERE CardCode = @CardCode SELECT @EmpName = EmpName FROM OHEM WHERE EmpCode = @EmpCode UPDATE OCLG SET U_DefaultTechnician = @EmpName WHERE DocEntry = @list_of_cols_val_tab_del END
- 当创建/打开服务呼叫时,读取当前关联业务伙伴(OCRD表)的
- 调整表单布局:将该UDF拖拽到服务呼叫主表单的原技师字段位置,替代偏移的默认控件。
二、修改员工CFL显示姓名,保留CFL与金箭头功能
- 创建自定义Choose From List(CFL):
- 针对目标EditText字段,新建CFL,数据源绑定OHEM表,设置显示列包含
EmpName(员工姓名)和EmpCode(员工代码,可设为隐藏)。 - 设置CFL的搜索条件以姓名为核心,比如
EmpName LIKE '[%0]',方便用户按姓名检索。
- 针对目标EditText字段,新建CFL,数据源绑定OHEM表,设置显示列包含
- 绑定CFL与金箭头:
- 将EditText的
ChooseFromListUID关联到自定义CFL,同时设置LinkedObjectType为lf_Employee(员工对象),确保金箭头能直接跳转至员工主数据表单(FormID: 380)。
- 将EditText的
- 同步显示与后台值:
- 在CFL的
AfterChoose事件中,将选中行的EmpName赋值给EditText显示,同时将EmpCode存储到隐藏字段或UDF中,用于后续业务逻辑(如工单分配)。 - SDK代码示例(C#):
// 初始化自定义CFL ChooseFromList cflEmp = form.ChooseFromLists.Add("CFL_Technician"); cflEmp.SetBoundColumn("EmpCode", BoLinkedObject.lf_Employee); cflEmp.Columns.Add("EmpName", "员工姓名"); cflEmp.Columns.Add("EmpCode", "员工代码", BoFormItemTypes.it_Hidden); cflEmp.SearchCriteria = "EmpName LIKE '[%0]'"; // 绑定到EditText EditText etTech = form.Items.Item("U_DefaultTechnician").Specific; etTech.ChooseFromListUID = "CFL_Technician"; etTech.LinkedObjectType = BoLinkedObject.lf_Employee; // CFL选择后赋值 form.ChooseFromLists.AfterChoose += (sender, e) => { if (e.ChooseFromListUID == "CFL_Technician") { DataTable selectedRows = e.SelectedObjects; if (selectedRows.Rows.Count > 0) { etTech.Value = selectedRows.Rows[0]["EmpName"].ToString(); // 存储员工代码到隐藏字段 form.Items.Item("U_TechCode").Specific.Value = selectedRows.Rows[0]["EmpCode"].ToString(); } } };
- 在CFL的
内容的提问来源于stack exchange,提问作者Nick Jones
相关产品推荐
相关产品推荐

