客户端校验和单据体布局
金蝶云社区-天冥异
天冥异
9人赞赏了该文章 354次浏览 未经作者许可,禁止转载编辑于2018年07月09日 14:08:15

K/3 Cloud客户端 GUI和Silverlight启动时检查插件机制


【原】2015-03-26新增K/3 Cloud客户端 GUI和Silverlight启动时检查插件机制

1、背景

    客户存在需求,在进入K/3 Cloud启动页面时需要进行允许访问校验,校验逻辑随客户需求而变。比如校验客户端IP或Mac为合法用户,才允许进入登录页面登录。

2、实现

    在K/3 Cloud客户端启动时,调用StartAppVerifyService服务进行校验,校验可配置用户定制逻辑组件接入进行校验。如果允许接入,则按原来展示方式进入登录界面。如果不允许进入,则显示提示信息, 并按客制化逻辑返回的4种回调类型进行处理,具体参考后面例子代码图片()。

3、客户定制逻辑组件编写

     3.1、新建C#组件库工程,配置为NetFramework4.0支持。

     3.2、引用K/3 Cloud WebSite/Bin目录下的Kingdee.BOS.dll, Kingdee.BOS.ServiceFacade.ServicesStub.dll组件。

     3.3、添加新类文件,命名为MacVerify(例如),并继承接口   Kingdee.BOS.ServiceFacade.ServicesStub.IStartAppVerifyPlugin接口,实现接口行数 StartAppResult Verify(stringipmac)。

     3.4、MacVerify中可定制客户逻辑,最终返回 StartAppReslut对象即可。如果ResultType==Success正常登录,如果ResultType==Failure,则提示Message中的文本内容。

     3.5、Verify的接口参数ipmac是序列化为json格式的客户端的参数包。

     3.6、由于这时候还没有登录到系统,所以不提供Context,这时的Context为Null,如果需要进行数据库操作,需要自己创建数据库连接。

     3.7、如果Verify的接口参数ipmac数据包中数据出现trustless字样,需要启用IE浏览器的安全地址设置,并启用Activex控件。

     3.8、需要特别注意的是,不要在插件中直接throw new Exception(),要用返回方式2提示退出,或者方式4提示重定向来显示错误的内容,包括 exception.Message + exception.StackTrace;   一旦插件throw异常,框架会忽略异常后进入登录界面。

如下图:

【目前3月份补丁仅提供Message回调类型,4月份补丁会提供到全部4种类型回调】


4、部署

    4.1、拷贝插件到WebSite/Bin目录下。

    4.2、修改配置文件WebSite/App_Data/Common.config,在appsettings节点下增加如下项目:

<!--启动服务插件-->
<add key ="StartAppPlugin" value="Kingdee.BOS.ServiceFacade.StartApp.MacVerify,Kingdee.BOS.ServiceFacade.StartApp" />


特别注意:不要只写类名,组件名就不写了。上面value的格式是【类的全名,组件名


    4.3、重启服务器的IIS,完工。


关闭某个单据体的布局信息的保存功能。


单据体【启用用户表格布局设置】属性意义:
勾选:表单退出时,保存表格的列位置和宽度。如果存在动态显示隐藏列,就必须关掉这个选项。否则隐藏列重新显示后会找不到位置,引起位置不对,这就是界面布局位置与实际元数据位置冲突。所以存在动态显示隐藏列的表格必须关闭这个选项。

不勾选:单据退出时,不保存布局数据;


关闭某个单据体的布局信息的保存功能。

两种方法:

1、在BOSIDE中选中单据体,在右边属性列表中找到【启用用户表格布局设置】:勾选:启用;取消勾选:不启用;

2、在表单插件中动态设置,以下是Python插件实例,有需要自行翻译为C#代码。

from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
def AfterBindData(e):
    this.View.GetControl("FDetailEntity").SetAllowLayoutSetting(False)


#Kingdee.Bas.TestPythonPlugIn
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
def AfterBindData(e):
    this.View.GetControl("FEntity").SetAllowLayoutSetting(False)
   this.View.GetControl("FEntity").SetCustomPropertyValue("AllowLayoutSetting",False)


赞 9