泉州xx前端平台支持方案备忘
上次编辑于2019年8月27日 17:30:59
泉州xx前端平台支持方案备忘:
(已在2019-01-24发布正式7.3第一个补丁 PT131268 中包含以下所有内容)
(已发基于2018-10-26 PT128132 的临时补丁 【TempPatch_V7_BOS.7.0.553.5.kdpkg】 ,ClientVersion【7.2.983.9】 )
一、【录入焦点跳转问题】方案:通过为单据体增加【指定焦点跳转模式】功能来实现具体某个单据的录入跳转的流畅体验(需要简单的插件二开Python即可)
--二开方法指引, 【表单业务插件】 :
from Kingdee.BOS.JSON import *
def AfterBindData(e):
#切换表格录入光标导航为服务端指定字段模式
navCellOpts = JSONObject()
#设置回车跳转模式为指定字段模式【specfields】
#参数fields:导航字段列表,格式: 字段1,字段2,字段3,字段4,...,字段n
navCellOpts["mode"] = "specfields"
#【 clientAuto】模式下,不需要指定字段,会在可编辑列之间自动跳转(动态锁定的除外)
#设置字段的跳转顺序,如果字段在界面上不可见,就不要设置上去。否则会把光标跳没了。
navCellOpts["fields"] = "FMATERIALID,FUNITID,FQTY,FPURNUMBER,FPRICEUNITID,FPRICEUNITQTY"
#设置是否为强制由服务器控制
navCellOpts["isServerControl"] = False
#在客户端跳转情况下(isServerControl=False才有效),个别字段可以设置为强制由服务器控制,如果全部无需服务端控制就不用设置
#navCellOpts["ctrlBySvrFields"] = "FMATERIALID,FQTY,FPRICEUNITQTY"
#参数autoChangeRow:自动跳下一行
navCellOpts["autoChangeRow"] = True
#客户端跳转延迟ms数(isServerControl=False才有效)
navCellOpts["clientDelay"] =100
#写入单据体参数
this.View.GetControl("FPOOrderEntry").InvokeControlMethod("SpecNextFields", navCellOpts)
#过于频繁的无必要事件要关闭,否则影响界面效率
this.View.GetControl("FPOOrderEntry").SetCustomPropertyValue("FireCellSelectChangeEvent", False)
def CustomEvents(e):
#通知客户端可以跳下个字段了 e.Key必须全大写
if(e.Key=="FPOOrderEntry" and e.EventName=="Kingdee.BOS.Grid.SpecNavTo"):
this.View.GetControl("FPOOrderEntry").InvokeControlMethod("SpecToNextField", None)
【解决问题说明】原来的单据体回车跳转模式和人工指定字段回车跳转模式:
1、原来的跳转是不等服务端操作的响应,这时如果直接跳转会导致录入数据被比较慢的服务器返回数据覆盖,或者要跳转字段被更新或锁定,导致基础资料要敲两次回车;
2、现在这种人工指定模式是一定要等服务器返回才跳转,这样就不会有录入数据被服务器覆盖的风险,也不会存在需要敲两次回车的问题;
人工指定模式:录入[物料]-》回车-》服务的返回该行数据包括[数量]初始值,更新[单据体]字段-》跳转 [数量]-》录入50-》回车-》然后服务计算返回,更新[单据体]字段-》跳转下一个字段。
但说到底,都是服务器返回比录入操作慢。这个控制好服务器返回再0.5秒以内,应该就感受不到了;
二、【组合显示字段的表头对齐问题】方案:通过增加【列头标题对齐设置】功能来实现插件制定列左右对其方式和标题的修改(需要简单的插件二开Python即可--预研基本可行--预计放入下个补丁)
--二开方法指引, 【表单业务插件】 :
from Kingdee.BOS.JSON import *
def AfterBindData(e):
#设置列标题对齐方式和列标题文本
job = JSONObject()
job["key"] = "FUNSHOWDESCRIPT"
job["headeralignment"] = "left"
job["header"] = "订单日期 |计划跟踪号 |客户 |物料"
this.View.GetControl("FDetailEntity").InvokeControlMethod("UpdateFieldStates", job)
job = JSONObject()
job["key"] = "FSHOWDESCRIPT2"
job["headeralignment"] = "left"
job["header"] = "瓦型 |长 * 宽 |订单数量 |生产纸板长 * 生产纸板宽"
this.View.GetControl("FDetailEntity").InvokeControlMethod("UpdateFieldStates", job)
三、【纸板生产排程的滚动条性能渲染问题】
方案:目前研究发现主要是使用的是编辑表格,并进行逐个单元格锁定,并且有较多比较重的列,例如数字列,选择框列,大部分时间都是WPF的元素渲染,优化空间比较小了;
目前方案通过增加一种light模式来实现快速展示,
需要牺牲点界面的“好看”:
* CheckBox的复选框简化为空和对勾,不支持原来的方框显示模式;
* 不支持一些偏门点的数字格式化功能,只支持区域格式化和普通的数字掩码;
* 不支持单元格自定义Tooltip的小红点提示功能;
* 按钮列仅提供文字,并以手形鼠标提示,有按钮事件,不支持按钮外观等;
* 如上等一些美化和高级的展示都会进行削减或不支持。
--二开方法指引, 【表单业务插件】 :
from Kingdee.BOS.JSON import *
def AfterBindData(e):
#切换只读单元格为light轻模式
cellMode = JSONObject()
cellMode["mode"] = "light"
this.View.GetControl("FDetailEntity").InvokeControlMethod("SetReadOnlyCellModel", cellMode)
--优化结果对比:
纸板生产排单 154行,单据体可见26行21列,7定制格式数字,7选择框列
全模式 :打开 8.2秒,服务端取数1秒,翻页4.25秒,第二次3..87秒
全模式二级缓存优化 :打开 7秒(up 14.6%),服务端取数1秒,翻页4.00秒(up 5.88%),第二次3.87秒( up 0%)
light模式+二级缓存 :打开 4.5秒(up 45%),服务端取数1秒,翻页1.5秒(up 64.7%),第二次1.6秒(up 53.6%)
ps: 图中复选框数据的勾选简化为字符 “√”和 不勾选为空格字符;
四、纸板批量(设定了物料检索字段为材质)录入时,物料录入时的交互逻辑梳理:
关于模糊查询列表的人机交互定义:
A、在鼠标选中模糊列表后,以选中的内码id获取数据;
B、在模糊列表里面通过键盘上下键选中后,以选中的内码id获取数据;
C、在模糊列表里面没有选中任何行,发界面录入数据到服务端,通过制定字段ByField/ByNumber事件匹配服务端设定或默认的检索依据字段,本例中是[材质]字段为检索匹配字段;
ps:1,2的意思就是:只要模糊查询列表里面选中了行,则以选中为准,不管你原来录入了什么。
五、新发现快速录入长宽等数字字段的时候,由于字段进入全选导致首字符丢失;
指定跳转字段内解决这个问题,这个过程中有几个来回测试,确定如下方案:
使用python代码编写二开插件
A、指定跳转字段,设置跳转延时clientDelay为100ms(默认插件用的是200ms这个会导致输入太快时首字符丢失。这个值最小为50ms);(问题1的解决方案)。
B、由于[纸板批量录入]需要快速录入,建议通过插件配置该单据体为light模式;(问题3的解决方案)。
.
创建于2019年1月25日 13:44:25
泉州xx前端平台支持方案备忘
本文2024-09-23 03:47:15发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-161102.html