Я создал одно новое поле расширения на экране контактов (идентификатор местоположения --- int) и на экране местоположения клиента, когда я нажимаю кнопку +, он должен перенаправлять на экран контактов, а сеанс заголовка Клиент и идентификатор местоположения должны быть по умолчанию, но идентификатор местоположения не невыполнение обязательств.
Вот пример img:
Вот код, который я написал:
public PXDBAction<Location> addContact;
[PXUIField(DisplayName = Messages.AddContact)]
[PXButton(ImageKey = PX.Web.UI.Sprite.Main.DataEntry)]
public virtual void AddContact()
{
var row = Base.Location.Current;
if (row == null || row.BAccountID == null) return;
ContactExt extension = PXCache<Contact>.GetExtension<ContactExt>(Base.Contact.Current); //Base.Contact.Current
ContactMaint graph = PXGraph.CreateInstance<ContactMaint>();
graph.Clear();
Location get = Base.Location.Current;
Contact retbatch = graph.Contact.Insert(new Contact());
retbatch.BAccountID = get.BAccountID;
extension.UsrLocationCD = get.LocationID;
if (!Base.IsContractBasedAPI)
PXRedirectHelper.TryRedirect(graph, PXRedirectHelper.WindowMode.NewWindow);
graph.Save.Press();
}
Логика недавно созданного поля расширения:
public class ContactExt : PXCacheExtension<PX.Objects.CR.Contact> /*, IBqlTable*/
{
#region UsrLocationCD
[PXDBInt()]
[PXUIField(DisplayName = "Location ID")]
[PXSelector(
typeof(Search<Location.locationID, Where<Location.bAccountID,
Equal<Current<Contact.bAccountID>>>>),
SubstituteKey = typeof(Location.locationCD), ValidateValue = false)]
public virtual int? UsrLocationCD { get; set; }
public abstract class usrLocationCD : PX.Data.BQL.BqlInt.Field<usrLocationCD> { }
#endregion
}
Это точка останова img:
И вот такая же функциональность должна быть на экране "Возможности".
Пример изображения:
А это похожий код (экран возможностей):
public PXDBAction<Location> addOpportunity;
[PXUIField(DisplayName = Messages.AddNewOpportunity)]
[PXButton(ImageKey = PX.Web.UI.Sprite.Main.AddNew)]
public virtual void AddOpportunity()
{
var row = CurrentBAccount.Current;
if (row == null || row.BAccountID == null) return;
OpportunityMaint graph = PXGraph.CreateInstance<OpportunityMaint>();
graph.Clear();
Location get = Base.Location.Current;
CROpportunity retbatch = graph.Opportunity.Insert(new CROpportunity());
retbatch.BAccountID = get.BAccountID;
retbatch.LocationID = get.LocationID;
if (!Base.IsContractBasedAPI)
PXRedirectHelper.TryRedirect(graph, PXRedirectHelper.WindowMode.NewWindow);
graph.Save.Press();
}
это точка останова img:
функциональность работает на экране возможностей
В чем ошибка логики экрана контактов и как решить эту проблему?
Я новичок в этой акуматике.