在acumatica中,如何获取选择器的值并用它来填充另一个字段?
In acumatica, how can I grab the value of a selector and use it to fill another field?
如下图所示,我想尝试将 Selector 的值传递给 Attention 字段。我正在尝试做到这一点,以便每当我选择一个新的选择器值时,注意字段将更新为选择器的值。
上图中的联系人选择器是一个自定义字段,所以我试图通过它的扩展访问它。但是,我似乎无法让它工作。
这是显示字段设置方式的数据访问屏幕:
这是代码,如果需要你可以获取它:
[PXDBString(50)]
[PXUIField(DisplayName="Contact")]
[PXSelector(typeof(Search2<Contact.displayName,
LeftJoin<BAccount, On<BAccount.bAccountID, Equal<Contact.bAccountID>>>,
Where<Contact.contactType, Equal<ContactTypesAttribute.person>>>))]
[PXRestrictor(typeof(
Where<Current<PMContact.customerID>,
Like<Contact.bAccountID>>), "")]
以下是我两次尝试获取扩展名的尝试。我试过在各种事件中使用这些代码; RowSelected、RowUpdated、FieldUpdated。似乎没有任何效果,这显然意味着我没有正确获取扩展,但我不确定还能尝试什么。
尝试 1
protected void PMContact_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
var row = (PMContact)e.Row;
if (row == null) return;
PMContactExt rowExt = row.GetExtension<PMContactExt>();
if (rowExt != null) {
row.Attention = rowExt.UsrContactSelect;
}
}
尝试 2
protected void PMContact_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
var row = (PMContact)e.Row;
if (row == null) return;
PMContact items = (PMContact)Base.ItemSettings.Current;
var itemExt = PXCache<PMContact>.GetExtension<PMContactExt>(items);
row.Attention = itemExt.UsrContactSelect;
}
这次尝试给我一个关于 ItemSettings 部分的错误:
\App_Code\Caches\ProjectEntry.cs(43): error CS1061: 'ProjectEntry' does not contain a definition for 'ItemSettings' and no accessible extension method 'ItemSettings' accepting a first argument of type 'ProjectEntry' could be found (are you missing a using directive or an assembly reference?)
我对我还能尝试什么来实现这一点有点困惑。
您还有其他建议吗? :)
尝试在您的选择器字段上使用字段更新事件。 row_selected 更适合驱动 UI 的行为。
ItemSettings 数据视图在 InventoryItemMaint 图表中,您是否在扩展 InventoryItemMaint?
同样不包含PMContact DAC,选择的是InventoryItem DAC。
出于这个原因,我不希望这行代码起作用:
PMContact items = (PMContact)Base.ItemSettings.Current;
I've tried using these pieces of code in various events; RowSelected, RowUpdated, FieldUpdated. Nothing seemed to work, which obviously means I'm not grabbing the extension properly,
我不确定这里的结论。您是否调试代码以确保 PMContactExt 扩展为空?
您是否进行了调试以确保调用了事件?如果没有调用事件,您需要在 ASPX 控件上添加 CommitChanges=True 属性。
应使用 RowUpdated 事件而不是 RowSelected,因为不建议使用 RowSelected 来设置 DAC 字段值。
PMContact DAC是投影吗?如果是投影,则需要同时扩展投影和基础 DAC。
编辑 这不是投影:
非常感谢@Hugues 和@Robert 的帮助!
正如 Hugues 提到的,我的自定义字段有 CommitChanges=False,所以我将其更改为 true,瞧,它成功了!
使用 RowSelected 事件效果很好,但我采纳了 Robert 的建议并将其更改为 FieldUpdated 以确保我做的事情更合适。
这是我在触发事件时使用的代码:
protected void PMContact_UsrContactSelect_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e)
{
var row = (PMContact)e.Row;
if (row == null) return;
PMContactExt rowExt = row.GetExtension<PMContactExt>();
if (rowExt != null) {
row.Attention = rowExt.UsrContactSelect;
}
}
再次感谢!这个问题真的很顽固 :D
如下图所示,我想尝试将 Selector 的值传递给 Attention 字段。我正在尝试做到这一点,以便每当我选择一个新的选择器值时,注意字段将更新为选择器的值。
上图中的联系人选择器是一个自定义字段,所以我试图通过它的扩展访问它。但是,我似乎无法让它工作。
这是显示字段设置方式的数据访问屏幕:
这是代码,如果需要你可以获取它:
[PXDBString(50)]
[PXUIField(DisplayName="Contact")]
[PXSelector(typeof(Search2<Contact.displayName,
LeftJoin<BAccount, On<BAccount.bAccountID, Equal<Contact.bAccountID>>>,
Where<Contact.contactType, Equal<ContactTypesAttribute.person>>>))]
[PXRestrictor(typeof(
Where<Current<PMContact.customerID>,
Like<Contact.bAccountID>>), "")]
以下是我两次尝试获取扩展名的尝试。我试过在各种事件中使用这些代码; RowSelected、RowUpdated、FieldUpdated。似乎没有任何效果,这显然意味着我没有正确获取扩展,但我不确定还能尝试什么。
尝试 1
protected void PMContact_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
var row = (PMContact)e.Row;
if (row == null) return;
PMContactExt rowExt = row.GetExtension<PMContactExt>();
if (rowExt != null) {
row.Attention = rowExt.UsrContactSelect;
}
}
尝试 2
protected void PMContact_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
var row = (PMContact)e.Row;
if (row == null) return;
PMContact items = (PMContact)Base.ItemSettings.Current;
var itemExt = PXCache<PMContact>.GetExtension<PMContactExt>(items);
row.Attention = itemExt.UsrContactSelect;
}
这次尝试给我一个关于 ItemSettings 部分的错误:
\App_Code\Caches\ProjectEntry.cs(43): error CS1061: 'ProjectEntry' does not contain a definition for 'ItemSettings' and no accessible extension method 'ItemSettings' accepting a first argument of type 'ProjectEntry' could be found (are you missing a using directive or an assembly reference?)
我对我还能尝试什么来实现这一点有点困惑。
您还有其他建议吗? :)
尝试在您的选择器字段上使用字段更新事件。 row_selected 更适合驱动 UI 的行为。
ItemSettings 数据视图在 InventoryItemMaint 图表中,您是否在扩展 InventoryItemMaint?
同样不包含PMContact DAC,选择的是InventoryItem DAC。
出于这个原因,我不希望这行代码起作用:
PMContact items = (PMContact)Base.ItemSettings.Current;
I've tried using these pieces of code in various events; RowSelected, RowUpdated, FieldUpdated. Nothing seemed to work, which obviously means I'm not grabbing the extension properly,
我不确定这里的结论。您是否调试代码以确保 PMContactExt 扩展为空?
您是否进行了调试以确保调用了事件?如果没有调用事件,您需要在 ASPX 控件上添加 CommitChanges=True 属性。
应使用 RowUpdated 事件而不是 RowSelected,因为不建议使用 RowSelected 来设置 DAC 字段值。
PMContact DAC是投影吗?如果是投影,则需要同时扩展投影和基础 DAC。
编辑 这不是投影:
非常感谢@Hugues 和@Robert 的帮助!
正如 Hugues 提到的,我的自定义字段有 CommitChanges=False,所以我将其更改为 true,瞧,它成功了!
使用 RowSelected 事件效果很好,但我采纳了 Robert 的建议并将其更改为 FieldUpdated 以确保我做的事情更合适。
这是我在触发事件时使用的代码:
protected void PMContact_UsrContactSelect_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e)
{
var row = (PMContact)e.Row;
if (row == null) return;
PMContactExt rowExt = row.GetExtension<PMContactExt>();
if (rowExt != null) {
row.Attention = rowExt.UsrContactSelect;
}
}
再次感谢!这个问题真的很顽固 :D