我在 APTran 上有两个自定义字段,法案发布后它们都变成了只读。
无论账单状态如何,这两个字段都需要随时可编辑。
在搜索并找到其他屏幕的类似示例后,我尝试为屏幕 AP301000 制作一个版本,但在法案发布后字段仍保持只读状态。
APTran DAC 扩展:
namespace CustomFields
{
public class APTranExt : PXCacheExtension<PX.Objects.AP.APTran>
{
#region UsrCustomField1
[PXDBString(50)]
[PXUIField(DisplayName="Custom Field 1", Enabled = true)]
public string UsrCustomField1 { get; set; }
public abstract class usrCustomField1 : IBqlField { }
#endregion
#region UsrCustomField2
[PXDBString(20)]
[PXUIField(DisplayName="Custom Field 2", Enabled = true)]
public string UsrCustomField2 { get; set; }
public abstract class usrCustomField2 : IBqlField { }
#endregion
}
}
APInvoiceEntry 图形扩展:
namespace CustomFields
{
public class APInvoiceEntry_Extension : PXGraphExtension<PX.Objects.AP.APInvoiceEntry>
{
#region Event Handlers
public void APTran_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
{
APTran row = e.Row as APTran;
if (row != null)
{
APInvoice doc = Base.Document.Current;
if (doc != null && doc.Released == true)
{
PXUIFieldAttribute.SetEnabled<APTranExt.usrCustomField1>(sender, row, true);
PXUIFieldAttribute.SetEnabled<APTranExt.usrCustomField2>(sender, row, true);
}
}
}
#endregion
}
}
还尝试将 SetReadOnly 设置为 False,但这没有什么区别:
PXUIFieldAttribute.SetEnabled<APTranExt.usrCustomField1>(sender, row, true);
PXUIFieldAttribute.SetReadOnly<APTranExt.usrCustomField1>(sender, row, false);
PXUIFieldAttribute.SetEnabled<APTranExt.usrCustomField2>(sender, row, true);
PXUIFieldAttribute.SetReadOnly<APTranExt.usrCustomField2>(sender, row, false);
在 APTran_RowSelected 处理程序中尝试此操作,我在 23R1 中测试了它。
问题是文档发布时事务缓存被禁用。
简单地再次启用它是不够的,因为它会启用 APTran 记录中的所有字段(第一行),因此我们需要禁用所有字段(第二行)。
sender.AllowUpdate = true; // it is disabled in APInvoice_RowSelected, you need to reenable here
PXUIFieldAttribute.SetEnabled(sender, row, false); // disable all fields
PXUIFieldAttribute.SetEnabled<APTranExt.usrCustomField1>(sender, row, true); // enable only your field
PXUIFieldAttribute.SetEnabled<APTranExt.usrCustomField2>(sender, row, true); // enable only your field