在 RowSelected 上创建缺失数据
Create missing data on RowSelected
我们有一个图表扩展,用于管理我们添加到屏幕的选项卡。该选项卡显示来自我们自己的 DAC 的数据。我们不使用 DAC 扩展,现在不打算讨论原因。
当用户打开主屏幕时,如果我们的数据不存在,我想用一些默认的业务逻辑创建一条记录。
我在主 DAC 上添加了一个 RowSelected
事件处理程序,它按照我的预期触发。当我添加代码以在事件处理程序中创建我们丢失的记录时,Acuminator 给我错误消息“PX1044 无法在事件处理程序中执行对 PXCache 的更改。”
我理解 Acuminator 提出的错误,但我不确定还有什么地方可以创建我们的记录。我不记得大学里有专门针对这种情况的部分。
谁能告诉我如何处理这种情况?如果可能,请指出涵盖此场景的学习 material 以获取更广泛的信息。
不幸的是,只有几种可行的方法可以做到这一点并让 Acuminator 开心。您将面临数据不一致的风险。
https://github.com/Acumatica/Acuminator/blob/master/docs/diagnostics/PX1044.md
我建议将您的数据插入代码放在已更新的行中,并希望用户更新一些内容
我收到了 Acumatica 支持人员的回复,您可以在视图 select 委托中执行此操作。
这是一些示例代码,不过我还没有测试过:
public class InventoryItemMaintExtension : PXGraphExtension<InventoryItemMaint>
{
public SelectFrom<MyCustomTable>.
Where<MyCustomTable.inventoryID.IsEqual<
InventoryItem.inventoryID.FromCurrent>>.
View AdditionalItemData;
public static bool IsActive() { return true; }
public IEnumerable additionalItemData()
{
var data = AdditionalItemData.SelectSingle();
if (data is null)
{
data = new MyCustomTable();
AdditionalItemData.Insert(data);
}
return AdditionalItemData.Select();
}
}
[PXCacheName("Additional Item Data")]
[Serializable]
public class MyCustomTable : IBqlTable
{
#region CashAccountID
[Inventory]
[PXDefault]
public virtual int? InventoryID { get; set; }
public abstract class inventoryID : PX.Data.BQL.BqlInt.Field<inventoryID> { }
#endregion
#region Required
[PXDBBool()]
[PXDefault(false)]
[PXUIField(DisplayName = "Required")]
public virtual bool? Required { get; set; }
public abstract class required : PX.Data.BQL.BqlBool.Field<required> { }
#endregion
}
我们有一个图表扩展,用于管理我们添加到屏幕的选项卡。该选项卡显示来自我们自己的 DAC 的数据。我们不使用 DAC 扩展,现在不打算讨论原因。
当用户打开主屏幕时,如果我们的数据不存在,我想用一些默认的业务逻辑创建一条记录。
我在主 DAC 上添加了一个 RowSelected
事件处理程序,它按照我的预期触发。当我添加代码以在事件处理程序中创建我们丢失的记录时,Acuminator 给我错误消息“PX1044 无法在事件处理程序中执行对 PXCache 的更改。”
我理解 Acuminator 提出的错误,但我不确定还有什么地方可以创建我们的记录。我不记得大学里有专门针对这种情况的部分。
谁能告诉我如何处理这种情况?如果可能,请指出涵盖此场景的学习 material 以获取更广泛的信息。
不幸的是,只有几种可行的方法可以做到这一点并让 Acuminator 开心。您将面临数据不一致的风险。
https://github.com/Acumatica/Acuminator/blob/master/docs/diagnostics/PX1044.md
我建议将您的数据插入代码放在已更新的行中,并希望用户更新一些内容
我收到了 Acumatica 支持人员的回复,您可以在视图 select 委托中执行此操作。
这是一些示例代码,不过我还没有测试过:
public class InventoryItemMaintExtension : PXGraphExtension<InventoryItemMaint>
{
public SelectFrom<MyCustomTable>.
Where<MyCustomTable.inventoryID.IsEqual<
InventoryItem.inventoryID.FromCurrent>>.
View AdditionalItemData;
public static bool IsActive() { return true; }
public IEnumerable additionalItemData()
{
var data = AdditionalItemData.SelectSingle();
if (data is null)
{
data = new MyCustomTable();
AdditionalItemData.Insert(data);
}
return AdditionalItemData.Select();
}
}
[PXCacheName("Additional Item Data")]
[Serializable]
public class MyCustomTable : IBqlTable
{
#region CashAccountID
[Inventory]
[PXDefault]
public virtual int? InventoryID { get; set; }
public abstract class inventoryID : PX.Data.BQL.BqlInt.Field<inventoryID> { }
#endregion
#region Required
[PXDBBool()]
[PXDefault(false)]
[PXUIField(DisplayName = "Required")]
public virtual bool? Required { get; set; }
public abstract class required : PX.Data.BQL.BqlBool.Field<required> { }
#endregion
}