2017-02-14 17 views
1

我需要在我的一個自定義中顯示一個彈出窗口,直接在用戶修改其中一個控件的值之後(在這種情況下,SOLine中的自定義字段銷售訂單輸入屏幕)。該彈出窗口顯示了用戶在完成該行之前必須選擇的網格中的一些附加值。在字段值更改後顯示智能面板 - 網格保持空

使用標準過程SmartPanel被添加到屏幕上。

如果我從一個動作/ PXLookupButton調用這個,彈出窗口顯示並且網格正確填充。

如果我將它移動到「FieldUpdated」或「RowSelected」事件中,將顯示智能面板,但網格總是空的。再次,如果我點擊按鈕,網格保持空白,直到我取消修改並僅使用按鈕重新輸入。

我試着在這些事件中調用動作的按下方法,但也發生了相同的結果。

監視SQL事件探查器和調試器事件我可以看到BQL語句正在執行並返回正確的行,它只是不顯示在智能面板的網格中。

是否可以處理這種類型的請求?我假設我需要移動這個不同的方法和/或傳遞一些額外的值,但沒有找到正確的組合。

此上Acumatica 5.3成立/ 6.1

任何輸入,將不勝感激。

回答

2

RowUpdated處理讓我達到要求的行爲和字段的值更改後顯示SmartPanel

以下示例依賴於自定義未綁定觸發器對話框SOLine DAC聲明的字段。當用戶檢入或uncheckes 觸發器對話框標誌,系統會顯示項目數量對話框更新數量選定SOLine記載:

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

非常基本的SmartPanel聲明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> 

SOOrderEntry BLC擴展訂閱完成RowUpdated處理程序SOLine DAC顯示項目數量對話框的用戶:

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(); 
     } 
    } 
} 

的擴展類的另一部分是ChangeOk行動由調用SmartPanel更新數量選定記錄中的文檔詳細信息網格。要從屏幕工具欄中隱藏ChangeOk操作,還需要將以下命令添加到PXDataSource.CallbackCommands集合中:

<px:PXDSCallbackCommand Name="ChangeOk" Visible="False" /> 
相關問題