где найти код для сетки кнопок Action в acumatica - PullRequest
0 голосов
/ 20 января 2020

Я хотел бы видеть код позади кнопки действий сетки. скажем, кнопки в секторе сетки окна «Счета и настройки» помечены оранжевыми прямоугольниками.

Я хотел бы посмотреть, как код настраивается за кнопками. Где я могу найти файл или код в папке веб-сайта Acumatica?

Особенно мне нужен код за кнопкой «ДОБАВИТЬ ПОДКОНТРАКТ».

enter image description here

Ответы [ 2 ]

1 голос
/ 20 января 2020

Код для кнопок / действий выглядит так, как будто он взят из конструкторской версии, найденной в PX.Objects.CN.Subcontracts.AP.GraphExtensions.ApInvoiceEntryAddSubcontractsExtension (PX.Objects.CN.dll)

Фрагменты связанный код:

[PXButton]
    [PXUIField(DisplayName = "Add Subcontracts", FieldClass = "DISTR", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)]
    public virtual IEnumerable addSubcontracts(PXAdapter adapter)
    {
      this.Base.checkTaxCalcMode();
      if (!this.ShouldAddSubcontracts())
        return adapter.Get();
      this.Base.updateTaxCalcMode();
      return this.addSubcontract(adapter);
    }

[PXButton]
    [PXUIField(DisplayName = "Add Subcontract", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select, Visible = false)]
    public virtual IEnumerable addSubcontract(PXAdapter adapter)
    {
      return ApInvoiceEntryAddSubcontractsExtension.AddLines(new Func<PXAdapter, IEnumerable>(this.Base1.AddPOOrder2), adapter);
    }

    [PXButton]
    [PXUIField(DisplayName = "Add Subcontract Line", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)]
    public virtual IEnumerable addSubcontractLines(PXAdapter adapter)
    {
      this.Base.checkTaxCalcMode();
      return this.ShouldAddSubcontractLines() ? this.addSubcontractLine(adapter) : adapter.Get();
    }

    [PXButton]
    [PXUIField(DisplayName = "Add Subcontract Line", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select, Visible = false)]
    public virtual IEnumerable addSubcontractLine(PXAdapter adapter)
    {
      return ApInvoiceEntryAddSubcontractsExtension.AddLines(new Func<PXAdapter, IEnumerable>(this.Base2.AddPOOrderLine2), adapter);
    }

    private static IEnumerable AddLines(
      Func<PXAdapter, IEnumerable> addLine,
      PXAdapter adapter)
    {
      try
      {
        return addLine(adapter);
      }
      catch (PXException ex) when (ex.MessageNoPrefix == "Failed to add one or more lines from the PO order. Please check the Trace for details.")
      {
        throw new Exception("SC Error: Failed to add one or more lines from the Subcontract. Please check the Trace for details.");
      }
    }

Глядя на этот код, мы видим, что он будет использовать AddPOOrder2 из PX.Objects.PO.GraphExtensions.APInvoiceSmartPanel.AddPOOrderExtension из PX.Objects.dll

Этот код находится в доступном источнике в Acumatica как:

[PXUIField(DisplayName = Messages.AddPOOrder, MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select, Visible = false)]
        [PXLookupButton]
        [APMigrationModeDependentActionRestriction(
            restrictInMigrationMode: true,
            restrictForRegularDocumentInMigrationMode: true,
            restrictForUnreleasedMigratedDocumentInNormalMode: true)]
        public virtual IEnumerable AddPOOrder2(PXAdapter adapter)
        {
            bool isInvoice = (Base.Document.Current.DocType == APDocType.Invoice),
                isPrepayment = (Base.Document.Current.DocType == APDocType.Prepayment);
            if (Base.Document.Current != null &&
                isInvoice &&
                Base.Document.Current.Released == false &&
                Base.Document.Current.Prebooked == false)
            {
                List<POOrder> orders = poorderslist.Cache.Updated.RowCast<POOrder>().Where(rc => rc.Selected == true).ToList();
                foreach (POOrder rc in orders)
                {
                    Base.InvoicePOOrder(rc, false);
                }
                Base.AttachPrepayment(orders);
            }
            return adapter.Get();
        }

Базовый вызов здесь относится к APInvoiceEntry

0 голосов
/ 20 января 2020

когда вы декомпилируете файл PX.Objects.dll, мы можем найти код для "ADD PO"

PX.Objects.PO.GraphExtensions.APInvoiceSmartPanel.AddPOOrderExtension

но мне нужен код для ДОБАВИТЬ Субподряды

...