配置实现客户端自定义文本搜索控件【分享】
金蝶云社区-天冥异
天冥异
9人赞赏了该文章 2038次浏览 未经作者许可,禁止转载编辑于2018年07月19日 21:03:12
通过阅读本帖子,希望Cloud Coder 了解些Cloud的开发模式。
对于界面控件展现,我们可以比BOS IDE配置实现的功能更多一些。

原始需求:
【Cloud能否实现文本框的“关键字实时联想”?】
https://vip.kingdee.com/article/158654




如果你是一个真正的Cloud开发者,
你该知道:
Cloud的真正价值是一个配置型的开发平台。
Cloud的开发模式是服务端开发(99%以上我们写的都是服务端代码,不排除有些人写过的真正的那1%的那部分客户端插件)返回给客户端一串描述,做最终的效果展现。这个开发模式类似Asp、Asp.net、Jsp、Php等通过服务端生成代码,返回给浏览器做效果展现。

对于BOS IDE里面我们看到的界面效果,只是一个建模工具,最终会把画的控件效果以xml形式序列化保存到数据库。

在进行界面建模的时,可以看到的控件模型,一定是 小于等于 实际客户端(Silverlight、WPF等的客户端)提供的插件类型的。

在帖子中我们已经看到,Cloud界面右上角有打开单据调用的快速搜索。

下面是类似的实现效果:
只需关注红框中的控件效果:
1、“自定义文本搜索”控件,点击输入框 会弹出2条已有数据。
kjss.png 

2、当在输入框输入“2”时,会只显示第1行数据
kjss1.png 

3、当输入框数据数据,点击回车时 服务端会收到事件,服务端通过这个事件就可以拿到用户输入的数据。
kjss2.png 

具体的配置实现过程:
1、添加一个文本控件,一个Panel控件(其实这个panel是什么类型的控件无所谓,因为这个控件的使命就是做站位,前面已经提到客户端的实际控件是丰富的,之后表单构建插件,改变这个站位控件类型为客户的某一种控件,详见后面的Python脚本实现)
kjsssx1.png 

2、Python脚本改变控件类型,及开启触发服务端事件
kjsssx2.png 

3、通过注册表单插件,实现控件的可搜索数据赋值。
kjsssx3.png 


最终也就实现了文本的搜索需求。
补发下2串Python脚本
  1. #构建插件

  2. #by wanghl 2015-11-20

  3. clr.AddReference('System')

  4. clr.AddReference('Kingdee.BOS.Core')

  5. from Kingdee.BOS.Core.DynamicForm.PlugIn import *

  6. from Kingdee.BOS.Core.Metadata.EntityElement import *

  7. from System import *


  8. def CreateControl(e):

  9.         if e.ControlAppearance.Key == "F_kd_Panel":

  10.                 #改变控件类型

  11.                 e.Control["xtype"] = "kdfullsearch";

  12.                 #设定触发服务端事件

  13.                 e.Control["isfireenterkeysever"] = True;

复制代码



  1. #CustomEvents

  2. #by wanghl 2015-11-24

  3. clr.AddReference('System')

  4. clr.AddReference('Kingdee.BOS.Core')

  5. clr.AddReference('Kingdee.BOS')

  6. from Kingdee.BOS.Core.Bill.PlugIn import *

  7. from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *

  8. from Kingdee.BOS.JSON import *

  9. from System import *


  10. def CustomEvents(e):

  11.         if e.Key == "FSearch":

  12.         #通过自定义事件名称 设置数据

  13.                 if e.EventName == "setSearchMenuData":

  14.                         ctrl = this.View.GetControl("F_kd_Panel");

  15.                         item = JSONArray();

  16.                         item.Add(1);

  17.                         item.Add(2);

  18.                         item.Add(3);

  19.                         item.Add(4);

  20.                         item.Add(5);

  21.                         item.Add(6);

  22.                         item1 = JSONArray();

  23.                         item1.Add("a");

  24.                         item1.Add("b");

  25.                         item1.Add('c');

  26.                         item1.Add('d');

  27.                         item1.Add('e');

  28.                         item1.Add('f');

  29.                         array = JSONArray();

  30.                         array.Add(item);

  31.                         array.Add(item1);

  32.                         ctrl.SetCustomPropertyValue("Data", array);

  33.                         

  34. def AfterBindData(e):

  35.         param = JSONObject();

  36.         param["key"] = "FSearch";

  37.         param["eventName"] = "setSearchMenuData";

  38.         param["data"] = JSONObject();

  39.         param["delay"] = 50;

  40.         #自定义添加异步事件

  41.         this.View.AddAction("fireCustomRequest", param);


复制代码





赞 9