【发布时间】:2018-08-02 02:34:23
【问题描述】:
我知道这是基本的东西和条件,但我对服务订单中已经存在的一行有疑问。因此,我们有将导入 Acumatica 的服务订单,并且已经有一条线。在 Acumatica 系统中,有人将转到服务订单屏幕 (SD300100) 并在导入后进行他们希望的更改。在这种情况下,他们将更改保修状态,这是我们制作的一个自定义字段,并且会更改详细信息和标题中的一些值。除了从详细信息行的导入中引入的第一行之外,我一切正常。因此,此订单将带有一行已插入“劳动力”选项卡的行。我的问题是,当我们将保修状态更改为保修时,它应该在详细信息行中检查另一个名为保修的自定义字段框。我有这个适用于任何新插入的行,但我无法使用已经存在的行来获得它。我已经在 Header 和 Labor 行数据视图上尝试了 RowUpdated、RowUpdating、RowInserted、RowInserting。以及标题保修选择器上的 FieldUpdated、FieldUpdating 和 Selecting 以及人工选项卡下详细信息中的保修复选框。
这是我的代码:
public PXSelect<FSSODet, Where<FSSODet.sOID, Equal<Current<FSSODet.sOID>>>> FSSODets;
protected void FSServiceOrder_Usrwarrstat_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e)
{
var row = (FSServiceOrder)e.Row;
if (row == null) return;
FSSODet line = FSSODets.Current;
if (line == null) return;
if (line != null){
FSServiceOrderExt rowExt = PXCache<FSServiceOrder>.GetExtension<FSServiceOrderExt>(row);
if(rowExt == null)
return;
if (rowExt.Usrwarrstat == null)
return;
if (rowExt.Usrwarrstat == "W"){
cache.SetValueExt<FSSODetExt.usrwarrantydetail>(line, true);
}
}
}
这是我去这里之前尝试的最后一种方式。如果有人有不同的方法,我可以为上面提到的任何方法提供代码,RowUpdated、RowUpdating 等。两个字段的 Commit Changes 都设置为 true。
简而言之,当服务订单标题中的 Usrwarrstat 字段设置为“W”时,我希望将人工选项卡/详细信息中的 Usrwarrantydetail 设置为 true。
更新 1:所以我使用了下面的第一个答案建议,它确实将复选框更改为选中,但无论状态如何,它都会发生。我只需要检查它是设置为“W”还是“P”,唯一的另一个选项是“N”,所以我添加了一个检查,如果它设置为“N”,那么它将是错误的。但是,它仍然将其保存为 true。 这是更新的代码:
public PXSelect<FSSODetService, Where<FSSODetService.sOID, Equal<Current<FSSODetService.sOID>>>> FSSODets;
protected void FSServiceOrder_Usrwarrstat_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e)
{
var row = (FSServiceOrder)e.Row;
if (row == null) return;
FSSODetService line = FSSODets.Current;
if (line == null) return;
if (line != null){
FSServiceOrderExt rowExt = PXCache<FSServiceOrder>.GetExtension<FSServiceOrderExt>(row);
if(rowExt == null)
return;
if (rowExt.Usrwarrstat == null)
return;
if (rowExt.Usrwarrstat == "W" || rowExt.Usrwarrstat == "P"){
FSSODets.Cache.SetValueExt<FSSODetExt.usrwarrantydetail>(line, true);
}
if (rowExt.Usrwarrstat == "N"){
FSSODets.Cache.SetValueExt<FSSODetExt.usrwarrantydetail>(line, false);
}
}
}
}
【问题讨论】:
标签: acumatica