我正在尝试将Acumatica 2017 R2中的相同自定义字段添加到两者“位置”屏幕(AR303020)和“客户”(AR303000)屏幕。在“客户>交付设置”选项卡上还有其他本机字段,这些字段显示了我尝试匹配的行为。 (例如:税收登记ID,税收区等。)可以从“客户”屏幕或“地点”屏幕查看/编辑这些字段。
使用Customization Project浏览器,我可以轻松地将字段添加到“位置”屏幕。
接下来,我想在“客户>交付设置选项卡>默认位置设置”组中添加一个新的自定义字段,该字段使用与添加到“位置”屏幕的自定义字段相同的DAC。
但是我不确定如何为“客户”屏幕正确定义相同的字段。默认情况下,自定义浏览器会将自定义字段添加到CR.Address DAC。我尝试使用以下定义创建新的CR.Address字段:
发布期间没有错误,但是Acumatica不会加载“客户”或“位置”屏幕。错误是“无效的列名'UsrCertificateDate”。我故意没有将UsrCertificateDate的列添加到CRAddress数据库表中,因为该列以前已添加到Location表中。如果只需要一个数据库字段,我宁愿不要维护两个数据库字段。
如何使这两个屏幕上的自定义字段一起工作?在“位置”屏幕中查看“位置”时,从“客户”屏幕中编辑默认位置应会更改该值,反之亦然。
答案 0 :(得分:0)
首先,您应该考虑DAC位置和地址的声明:
位置:
[Serializable]
public class Location : IBqlTable, IPaymentTypeDetailMaster, ILocation
{
.
.
地址:
[Serializable]
public class Address : IBqlTable, IAddressBase, IValidatedAddress, IPXSelectable
{
.
.
.
从声明中可以看到,它们都实现了IBqlTable,因此这意味着Location和Address在Acumatica中作为单独的实体存在。 在您的数据库中跟随sql将向您显示两个表都有自己的生命:
select top 10 * from Location
select top 10 * from Address
您将看到不同的输出。这也意味着您不能在同一张表中使用一个DAC扩展名,但需要扩展名。而且,您还需要为“位置”和“地址”表添加两列。
还有一点要注意,DAC之间的区别是CR.Address和CRAddress。
看看CRAddress声明:
[Serializable]
public class CRAddress : IBqlTable, IAddress, IAddressBase, IValidatedAddress
{
.
.
.
从声明中可以看到,实体CRAddress是第三个表。 如果假设所有这些操作,您将在位置和地址DAC扩展中添加同一列两次,或者作为另一个选择,可以创建表CertificationDates,其中将证书日期作为列之一,并且在两个扩展中都具有ID将CertificationDate用作外键。