Передача данных в новую запись при создании через «Добавить новый» в Selector в Acumatica - PullRequest
0 голосов
/ 09 января 2019

предположим, на экране 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 в поле Contact.BAccountID на экране CR302000?

1 Ответ

0 голосов
/ 09 января 2019

Функция 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();
}
...