Acumatica - Как добавить новый столбец в InvoiceSplits Selector - PullRequest
0 голосов
/ 09 октября 2019

Мне нужно добавить UnitCost на экран «Выбор выбора сведений о счете-фактуре», который появляется при нажатии кнопки «Добавить счет-фактуру» на экране «Заказ на продажу», когда типом счета-фактуры является кредит или возврат. Я новичок в Acumatica и не уверен, как мне нужно сделать это как расширение. Я добавил его в InvoiceSplits, но когда я ставил там точки останова, я никогда не ударял их.

Я добавил этот код в SOOrderEntry ... Я на правильном пути?

namespace PX.Objects.SO
{
  public class SOOrderEntry_Extension : PXGraphExtension<SOOrderEntry>
  {
    [System.SerializableAttribute()]
    public class InvoiceSplits : IBqlTable
    {
    #region UnitCost
      public abstract class unitCost : PX.Data.IBqlField
      {
      }
      protected Decimal? _UnitCost;

      [PXDBPriceCost()]
      [PXUIField(DisplayName = "Unit Cost")]
      public virtual Decimal? UnitCost
      {
        get
        {
          return this._UnitCost;
        }
        set
        {
          this._UnitCost = value;
        }
      }
    }
    #endregion

    #region Event Handlers
    public delegate InvoiceSplits CreateInvoiceSplitsDelegate(ARTran artran, SOLine line, SOSalesPerTran sptran, INTran tran, INTranSplit split);
  //  [PXOverride]
    public InvoiceSplits CreateInvoiceSplits(ARTran artran, SOLine line, SOSalesPerTran sptran, INTran tran, INTranSplit split, CreateInvoiceSplitsDelegate baseMethod)
    {
      InvoiceSplits invSplit = new InvoiceSplits();

      invSplit.UnitCost = artran.UnitCost;
      if (tran != null)
      {
        invSplit.UnitCost = split.UnitCost ?? tran.UnitCost;
      }
        return invSplit;
     // return baseMethod(artran,line,sptran,tran,split);
    }

1 Ответ

0 голосов
/ 10 октября 2019

Вместо создания отдельного класса InvoiceSplits вам нужно создать PXCacheExtension из InvoiceSplits.

public sealed class InvoiceSplitsExtension : PXCacheExtension<InvoiceSplits>
{

    #region UnitCost
    public abstract class unitCost : IBqlField
    {
    }
    [PXDBPriceCost]
    [PXUIField(DisplayName = "Unit Cost")]
    public decimal? UnitCost { get; set; }
    #endregion

}

Затем в PXOverride метода CreateInvoiceSplits вы получите CacheExtension и установите для него UnitCost.

public delegate InvoiceSplits CreateInvoiceSplitsDel(ARTran artran, SOLine line, SOSalesPerTran sptran, INTran tran, INTranSplit split);

[PXOverride]
public InvoiceSplits CreateInvoiceSplits(ARTran artran, SOLine line, SOSalesPerTran sptran, INTran tran, INTranSplit split, CreateInvoiceSplitsDel del)
{
    InvoiceSplits invSplit = del?.Invoke(artran, line, sptran, tran, split);

    InvoiceSplitsExtension invSplitExt = PXCache<InvoiceSplits>.GetExtension<InvoiceSplitsExtension>(invSplit);

    invSplitExt.UnitCost = artran.UnitCost;

    if (tran != null)
    {
        invSplitExt.UnitCost = split.UnitCost ?? tran.UnitCost;
    }

    return invSplit;
}

Наконец, вам необходимо добавить поле UnitCost в пользовательский интерфейс. Для этого вам нужно перейти в пакет настройки, настроить экран SO301000 и перейти к диалоговым окнам-> Диалог: Добавить данные счета-> Сетка: invoiceSplits в древовидном представлении. Затем перейдите на вкладку «Добавить поля данных», выберите поле UnitCost и нажмите «Создать элементы управления».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...