Acumatica Добавление столбца в существующую сетку - PullRequest
0 голосов
/ 24 октября 2018

Клиент требует настройки в Acumatica, чтобы добавить ссылочный номер счета в таблицу «Распознавание прогона», в которой для представления данных выбрано «Элементы».Я добавил столбец в сетку и определил делегата для пользовательского представления данных: однако ссылка.Nbr не заполняется, может ли кто-нибудь помочь с привязкой нового представления данных к существующей сетке?Это мое расширение кода.

   namespace PX.Objects.DR
{
  public class ScheduledTranExt :          PXCacheExtension<PX.Objects.DR.DRRecognition.ScheduledTran>
    {
    #region UsrRefNbr

        [PXString]
        [PXUIField(DisplayName = "Ref. Nbr.")]
    public virtual string UsrRefNbr { get; set; }
    public abstract class usrRefNbr : IBqlField { }
    #endregion

   }
  public class DRRecognitionPXExt : PXGraphExtension<DRRecognition>
  {
    #region Event Handlers
    public PXFilteredProcessing<DRRecognition.ScheduledTran,DRRecognition.ScheduleRecognitionFilter> ItemsCustom;
    public PXSelectJoin<ARInvoice,
      InnerJoin<DRSchedule, On<DRSchedule.docType, Equal<ARInvoice.docType>,
      And<DRSchedule.refNbr, Equal<ARInvoice.refNbr>>>>,
      Where<DRSchedule.scheduleNbr, Equal<Required<DRSchedule.scheduleNbr>>>> Invoices;
    protected
    virtual IEnumerable itemsCustom()
    {
      foreach (DRRecognition.ScheduledTran result
      in Base.Items.Select())
      {
      ARInvoice invoice = Invoices.Select(result.ScheduleNbr);
      var cache = Base.Caches[typeof(DRRecognition.ScheduledTran)];
      var tranExt = cache.GetExtension<ScheduledTranExt>(result);
        tranExt.UsrRefNbr = invoice.RefNbr;`enter code here`
      cache.Update(result);
      yield return result;
      }
    }


     #endregion
  }
} 

1 Ответ

0 голосов
/ 24 октября 2018

Избегайте переопределения DataView и назначения значения в делегате представления.Есть и другой, менее сложный способ добиться этого.

Это должно быть осуществимо с помощью PXFormula / PXDBScalar или RowSelected / FieldSelecting.Пример:

using PX.Data;
using PX.Objects.AR;

namespace PX.Objects.DR
{
  public class DRRecognition_Extension:PXGraphExtension<DRRecognition>
  {
     public void ScheduledTran_UsrRefNbr_FieldSelecting(PXCache sender, PXFieldSelectingEventArgs e)
     {
        DRRecognition.ScheduledTran tran = e.Row as DRRecognition.ScheduledTran;

        if (tran != null)
        {
          ARInvoice invoice = PXSelectJoin<ARInvoice,
                              InnerJoin<DRSchedule, On<DRSchedule.scheduleNbr, Equal<Required<DRRecognition.ScheduledTran.scheduleNbr>>>>,
                              Where<ARInvoice.docType, Equal<DRSchedule.docType>,
                              And<ARInvoice.refNbr, Equal<DRSchedule.refNbr>>>>.Select(Base, tran.ScheduleNbr);

          if (invoice != null)
          {
            e.ReturnValue = invoice.RefNbr;
          }
        }
     }
  }
}

enter image description here

...