美好的一天!
我在DAC中有一个字段,需要根据我在首选项上设置的设置来更改Selector属性。如您所知,acumatica上已有一个LeadSelector属性和CustomerSelector属性。如果我在偏好设置中设置“客户”,则希望更改该给定字段的选择器属性,反之亦然。
现在这里有可用资源吗?
我一直在考虑创建扩展选择器属性,在该属性上,我将检查什么是首选项设置,然后继承扩展选择器上的LeadSelector或CustomerSelector。但是我认为这不可能。
我一直在考虑的另一件事是,只要设置了首选项,就在属性上添加两个选择器,并将它们从图级别中删除。
我还在考虑创建2个选择器,根据偏好设置,我将在其中隐藏另一个选择器。但是问题是,选择器不仅在一页上使用,而且如果我创建2个选择器只是为了解决该问题,这很麻烦。而且将来,它可能不仅会成为领导者和客户选择者。
我希望你能帮助我,我没有主意。非常感谢。
更新09-24-2019
我为销售线索和客户选择器属性创建了一个自定义选择器属性。它可以正常工作,但是现在我的问题是,描述字段将不会显示在文本框或该字段上,并且还会出现诸如“无法在系统中找到投资者名称”之类的错误。
投资者选择器属性
public class InvestorSelectorAttribute : PXCustomSelectorAttribute
{
public InvestorSelectorAttribute() : base(typeof(REInvestor.accountID))
{
DescriptionField = typeof(REInvestor.acctName);
SubstituteKey = typeof(REInvestor.acctName);
}
protected IEnumerable GetRecords()
{
var leads = new PXSelect<Contact,
Where<Contact.contactType, Equal<ContactTypesAttribute.lead>,
Or<Where<Contact.contactType, Equal<ContactTypesAttribute.person>,
And<Contact.status, Equal<LeadStatusesAttribute.converted>>>>>>(this._Graph);
var contacts = new PXSelect<BAccountR>(this._Graph);
REFeature setup = PXSelect<REFeature>.Select(this._Graph);
if (setup.InvestorType == InvestorTypesAttribute.LeadVal)
{
foreach (Contact lead in leads.Select())
{
yield return new REInvestor { AccountID = lead.ContactID, AcctName = lead.DisplayName };
}
}
else
{
foreach (BAccountR contact in contacts.Select())
{
yield return new REInvestor { AccountID = contact.BAccountID, AcctName = contact.AcctName, AcctCD = contact.AcctCD };
}
}
}
}
未绑定的REInvestor DAC
[Serializable]
[PXCacheName("Investor")]
public class REInvestor : IBqlTable
{
public abstract class accountID : BqlInt.Field<accountID> { }
[PXDBInt(IsKey = true)]
[PXUIField(DisplayName = REMessages.DisplayNames.AccountID, Visibility = PXUIVisibility.SelectorVisible)]
public virtual int? AccountID { get; set; }
public abstract class acctName : BqlString.Field<acctName> { }
[PXDBString(128, InputMask = "", IsUnicode = true)]
[PXUIField(DisplayName = REMessages.DisplayNames.AccountName, Visibility = PXUIVisibility.SelectorVisible)]
public virtual string AcctName { get; set; }
public abstract class acctCD : BqlString.Field<acctCD> { }
[PXDBString(128, InputMask = "", IsUnicode = true)]
[PXUIField(DisplayName = REMessages.DisplayNames.AcctCD, Visibility = PXUIVisibility.SelectorVisible)]
public virtual string AcctCD { get; set; }
}
** DAC集成**
[PXDBInt]
[PXUIField(DisplayName = REMessages.DisplayNames.InvestorsName, Required = true)]
[InvestorSelector()]
[PXDefault(PersistingCheck = PXPersistingCheck.NullOrBlank)]
public virtual int? ContactID { get; set; }
我真的需要您的帮助和建议。非常感谢。
答案 0 :(得分:1)
可以定义2个字段并显示一个字段。 每个人都有自己的选择器和PXUIField描述。 您可以在图形级别的设置字段(RowSelected事件)上为其中之一设置可见性
如果您需要将它们合并在persistent(将两个字段都保留在一个绑定字段中)中,则只需使用2个未绑定字段来收集/显示数据。
关于更新/持久事件,您可以将值从未绑定字段更新为唯一数据库字段
在检索时,您可以进行数据视图-委派以根据配置填充未绑定的字段;
当您计划在多个页面(图形)上移动时,请将代码从图形移动到PXEventSubscriberAttribute 您在DAC级别添加新属性。 这样,您就可以访问可能需要的所有Graph事件(持续,选择,更新等)。所有代码都放在一个地方。
对于多个DAC,您仍然需要创建字段。为他们添加新属性。