通过 Acumatica 选择器中的"Add New"创建时将数据传递到新记录



假设在屏幕上SO301000我有一个PXSelector:

namespace PX.Objects.SO
{
  public class SOOrderExt : PXCacheExtension<PX.Objects.SO.SOOrder>
  {
    #region UsrOrderByContact
    [PXDBInt]
    [PXDefault(typeof(Contact),PersistingCheck=PXPersistingCheck.Nothing)]
    [PXUIField(DisplayName="Ordered By")]
    [PXSelector(
        typeof(Search<Contact.contactID,
                    Where<Contact.bAccountID, Equal<Current<SOOrder.customerID>>,
                      And<Contact.contactType, Equal<ContactTypesAttribute.person>>>>),
        new Type[]
        {
          typeof(Contact.lastName),
          typeof(Contact.firstName),
          typeof(Contact.phone1)
        },
        SubstituteKey = typeof(Contact.displayName)
    )]
    public virtual int? UsrOrderByContact { get; set; }
    public abstract class usrOrderByContact : IBqlField { }
    #endregion
  }
}

和 ASPX:
<px:PXSelector runat="server" ID="CstPXSelector15" DataField="UsrOrderByContact" AllowAddNew="True" AllowEdit="True" AutoAdjustColumns="True" />

这将显示基于销售订单中当前客户的联系人列表。

我想添加新的联系人,所以我单击选择器旁边的铅笔图标,并在屏幕CR302000处看到一个新窗口。

如何将当前 SOOrder.CustomerID 的值传递到屏幕CR302000上的 Contact.BAccountID 字段?

AllowEdit功能(铅笔)是一个配置选项,不涉及编程。因此,您无法让它执行尚未开箱即用的行为。

因此,您必须删除AllowEdit并将其替换为普通的操作按钮。您可以设置按钮样式以仅显示铅笔图标。在事件处理程序中,您可以在重定向用户之前填充图形的字段:

[PXButton(ImageKey = PX.Web.UI.Sprite.Main.RecordEdit]
public virtual IEnumerable EditContact(PXAdapter adapter)
{
    bool createNewContact = [... false to open existing, true to create a new one...];
    ContactMaint graph = PXGraph.CreateInstance<ContactMaint>();
    if (createNewContact)
    {
        // Create new contact and initialize fields before redirecting
        var newContact = (Contact)graph.Contact.Cache.CreateInstance();
        newContact.BAccountID = [... SOOrder.CustomerID...];
        graph.Contact.Current = newContact;
    }
    else
    {
        // If already selected, you want to redirect to the 
        // existing contact instead of creating a new one
        graph.Contact.Current = graph.Contact.Search<Contact.contactID>([... current.ContactID ...]);
    }
    PXRedirectHelper.TryRedirect(graph, PXRedirectHelper.WindowMode.NewWindow);
    return adapter.Get();
}

相关内容

最新更新