2016-11-23 3 views
0

Ich habe eine SO Order Entry-Anpassung, die ein Anerkanntes Kontrollkästchen für jede SO-Zeile während des Aktions-E-Mail-Verkaufsauftrags/Angebots festlegt. public CRActivityList Aktivität; öffentliche PXAction-Benachrichtigung; [PXUIField (Displayname = "Benachrichtigungen", Visible = false)] [PXButton (ImageKey = PX.Web.UI.Sprite.Main.DataEntryF)] geschützter virtueller IEnumerable-Mitteilung (PXAdapter Adapter, [PXString] String notificationCD ) { foreach (SOOrder Ordnung in adapter.Get()) { So aktualisieren Sie automatisch die SO-Bestelleintrags-Seite

 var parameters = new Dictionary<string, string>(); 
     parameters["SOOrder.OrderType"] = order.OrderType; 
     parameters["SOOrder.OrderNbr"] = order.OrderNbr; 
    Activity.SendNotification(ARNotificationSource.Customer,  notificationCD, order.BranchID, parameters); 

     foreach (SOLine line in PXSelect<SOLine, Where<SOLine.orderNbr, Equal<Required<SOLine.orderNbr>>>>.Select(Base, order.OrderNbr)) 
     { 

      SOLineExt rowExt = line.GetExtension<SOLineExt>(); 
      rowExt.UsrAcknowledged = true; 

       Base.Transactions.Update(line); 
       //Base.Transactions.View.RequestRefresh(); 
       // SOOrderEntry grp = PXGraph.CreateInstance<SOOrderEntry>(); 
       // grp.Document.Search<SOOrder.orderNbr>(order.OrderNbr, order.OrderType); 

     } 
     yield return order; 
    } 
    } 

Alles funktioniert wie erwartet, aber ich muss manuell aktualisieren Sie die Seite, um zu sehen, dass die Kontrollkästchen aktiviert sind. Beim manuellen Aktualisieren des Rasters werden nicht alle Überprüfungen korrekt angezeigt. Wie kann ich die Seite nach dem Prozess automatisch aktualisieren, sodass sie korrekt angezeigt wird?

Antwort

0

Normalerweise funktioniert ein Cache klar für mich, aber ich sehe nicht, dass Sie Ihre Änderung beibehalten werden. So könnte ein Benutzer Ihre Änderung ohne Speichern abbrechen. Wenn Sie sicherstellen möchten, dass Ihr Flag für den Benutzer gesetzt und gespeichert ist, sollten Sie die Änderungen speichern und anschließend den Cache löschen. (aber speichern konnte die Seite auch aktualisieren)

Base.Actions.PressSave(); 
Base.Transactions.Cache.Clear(); 
Base.Transactions.Cache.ClearQueryCache(); 

Versuchen Sie das vor der Rückkehr.

+0

Brebdan, Danke für die Antwort. Leider hat sich daran nichts geändert. Ich teste mit einer Bestellung, die drei Zeilen hat, und nach dem E-Mail-Prozess werden nach dem Zufallsprinzip 0-2 Zeilen angezeigt. Wenn Sie das Raster manuell aktualisieren, werden die gleichen Ergebnisse erzielt. Wenn Sie die gesamte Seite aktualisieren, werden alle Zeilen mit dem aktivierten Kontrollkästchen angezeigt. Mit den Pfeiltasten, um eine Bestellung zurückzugehen und dann zurück zu zeigen, werden alle aktivierten Kästchen angezeigt. – GeorgeM

+0

Versuchen Sie Base.Document.Cache.Clear(); Alternativ habe ich Base.Actions.PressCancel() verwendet, um eine Seite zu aktualisieren. Könnte dies nach deinem PressSave versuchen. – Brendan

+0

Brendan, Nochmals vielen Dank, aber keine Würfel. Ich denke, mein Problem ist, dass ich die Bestellung nicht aktualisieren kann, wenn ich in der Aktion bin. Ich werde einen Fall einreichen – GeorgeM

0

Versuchen in der Welt Ende Aktionsdelegate Aufruf:

Base.Transactions.View.RequestRefresh(); 

Wenn Post zurück empfangen wird, PXGrid nur aktuelle Datensatz synchronisieren, nicht neu zu streichen/erfrischend andere Reihen.

+0

Ruslan, ich habe den RequestRefresh am Ende der Benachrichtigungsaktion platziert. Ich probierte es auch vor und nach der Rendite und am Ende des für jeden SOLine und für jeden SO-Auftrag, um absolut sicher zu sein. Ich bekomme die gleichen Ergebnisse, das heißt, keine Aktualisierung, es sei denn, ich manuell – GeorgeM

0

Das folgende Code-Snippet setzt ein Anerkanntes Kontrollkästchen für jede SO-Zeile während der Aktion Email Sales Order/Quote. Leider wurde das Raster "Details" aufgrund eines Problems mit der ReportProcessor.ProcessReport (Report definition) -Methode, die den PXLongOperationState- und UI-Thread-BLC-Status beschädigt, nicht automatisch aktualisiert. Das Problem wird derzeit im letzten Build 6.00.1686 behoben.

using PX.Data; 
using PX.Objects.AR; 
using System.Collections; 
using System.Collections.Generic; 

namespace PX.Objects.SO 
{ 
    public class SOOrderEntryExt : PXGraphExtension<SOOrderEntry> 
    { 
     [PXUIField(DisplayName = "Notifications", Visible = false)] 
     [PXButton(ImageKey = PX.Web.UI.Sprite.Main.DataEntryF)] 
     protected IEnumerable Notification(PXAdapter adapter, [PXString] string notificationCD) 
     { 
      foreach (SOOrder order in adapter.Get()) 
      { 
       var parameters = new Dictionary<string, string>(); 
       parameters["SOOrder.OrderType"] = order.OrderType; 
       parameters["SOOrder.OrderNbr"] = order.OrderNbr; 
       Base.Activity.SendNotification(ARNotificationSource.Customer, notificationCD, order.BranchID, parameters); 

       foreach (SOLine line in Base.Transactions.Select()) 
       { 
        SOLineExt rowExt = line.GetExtension<SOLineExt>(); 


      rowExt.UsrAcknowledged = true; 
       Base.Transactions.Update(line); 
      } 
      Base.Save.Press(); 

      yield return order; 
     } 
    } 
} 

}

+0

Das Update ist jetzt mit der neuesten 6.00.1686 Build verfügbar. – RuslanDev

Verwandte Themen