在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 的行为。

https://help-2021r1.acumatica.com/(W(1))/Help?ScreenId=ShowWiki&pageid=9048a6d5-41a0-a5bd-9b78-7ce9833114b2

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