我正在使用内置的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次,这样可以正确模拟插入命令应该执行的操作,但它只能在客户端的计算机上间歇工作。
由于
答案 0 :(得分:2)
Acumatica Framework通过 PXButtonAttribute 中定义的以下属性为键盘快捷键提供内置支持:
以下是用户按 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();
};