无法将焦点转移到“货件”屏幕上的“装运Nbr”字段

时间:2017-04-17 16:35:44

标签: javascript acumatica

我正在使用内置的Acumatica浏览器命令通过按功能键插入新的货件记录。函数Key使用px.searchFrame(window.top,"main")['px_alls'].ds.executeCommand("Insert");触发命令由于某种原因,它会触发insert命令,但它不会将焦点移动到Shipment Nbr输入字段。此外,如果您尝试使用不起作用的var field=px_alls["edShipmentNbr"]; field.focus();手动移动焦点。我已经能够将焦点转移到其他领域,所以我知道代码是正确的,但我无法弄清楚为什么焦点不能转移到Shipment Nbr输入。关于还能做些什么的任何想法?它不仅仅是Insert命令。调用取消命令(应该移动焦点)也不起作用。

奇怪的是,按Ctrl + Insert可以调用Insert命令,它可以很好地工作。

我构建了一些代码,将焦点转移到发货日期字段,然后向后标签5次,这样可以正确模拟插入命令应该执行的操作,但它只能在客户端的计算机上间歇工作。

由于

2 个答案:

答案 0 :(得分:2)

Acumatica Framework通过 PXButtonAttribute 中定义的以下属性为键盘快捷键提供内置支持:

  • ShortcutShift = true / false :确定Shift键存在
  • ShortcutCtrl = true / false :确定控制密钥的存在
  • ShortcutChar = 'x':确定快捷方式字符

以下是用户按 F2 时插入新货件的示例。由于下面的代码段使用了框架的功能,通过按 F2 ,用户可以从 SOShipmentEntry 插入命令> BLC而不是模拟JavaScript中的按钮点击。这种方法可以保证嵌入插入命令的所有逻辑,包括将焦点设置为出货Nbr 输入,都可以正确执行。

public class SOShipmentEntryExt : PXGraphExtension<SOShipmentEntry>
{
    public class PXInsertShortCut<TNode> : PXInsert<TNode> 
        where TNode : class, IBqlTable, new()
    {
        public PXInsertShortCut(PXGraph graph, string name)
        : base(graph, name)
        {
        }
        public PXInsertShortCut(PXGraph graph, Delegate handler)
            : base(graph, handler)
        {
        }
        [PXUIField(DisplayName = ActionsMessages.Insert, MapEnableRights = PXCacheRights.Insert, MapViewRights = PXCacheRights.Insert)]
        [PXInsertButton(ShortcutChar = (char)113)]
        protected override IEnumerable Handler(PXAdapter adapter)
        {
            return base.Handler(adapter);
        }
    }

    public PXInsertShortCut<SOShipment> Insert;
}

答案 1 :(得分:0)

如果您在JavaScript中执行对服务器的回调,则回调返回可能会在完成执行后将焦点设置为另一个字段。你的focus()语句有效,但回调返回在你的后面的另一个控件上执行另一个focus()。

挂钩Ajax回调允许你在acumatica框架focus()之后放置你的focus()语句:

window.addEventListener('load', function () { px_callback.addHandler(ActionCallback); });

function ActionCallback(callbackContext) {
   px_alls["edShipmentNbr"].focus();
};