2016-07-29 3 views
1

Ich habe eine gespeicherte Prozedur, die von einer PXAction aufgerufen wird. Ich weiß, dass es gegen Acumaticas Best Practices ist, eine gespeicherte Prozedur zu verwenden, aber ich habe noch eine alternative Lösung für mein Ziel gefunden. Die gespeicherte Prozedur wertet jede Werbebuchung und die Preisklasse, der sie zugeordnet ist, abhängig von der breakQuantity aus, die den Einheitspreis bestimmt. Wenn mehrere Artikel zu derselben Preisklasse == gehören oder die Bruchmenge überschreiten, wird der Stückpreis reduziert.ALLE SOLine Artikel dynamisch aktualisieren, wenn ein neuer SOLine hinzugefügt wird

Was mit ich begann, war eine Reihe

Bestellmenge zu addieren Aktualisierung
protected virtual void SOLine_RowUpdating(PXCache sender, PXRowUpdatingEventArgs e) 
    { 
     SOLine row = (SOLine)e.Row; 
     formalizeOrderTotal(row); 
    } 

dann in meiner formalizeOrderTotal Funktion es eine foreach-Schleife auf SOLine in lines.Select() durchgeführt. Als Test habe ich gerade versucht, alle Bestellmengen zusammenzufassen und auf jede Werbebuchung anzuwenden. Dies wird nur nach der Aktualisierung aktualisiert, was den Zweck des Verschiebens der gespeicherten Prozedur in einen C# function/Acumatica Event-Handler negiert.

Wenn jemand einige Empfehlungen für eine gute Vorgehensweise zum Aktualisieren aller Zeilenelemente im Cache hat, wäre es sehr hilfreich, wenn Sie einige Eingaben bereitstellen könnten.

+0

'Dies nur nach der Aktualisierung aktualisiert', meinen Sie nach der Aktualisierung des Bildschirms/Grid? – Hybridzz

+0

Sie haben Recht! Entschuldigung, ich habe das nicht angegeben. – JB90

+0

Base.Transactions.View.RequestRefresh(); wird dein Problem lösen. – Hybridzz

Antwort

1

Versuchen Sie, Base.Transactions.View.RequestRefresh(); zu verwenden, die das Gitter auffordern, sich zu aktualisieren. In diesem Beispiel setze ich jede Zeilenmenge auf die Anzahl der im Raster vorhandenen SOLines.

using PX.Data; 
namespace PX.Objects.SO 
{ 

    public class SOOrderEntry_Extension:PXGraphExtension<SOOrderEntry> 
    { 
     protected virtual void SOLine_RowUpdating(PXCache sender, PXRowUpdatingEventArgs e) 
     { 
      SOLine row = (SOLine)e.Row; 
      formalizeOrderTotal(row); 
     } 

     private void formalizeOrderTotal(SOLine row) 
     { 
      foreach (SOLine line in Base.Transactions.Select()) 
      { 
       if(line.Qty == Base.Transactions.Select().Count) 
       { 
        continue; 
       } 

       line.Qty = Base.Transactions.Select().Count; 
       Base.Transactions.Update(line); 
       Base.Transactions.View.RequestRefresh(); 
      } 
     } 
    } 
} 
+0

Danke Simon, ich werde es jetzt versuchen! – JB90

+0

hat es geklappt! Ich werde versuchen, mit RequestRefresh() zu spielen, um zu versuchen, Preisaktualisierungen anzuwenden. Danke Simon. – JB90

Verwandte Themen