我需要自定义约会屏幕,以便如果用户在约会中选择了计费复选框,它将更新原始服务订单。我能够使它与PXUpdate一起使用,但是并没有执行任何更新文档总数和税额的服务订单图逻辑。我需要更新服务订单上的IsBillable复选框,但还要让它运行ServiceOrderEntry事件。我有以下代码可以运行,但不会更新服务订单。我很茫然。任何帮助表示赞赏!
protected void FSAppointmentDetPart_RowPersisted(PXCache cache, PXRowPersistedEventArgs e)
{
var aptRow = e.Row as FSAppointmentDetPart;
if (aptRow == null) return;
var soGraph = PXGraph.CreateInstance<ServiceOrderEntry>();
FSSODet soDetRow = PXSelect<FSSODet, Where<FSSODet.sODetID, Equal<Required<FSSODet.sODetID>>>>.Select(soGraph, aptRow.SODetID);
if (soDetRow == null) return;
soGraph.Caches<FSSODet>().Current = soDetRow;
FSServiceOrder serviceOrderRow = soGraph.ServiceOrderRecords.Current = soGraph.ServiceOrderRecords
.Search<FSServiceOrder.refNbr>(soDetRow.RefNbr, soDetRow.SrvOrdType);
if (serviceOrderRow == null) return;
if (soDetRow is FSSODetPart)
{
if (e.Operation == PXDBOperation.Delete)
{
soGraph.ServiceOrderDetParts.Delete(soDetRow as FSSODetPart);
}
else if (e.Operation == PXDBOperation.Update)
{
bool? isBillable = aptRow.IsBillable;
soDetRow.IsBillable = aptRow.IsBillable;
soGraph.Caches<FSSODet>().SetValueExt<FSSODet.isBillable>(soGraph, isBillable);
decimal? estimatedQty = aptRow.EstimatedQty;
soDetRow.EstimatedQty = aptRow.EstimatedQty;
soGraph.Caches<FSSODet>().SetValueExt<FSSODet.estimatedQty>(soGraph, estimatedQty);
soGraph.ServiceOrderDetParts.Cache.Update(soDetRow);
soGraph.ServiceOrderRecords.Cache.Update(serviceOrderRow);
soGraph.Actions.PressSave();
}
}
}
我能够使用soGraph.ServiceOrderRecords.Cache.RaiseFieldUpdated(soDetRow,null);]使其工作。