我有代码,当按下“+”按钮时,使用 RowInserted 事件更新“员工考勤卡”屏幕 (EP305000)“详细信息”部分新添加的网格行中的特定字段。问题是,代码更新这些字段后,我可以在 UI 中看到它们已更新 - 但是当我点击保存按钮时,该行消失 - 就好像它没有被识别为被添加一样。
是否必须设置脏标志才能识别该附加行?如果我手动更新这些字段之一,它就会识别并添加它。
如果纯粹通过 BLC 代码添加,是否需要添加一些内容,例如设置“脏标志”以使用此插入行更新网格?
代码:
protected void EPTimecardDetail_RowInserted(PXCache sender, PXRowInsertedEventArgs e)
{
string day = null;
DateTime? date = null;
DateTime? startDate = null;
DateTime? endDate = null;
int? project = null;
int? task = null;
if (isCreateCorrectionFlag == false)
{
//Get the last row's data...
foreach (EPTimecardDetail tca in Base.Activities.Select())
{
if (tca.ProjectID == null) break; //This is to make sure the variables have the last valid row's data and not the newly inserted row's data
day = tca.Day;
date = tca.Date;
project = tca.ProjectID;
task = tca.ProjectTaskID;
var tcae = PXCache<PMTimeActivity>.GetExtension<PMTimeActivityExt>(tca);
startDate = tcae.UsrStartDate;
endDate = tcae.UsrEndDate;
}
//var tcd = (PMTimeActivity)e.Row;
var tcd = (EPTimecardDetail)e.Row;
if (tcd == null) return;
tcd.Date = date;
tcd.Day = day;
var tcde = PXCache<PMTimeActivity>.GetExtension<PMTimeActivityExt>(tcd);
tcde.UsrStartDate = startDate; //tcd.Date;
tcde.UsrEndDate = endDate; //tcd.Date;
tcd.TimeSpent = CalcTimeWorked(tcde);
tcd.ProjectID = project;
tcd.ProjectTaskID = task;
tcd.Summary = "=====";
}
//row.BillableTimeCalc = CalcTimeWorked(row);
}
我的猜测是,您的行在保存期间未通过对销售订单行执行的某些验证。在销售订单行级别执行大量验证以确定定价、库存检查等。