APReleaseProcess_Extension настройка кода не работает в Acumatica ERP версии 2017 R2

#c# #customization #acumatica #erp

#c# #настройка #acumatica #erp

Вопрос:

Я попытался настроить выпуск кнопки на экране документов Release AP. введите описание изображения здесь

И затем я использовал следующий код:

 namespace PX.Objects.AP
{
  public class APReleaseProcess_Extension : PXGraphExtension<APReleaseProcess>
  {
  public delegate List<APRegister> ReleaseDocProcDel(JournalEntry je, ref APRegister doc, PXResult<APInvoice, 
                                                    CurrencyInfo, Terms, Vendor> res, bool isPrebooking, 
                                                    out List<INRegister> inDocs);
  [PXOverride]
  public List<APRegister> ReleaseDocProc(JournalEntry je, ref APRegister doc, 
                                        PXResult<APInvoice, CurrencyInfo, Terms, Vendor> res, 
                                        bool isPrebooking, 
                                        out List<INRegister> inDocs, ReleaseDocProcDel del)
  {
      je.RowInserting.AddHandler<GLTran>((sender, e) =>
      {
          GLTran glTran = e.Row as GLTran;
          APTran apTran = PXResult<APTran>.Current;
          if (glTran != null amp;amp; apTran != null)
          {
              APTranExt apTranEx = PXCache<APTran>.GetExtension<APTranExt>(apTran);
              if (apTran != null amp;amp; apTranEx.UsrJobOrderNbr != null)
              {
                  GLTranExt glTranEx = PXCache<GLTran>.GetExtension<GLTranExt>(glTran);
                  glTranEx.UsrJobOrderNbr = apTranEx.UsrJobOrderNbr;
              }
          }

          //APInvoice apInv = PXResult<APInvoice>.Current;
          APInvoice apInv = PXSelect<APInvoice,
                                Where<APInvoice.refNbr, Equal<Required<GLTran.refNbr>>,
                                    And<APInvoice.docType,
                                        Equal<Required<GLTran.tranType>>>>>.Select(sender.Graph, glTran.RefNbr, glTran.TranType);

          if (glTran != null amp;amp; apInv != null)
          {
              GLTranExt glTranEx = PXCache<GLTran>.GetExtension<GLTranExt>(glTran);
              glTranEx.UsrInvoiceNbr = apInv.InvoiceNbr;
          }

          APTaxTran apTaxTran = PXResult<APTaxTran>.Current;
          if (glTran != null amp;amp; apTaxTran != null)
          {
              APTaxTranExt apTaxTranEx = PXCache<APTaxTran>.GetExtension<APTaxTranExt>(apTaxTran);
              if (apTaxTran != null amp;amp; apTaxTranEx != null)
              {
                  GLTranExt glTranEx = PXCache<GLTran>.GetExtension<GLTranExt>(glTran);
                  glTranEx.UsrNoSeriFaktur = apTaxTranEx.UsrNoSeriFaktur;
                 }

              }

          }
              );
          return del(je, ref doc, res, isPrebooking, out inDocs);
      }
  }
}
 

Я пытался отладить этот код, но точка останова не была достигнута, правильный ли это метод настройки нажатия кнопки?
Кто-нибудь знает об этой проблеме?

Ответ №1:

В редакторе проекта настройки Acumatica в CODE разделе добавьте расширение graph для APReleaseProcess. Затем откройте сгенерированный файл кода и используйте кнопку действия OVERRIDE METHOD . Выберите целевой метод в списке и нажмите на SAVE кнопку. При этом будет вставлен соответствующий обработчик событий для используемой вами версии Acumatica:

введите описание изображения здесь

 namespace PX.Objects.AP
{
  public class APReleaseProcess_Extension : PXGraphExtension<APReleaseProcess>
  {
    #region Event Handlers
    public delegate List<APRegister> ReleaseDocProcDelegate(JournalEntry je, APRegister doc, Boolean isPrebooking, ref List<INRegister> inDocs);
    [PXOverride]
    public List<APRegister> ReleaseDocProc(JournalEntry je, APRegister doc, Boolean isPrebooking, ref List<INRegister> inDocs, ReleaseDocProcDelegate baseMethod)
    {
      return baseMethod(je,doc,isPrebooking,inDocs);
    }
    #endregion
  }
}
 

Комментарии:

1. Привет, Хьюз, спасибо за ваш ответ. Что касается вашего кода, похоже, он не отличается от моего кода. Но я не выполнил шаг переопределения метода для выхода из BLC. Является ли этот шаг обязательным для переопределения BLC? И если я выполню этот шаг, будет ли достигнута точка останова при обработке отладки?

2. Параметры метода выглядят по-другому, но вы использовали PXOverride в своем ответе, который является правильным. Что касается точек останова, можете ли вы продемонстрировать правильную загрузку символов? Или лучше, можете ли вы создать исключение вместо устранения неполадок с помощью точек останова? И на скриншоте строки не выбраны для обработки, вы обработали строку, выбрав ее сначала, прежде чем нажать «Отпустить»?