如何在回发后继续关注PXNumberEdit字段?

时间:2015-08-12 15:46:45

标签: acumatica

我有一个PXNumberEdit字段,在输入时,会在自定义的SO301000页面上将产品添加到网格中。插入工作和字段 在添加产品后清空。但是,我想把重点放在那个领域。似乎并不存在 该字段的SetFocus方法。

我尝试使用SO301000.cs代码来设置焦点,方法是为onValueChanged添加一个函数 将对象保存为会话变量并在页面加载上将焦点设置为保存的对象。这导致 永远不会完成加载的页面。

我也尝试过以各种方式使用jquery,但这也没有用。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:4)

黑客

框架中没有SetFocus方法,就像SetEnabled / SetDisplayName / SetVisibility一样,因为大多数事件是在焦点更改时引发的,而框架确保了每次记录更新都不会丢失焦点。要手动设置,您需要等待回调完成后再设置焦点。

为此,您需要将Javascript委托添加到要在回调结束后调用的事件处理程序列表中。以下代码将重点放在客户参考Nbr上。每次更改客户ID时(在SO301000中):

<script type="text/javascript">
    function FormView_Load() {
        px_callback.addHandler(setFocusOnCustRef);
        return;
    }

    var setFocus = false;
    function CustomerID_ValueChanged() {
        setFocus = true;
        return;
    }

    function setFocusOnCustRef(context, error) {
        if (setFocus === true)
        {
            setFocus = false;
            var refNbr = px_alls["edCustomerRefNbr"];
            refNbr.focus();
        }
        return;
    }
</script>
<px:PXFormView ID="form" runat="server" DataSourceID="ds" Style="z-index: 100" Width="100%" DataMember="Document" Caption="Order Summary"
    NoteIndicator="True" FilesIndicator="True" LinkIndicator="True" EmailingGraph="PX.Objects.CR.CREmailActivityMaint,PX.Objects"
    ActivityIndicator="True" ActivityField="NoteActivity" DefaultControlID="edOrderType" NotifyIndicator="True"
    TabIndex="14900" ClientEvents-Initialize="FormView_Load">

     ...

    <px:PXSegmentMask CommitChanges="True" ID="edCustomerID" runat="server" DataField="CustomerID" AllowAddNew="True"
            AllowEdit="True" DataSourceID="ds" ClientEvents-ValueChanged="CustomerID_ValueChanged"/>

     ...

</px:PXFormView>
  

请注意,我在 PXFormView ClientEvents-ValueChanged =&#34; CustomerID_ValueChanged&#上添加了 ClientEvents-Initialize =&#34; FormView_Load&#34; 34; 在CustomerID的 PXSegmentedMask 上。

正如您所看到的,这是 hack ...当setFocusOnCustRef被提升时,我们刚刚刷新了记录(RowSelected),我们不知道改变了什么在此之前(哪个字段已被更改?是否取消了更改?)。传递给委托的context仅与重新更新记录有关。要更好地了解引发的事件和顺序,请参阅更新场景事件模型:

Update Scenario Event Model

思考和提示

  1. 我不太了解您的实施情况,但我想指出您的需求与使用按钮Add Stock Item / {{打开SmartPanel的函数Add非常相似1}} / Add & Close。如果从按钮引发回调,您将在上下文中获得有意义的信息,并且不需要在ValueChanged上添加Javascript事件。
  2. 保存/取消时。焦点将返回到Tab键顺序中的第一个表单元素(如果成功)。
  3. 您可以直接在PXUIFieldAttribute中设置Tab Order: Cancel