Epicor定制开发中无法创建Labor Detail新行问题求助
Epicor Labor Detail 新建行报错排查
问题概述
在Epicor定制开发过程中,调用LaborAdapter创建Labor Detail表新行时触发报错,所用代码及报错场景如下:
调用代码
LaborAdapter adapterLabor = new LaborAdapter(this.oTrans); adapterLabor.BOConnect(); //adapterLabor.GetNewLaborDtl(1109); bool resultGetNewLaborDtl = adapterLabor.GetNewLaborDtlAttch(1111,217588);; System.Windows.Forms.MessageBox.Show(resultGetNewLaborDtl.ToString(), "Done");
核心排查方向
1. 方法调用错误:用错了BO方法
GetNewLaborDtlAttch的作用是创建LaborDtl的附件关联记录,而非创建LaborDtl主明细行。如果你的需求是新建Labor Detail业务行,应该使用被注释掉的GetNewLaborDtl方法,而非GetNewLaborDtlAttch。
2. 参数有效性验证
如果确实需要调用GetNewLaborDtlAttch,需确认两个参数的合法性:
- 第一个参数
1111:必须是当前环境中存在且有权限访问的Company ID - 第二个参数
217588:必须是系统中已存在的LaborNum(LaborHed表的主键),且对应的LaborHed记录未处于锁定、结账等不可编辑状态
3. Adapter上下文缺失
- 确保
this.oTrans是有效的UI Transaction对象,当前表单已加载Labor Entry界面,且存在活跃的LaborHed记录 - 调用新建方法前,建议先通过
adapterLabor.GetByID(laborNum)加载对应的LaborHed父记录,BO方法需要依赖父记录的上下文才能正确创建子行
4. 权限与业务规则限制
- 检查当前用户是否拥有LaborDtl记录的创建权限,包括表单操作权限和数据范围权限
- 查看Epicor系统日志(System Monitor),获取更详细的报错堆栈,日志会明确提示是业务规则违反(如LaborHed已结账)还是参数错误
修正代码示例(新建Labor Detail行场景)
LaborAdapter adapterLabor = new LaborAdapter(this.oTrans); adapterLabor.BOConnect(); // 加载目标LaborHed记录(替换为实际存在的LaborNum) int targetLaborNum = 1109; adapterLabor.GetByID(targetLaborNum); // 创建新的LaborDtl行 adapterLabor.GetNewLaborDtl(targetLaborNum); // 填充必填字段(根据业务需求调整) var newDtlRow = adapterLabor.LaborDtl.CurrentDataRow; newDtlRow["EmpID"] = "EMP001"; newDtlRow["LaborType"] = "D"; // 直接人工标识,以系统配置为准 newDtlRow["Hours"] = 8; // 保存变更 adapterLabor.Save(); System.Windows.Forms.MessageBox.Show("Labor Detail行创建成功", "Done");
内容的提问来源于stack exchange,提问作者Kuanny Goh Chee Tatt
相关产品推荐
相关产品推荐

