在Acumatica的Selector中通过“添加新”创建数据时,将数据传递到新记录

时间:2019-01-09 17:34:59

标签: acumatica

假设在屏幕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字段?

1 个答案:

答案 0 :(得分:0)

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();
}