2016-09-02 2 views
0

В нашем текущем запросе на настройку от клиента необходимо добавить подтверждающее сообщение на основе некоторой логики на экране Shippers до того, как будет разрешен процесс подтверждения отправки.Добавление подтверждения перед выполнением «Подтвердить отправку»

Моя первая мысль заключалась в том, чтобы переопределить метод ConfirmShipment по умолчанию с помощью процедур проверки, и если подтверждение ясно, чтобы продолжить логику подтверждения запаса.

Ниже Snippit кода используется:

[PXOverride] 
    public virtual void ConfirmShipment(SOOrderEntry docgraph, SOShipment shiporder, ConfirmShipmentDelegate confirmdelegate) 
    { 
       var baseConfirm = true; 
       WebDialogResult result = Base.Document.View.Ask(Messages.ShippingConfirmation, MessageButtons.YesNo); 
       if (result == WebDialogResult.Yes) 
       { 
        baseConfirm = false; 
       } 

       if (baseConfirm) 
       { 
        confirmdelegate(docgraph,shiporder); 
       } 
    } 

Функциональность переопределения делает работу, и я получу запрос на подтверждение, однако после того, как не выбирая «Да/Нет» подсказкам, выходы выполнение кода. Результат проверки == WebDialogResult даже не вызван. Я считаю, что это может быть вызвано тем, что метод запускается из продолжительной операции, которая прерывается результатом диалога.

Моей второй мыслью было переопределить метод «Действие» и обработать проверки до того, как метод ConfirmShipment даже вызван.

При попытке это с помощью метода проб ниже, делегат всегда возвращается нуль

//[PXOverride] 
    //[PXUIField(DisplayName = "Actions", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)] 
    //[PXButton] 
    //public virtual IEnumerable Action(PXAdapter adapter, 
    //  [PXInt] 
    //  [PXIntList(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, new string[] { "Confirm Shipment", "Create Invoice", "Post Invoice to IN", "Apply Assignment Rules", "Correct Shipment", "Create Drop-Ship Invoice", "Print Labels", "Get Return Labels", "Cancel Return", "Print Pick List" })] 
    //  int? actionID, 
    //  [PXString()] 
    //  string ActionName, 
    //  Func<PXAdapter,int?,string,IEnumerable> actiondelegate 
    //  ) 
    //{ 

С и/либо из вышесказанного, что бы лучший способ перехватить «ConfirmShipment» действия, чтобы добавить подтверждение webdialog перед запуском методов запаса. Есть ли способ обойти проблему с длинным runnign процессом при подтверждении или есть еще одна проблема, которая мешает правильному возврату?

Любая помощь/направление будут оценены.

ответ

1

Ниже код работает. Как бы то ни было, я не могу прочитать ActionName, но идентификатор действия в этом случае кажется правильным. : s

public PXAction<SOShipment> action; 
     [PXUIField(DisplayName = "Actions", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)] 
     [PXButton] 
     protected virtual IEnumerable Action(PXAdapter adapter, 
      [PXInt] 
      [PXIntList(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, new string[] { "Confirm Shipment", "Create Invoice", "Post Invoice to IN", "Apply Assignment Rules", "Correct Shipment", "Create Drop-Ship Invoice", "Print Labels", "Get Return Labels", "Cancel Return", "Print Pick List" })] 
      int? actionID, 
      [PXString()] 
      string ActionName 
      ) 
     { 
      if (actionID == 1) 
      { 
       var baseConfirm = false; 
       WebDialogResult result = Base.Document.View.Ask("confirm?", MessageButtons.YesNo); 
       if (result == WebDialogResult.Yes) 
       { 
        baseConfirm = true; 
       } 

       if (baseConfirm) 
       { 
        return Base.action.Press(adapter); 
       } 
       else 
        return adapter.Get(); 
      } 
      else 
       return Base.action.Press(adapter); 
     } 
+0

Спасибо Hybridzz. В конце концов, это то, что у меня было, кроме адаптера return.Get() .... это было либо это, либо просто перезапуск IIS, который, наконец, отбросил его. –

Смежные вопросы