2017-02-14 4 views
1

Ich habe die Notwendigkeit in einer meiner Anpassungen, ein Popup anzuzeigen, direkt nachdem der Benutzer den Wert eines der Steuerelemente ändert (in diesem Fall ein benutzerdefiniertes Feld in der SOLine von Bildschirm Kundenauftragseingabe). Dieses Popup zeigt einige zusätzliche Werte in einem Raster, die der Benutzer auswählen muss, bevor er die Zeile vervollständigt.Anzeigen von Smartpanel nach Feldwertänderungen - Gitter bleibt leer

Mithilfe des Standardprozesses wurde ein SmartPanel zum Bildschirm hinzugefügt.

Wenn ich dies von einer Aktion/PXLookupButton aus aufrufen, wird das Popup angezeigt und das Raster wird korrekt ausgefüllt.

Wenn ich dies entweder zum Ereignis "FieldUpdated" oder "RowSelected" verschiebe, wird das Smartpanel angezeigt, das Raster ist jedoch immer leer. Noch einmal, wenn ich dann auf den Knopf klicke, bleibt das Gitter leer, bis ich die Änderungen annulliere und mit nur dem Knopf neu eingib.

Ich habe versucht, die Presse-Methode der Aktion auch in diesen Ereignissen aufzurufen, aber das gleiche Ergebnis tritt auf.

Watching SQL Profiler und die Debugger-Ereignisse kann ich sehen, dass die BQL-Anweisung ausgeführt wird und die richtigen Zeilen zurückgegeben, es wird nur nicht im Raster des Smartpanels angezeigt.

Ist es möglich, diese Art von Anfrage zu bearbeiten? Ich gehe davon aus, dass ich dies entweder auf eine andere Methode verschieben und/oder einige zusätzliche Werte übergeben muss, aber nicht die richtige Kombination gefunden habe.

Dies gilt auf Acumatica 5.3/6.1

Jede Eingabe geschätzt würde.

Antwort

2

RowUpdated Handler erlaubt mir angeforderte Verhalten zu erreichen und Smartpanel nach Feldwertänderung zeigen.

Beispiel unten bezieht sich auf benutzerdefinierte ungebundene Trigger Dialog Feld für die SOLine DAC deklariert. Wenn ein Scheck Benutzer oder uncheckes Trigger-Dialog Flag, wird das System Artikel Menge Dialog zeigt Menge für ausgewählte Soline Datensatz zu aktualisieren:

public class SOLineExt : PXCacheExtension<SOLine> 
{ 
    #region TriggerDialog 
    public abstract class triggerDialog : PX.Data.IBqlField 
    { 
    } 
    [PXBool] 
    [PXUIField(DisplayName = "Trigger Dialog")] 
    public virtual bool? TriggerDialog { get; set; } 
    #endregion 
} 

enter image description here

Sehr einfache Smartpanel Erklärung Aspx:

<px:PXSmartPanel runat="server" ID="CstSmartPanel2" Key="SOLineParam" Caption="Item Quantity" AutoRepaint="True" 
       CaptionVisible="True" AcceptButtonID="CstButton6" AutoReload="true" > 
    <px:PXFormView runat="server" ID="CstFormView3" DataMember="SOLineParam" SkinID="Transparent" > 
     <Template> 
      <px:PXLayoutRule runat="server" StartColumn="True" /> 
      <px:PXNumberEdit runat="server" ID="CstPXNumberEdit10" DataField="OrderQty" /> 
     </Template> 
    </px:PXFormView> 
     <px:PXLayoutRule runat="server" StartRow="True" /> 
     <px:PXPanel runat="server" ID="CstPanel5" SkinID="Buttons"> 
      <px:PXButton runat="server" ID="CstButton6" DialogResult="OK" CommandName="ChangeOk" CommandSourceID="ds" /> 
      <px:PXButton runat="server" ID="CstButton7" DialogResult="Cancel" Text="Cancel" /> 
    </px:PXPanel> 
</px:PXSmartPanel> 

Accomplished mit der SOOrderEntry BLC Erweiterung abonniert RowUpdated Handler für das SOLine DAC Artikel Menge Dialog an einen Benutzer zeigen:

public class SOOrderEntryExt : PXGraphExtension<SOOrderEntry> 
{ 
    [Serializable] 
    public class SOLineParams : IBqlTable 
    { 
     #region OrderQty 
     public abstract class orderQty : PX.Data.IBqlField 
     { 
     } 

     [PXDBDecimal] 
     [PXDefault(TypeCode.Decimal, "0.0")] 
     [PXUIField(DisplayName = "Quantity")] 
     public virtual decimal? OrderQty { get; set; } 
     #endregion 
    } 

    public PXFilter<SOLineParams> SOLineParam; 

    public PXAction<SOOrder> ChangeOk; 
    [PXUIField(DisplayName = "OK")] 
    [PXButton(CommitChanges = true)] 
    protected void changeOk() 
    { 
     var lineParams = SOLineParam.Current; 
     Base.Transactions.Cache.SetValue<SOLine.orderQty>(Base.Transactions.Current, lineParams.OrderQty); 
     SOLineParam.Cache.Clear(); 
    } 

    public void SOLine_RowUpdated(PXCache sender, PXRowUpdatedEventArgs e) 
    { 
     if (!sender.ObjectsEqual<SOLineExt.triggerDialog>(e.Row, e.OldRow) && e.ExternalCall == true) 
     { 
      SOLineParam.AskExt(); 
     } 
    } 
} 

Ein weiterer Teil der Erweiterungsklasse ist ChangeOk Aktion aufgerufen durch Smartpanel zu aktualisieren Menge für ausgewählten Datensatz im Dokument Details Raster.Um die Aktion aus der Symbolleiste des Bildschirms auszublenden, müssen Sie auch den folgenden Befehl in PXDataSource.CallbackCommands collection einfügen:

Verwandte Themen