liu 发布的文章

        作为金蝶云星空开发的一员,平时经常会用到C#语言写一些功能插件来完成日常的工作。云星空可以支持C#语言和Pyhont语言。C#写插件主要调试方便,并且很容易跟踪到数据异常问题,C#插件注册依赖IIS服务注册插件就需要重启IIS服务。面对一些小的功能其实使用Python语言就能非常方便注册插件即生效,尤其是客户使用公有云就非常方便无需上天梯打补丁。学习Python写一些小功能非常有必要,记录整理一下常用一些固定的语法,方便自己日后查询使用。


一、上下文对象Context

    上下文对象需要在登录金蝶产品后获取到,没有登录就会提示未登录信息。因此获取前需要判断是否登录

    this.Context.UserId;#当前用户ID

    this.Context.UserName;#当前用户名称

    this.Context.UserPhone;#当前用户手机号

    this.Context.CurrentOrganizationInfo.ID;#当前组织Id

    this.Context.CurrentOrganizationInfo.Name;#当前组织名称

    this.Context.DBId;#当前数据中心Id

    this.Context.DataCenterNumber;#当前数据中心编码

    this.Context.DataCenterName;#当前数据中心名称

    this.Context.IpAddress;#客户端本机网络信息:IP、MAC等


二、视图层对象View

     可理解为当前界面,界面类插件,服务类的插件没有这个,View能为开发提供很多特有的功能。

    2.1、View的常用属性

    this.View.BillBusinessInfo;#单据的业务逻辑元数据,元数据包含的信息很多,下面列了一下常用的信息

    this.View.BillBusinessInfo.GetBillNoField().FieldName;#单据编号字段名

    this.View.BillBusinessInfo.GetBillStatusField().FieldName;#单据状态字段名

    this.View.BillBusinessInfo.GetBillTypeField().FieldName;#单据类型字段名

    this.View.BillBusinessInfo.GetForm().Id;#单据FormId

    this.View.BillBusinessInfo.MainOrgField.FieldName;#主业务组织字段名

    this.View.BillBusinessInfo.GetEntity("FBillHead").TableName;#单据头表名

    this.View.BillBusinessInfo.GetEntity("实体标识").TableName;#实体主表名

    this.View.BillBusinessInfo.GetEntity("实体标识").SplitTables;#实体所有拆分表


    this.View.OpenParameter;#表单入口参数

    this.View.OpenParameter.Status;#当前界面状态:0,新增;1,查看;2,修改;

    this.View.OpenParameter.GetCustomParameter("参数标识");#获取单据打开传入的参数


    this.View.ParentFormView;#获取父页面的View

    this.View.ParentFormView.BillBusinessInfo.GetForm().Id;#父页面的FormId,用来判断单据是从哪里进来的


    2.2、View的常用方法

    this.View.GetFormTitle();#获取单据标题

    this.View.SetFormTitle(LocaleValue("新标题"));#修改单据标题

    this.View.GetFormOperation("操作代码");#获取单据的一个操作实例对象

    this.View.InvokeFormOperation("操作代码");#触发单据的某个操作:保存、提交、审核、关闭 等!

    this.View.GetControl[控件类]("控件标识");#获取单据上的控件:按钮、菜单等,可用来设置控件的状态(可见性,锁定性等)

    this.View.InvokeFieldUpdateService("字段标识",行号);#触发字段值更新,单据头字段行号填0

    #触发实体服务规则

    obj=BOSActionExecuteContext(this.View);

    this.View.RuleContainer.RaiseDataChanged("字段标识", 字段所在实体行数据包,obj);#触发实体服务规则


    #显示3种提示信息

    this.View.ShowMessage("绿色背景提示信息");#显示正常提示信息

    this.View.ShowWarnningMessage("黄色背景提示信息");#显示警告提示信息

    this.View.ShowErrMessage("红色背景提示信息");#显示错误提示信息


    #刷新界面数据,修改实体数据包后需要刷新重新读取,必须传标识,不建议粗暴刷新整个单据

    this.View.UpdateView("字段标识/单据体标识");#刷新界面数据


三、单据数据模型Model

    单据的实体数据包,赋值和取值都是通过Model获取,非常重要、非常重要、非常重要!!!

    this.View.Model;#单据数据模型,单据的实体数据包获取

    this.View.Model.DataObject;#单据的完整数据包,相当于前面讲的单据头实体数据包

    this.View.Model.GetEntryCurrentRowIndex("单据体标识");#获取单据体当前焦点行号

    this.View.Model.GetEntryRowCount("单据体标识");#获取单据体行数

    this.View.Model.CreateNewEntryRow("单据体标识");#为单据体新增一行

    this.View.Model.BatchCreateNewEntryRow("单据体标识",x);#批量为单据体新增x行

    this.View.Model.InsertEntryRow("单据体标识", i);#在第i行前插入1行

    this.View.Model.DeleteEntryRow("单据体标识", i);#删除第i行

    this.View.Model.DeleteEntryData("单据体标识");#清空整个单据体数据


    this.View.Model.GetValue("字段标识",x);#获取第x行(单据头不传x)某字段的值,不同字段类型返回不同类型数据

    this.View.Model.SetValue("字段标识","字段值",x);#更新第x行(单据头不传x)某字段的值,不同字段类型赋值不同类型数据

    this.View.Model.SetItemValueByID("字段标识","内码id",x);#用资料内码id更新第x行资料字段的值

    this.View.Model.SetItemValueByNumber("字段标识","编码",x);#用资料编码更新第x行资料字段的值


四、Python事件

4.1、AfterCreateModelData

        单据新增界面打开时触发,可以获取到单据初始化之后的数据。通常用于对单据新增进行默认值填充,例如,设置默认日期,填充单据体默认数据等

def AfterCreateModelData(e):

        billObj = this.Model.DataObject;#单据完整数据包,如需通过实体数据包操作读写数据,可从这里开始取

        this.View.Model.SetValue("FDate", "2022-7-1");#设置默认日期

        msg=("{0}").format(this.View.BillBusinessInfo.GetEntity("FBillHead").TableName);

        this.View.ShowMessage(msg);#调试使用


4.2、AfterBindData

        界面数据绑定完毕后触发,通常在这里对字段控件状态进行设置。例如,设置颜色、设置字段锁定性/可见性、设置下拉列表动态枚举选项等

def AfterBindData(e):

        this.View.GetControl("FDate").Enabled=False;#False:锁定,True:解锁

        #this.View.GetControl("控件标识").Visible=False;#False:隐藏,True:显示


4.3、BarItemClick

        单据头菜单点击事件,从参数e中获取菜单标识,来判断是哪个菜单发生了点击。一定要加判断,只需要监听需要的菜单

def BarItemClick(e):

        key=e.BarItemKey.ToUpperInvariant();#菜单标识大写

        if(key=="TESTBTN1".ToUpperInvariant()):

            msg=("菜单[{0}]点击事件捕捉到了,可以继续菜单的功能啦!").format(key);

            this.View.ShowMessage(msg);

        elif(key=="TESTBTN2".ToUpperInvariant()):

            msg=("菜单[{0}]点击事件捕捉到了,可以继续菜单的功能啦!").format(key);

            this.View.ShowMessage(msg);


4.4、EntryBarItemClick

        单据体菜单点击事件,与BarItemClick类似,只不过这个是监听单据体菜单栏

def EntryBarItemClick(e):

        key=e.BarItemKey.ToUpperInvariant();

        if(key=="entryTESTBTN1".ToUpperInvariant()):

            msg=("单据体菜单[{0}]点击事件捕捉到了,可以继续菜单的功能啦!").format(key);

            this.View.ShowMessage(msg);


4.5、ButtonClick

     按钮控件/超链接控件点击事件。点击一个超链接,弹出某个单据等等

def ButtonClick(e):

        BtnKey=e.Key.ToUpperInvariant();#控件标识大写

        if(BtnKey=="F_ora_LINK".ToUpperInvariant()):

            msg=("按钮[{0}]点击事件捕捉到了,可以继续菜单的功能啦!").format(BtnKey);

            this.View.ShowMessage(msg);


4.6、EntityRowDoubleClick

        单据体行双击事件,使用时一定要判断单据体!!!

def EntityRowDoubleClick(e):

        entityKey=e.Key.ToUpperInvariant();#单据体标识大写

        row=e.Row;#双击行号,从0开始

        fldKey=e.ColKey.ToUpperInvariant();#双击单元格字段标识大写

        msg=("单据体[{0}]第[{1}]行,字段[{2}]双击啦!").format(entityKey,row,fldKey);

        this.View.ShowMessage(msg);


4.7、EntityRowClick


单据体行点击事件,也就是单据体单行选择事件,通过此事件可以知道当前焦点行,通常需要开发切换行处理子单据体数据时使用

def EntityRowClick(e):

        entityKey=e.Key.ToUpperInvariant();#单据体标识大写

        row=e.Row;#选择行号,从0开始

        msg=("单据体[{0}]第[{1}]行被选中啦!").format(entityKey,row);

        this.View.ShowMessage(msg);


4.8、AfterDeleteRow

单据体行删除事件,在这个事件里可以最后获取被删除的行数据

def AfterDeleteRow(e):

        entityKey=e.EntityKey.ToUpperInvariant();#单据体标识大写

        row=e.Row;#删除的行号,从0开始,注意:此时用此行号从单据实体数据包中取的数据已不是删除的行数据了

        deletRowObj=e.DataEntity;#删除的行数据包

        msg=("单据体[{0}]第[{1}]行被删除啦!").format(entityKey,row);

        this.View.ShowMessage(msg);


4.9、DataChanged

        值更新事件,当BOS的值更新与实体服务配置实现不了想要的功能时,就会用到插件值更新事件。事件参数中可以获取:发生值更新的字段标识、行号、更新前字段值、更新后字段值

def DataChanged(e):

        fldKey=e.Field.Key.ToUpperInvariant();#字段标识大写

        if(fldKey<>"ABC"):#注意:示例代码是不等于,实际应使用等于进行判断

        row=e.Row;#字段所在的行号,从0开始,单据头字段为0

        oldValue=e.OldValue;#更新前字段值

        newValue=e.NewValue;#更新后的字段值

        msg=("第[{0}]行字段[{1}]从[{2}]更新成了[{3}]").format(row,fldKey,oldValue,newValue);

        this.View.ShowMessage(msg);

注意:使用时一定要判断字段标识!!!字段在BOS中勾选【即时触发值更新】才会触发插件值更新事件


4.10、BeforeDoOperation

        单据界面执行单据操作前触发,例如,保存,提交,审核等,使用时一定要判断操作代码。此事件在校验规则之前触发

def BeforeDoOperation(e):

        opCode=e.Operation.FormOperation.Operation.ToUpperInvariant();#触发操作代码大写,例如保存:SAVE

        if(opCode=="SAVE"):

        e.Cancel=True;#可以取消触发操作

        this.View.ShowWarnningMessage("取消保存!");


4.11、AfterDoOperation

        单据界面执行单据操作完成后触发,例如,保存,提交,审核等,使用时一定要判断操作代码

def AfterDoOperation(e):

        opCode=e.Operation.Operation.ToUpperInvariant();#触发操作代码大写,例如保存:SAVE

        this.View.ShowMessage(str(opCode));                 


作者:黄昏前黎明后

来源:金蝶云社区

原文链接:https://vip.kingdee.com/article/577191767967921408?productLineId=1&lang=zh-CN

著作权归作者所有。未经允许禁止转载,如需转载请联系作者获得授权。


本文介绍了Python包的概念及制作方法,详细说明了如何创建包及包内的模块,并提供了两种导入包内模块的方法。此外,还简要总结了导入模块的基本方法。之后,文章转向讨论了金蝶产品相关的上下文对象Context、视图层对象View、单据数据模型Model以及Python事件处理,包括多个事件处理函数的使用场景和示例代码,如AfterCreateModelData、AfterBindData等,用于在金蝶产品的开发环境中进行界面、数据操作及事件响应。

目录

二.python包概念

2.1 制作包

2.2 导入包

三. 总结

一、上下文对象Context

二、视图层对象View

三、单据数据模型Model

四、Python事件


一.导航


二.python包概念

包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py 文件,那么这个文件夹就称之为包。

2.1 制作包

[New] — [Python Package] — 输入包名 — [OK] — 新建功能模块(有联系的模块)。

注意:新建包后,包内部会自动创建__init__.py文件,这个文件控制着包的导入行为。

2.1.1 快速体验

  1. 新建包mypackage

  2. 新建包内模块:my_module1 和 my_module2

  3. 模块内代码如下

# my_module1 print(1) def info_print1():     print('my_module1')
# my_module2 print(2) def info_print2():     print('my_module2')

2.2 导入包

2.2.1 方法一

import 包名.模块名 包名.模块名.目标

2.2.1.1 体验

import my_package.my_module1 my_package.my_module1.info_print1()

2.2.2 方法二

注意:必须在__init__.py文件中添加__all__ = [],控制允许导入的模块列表。

from 包名 import * 模块名.目标

2.2.2.1 体验

from my_package import * my_module1.info_print1()

三. 总结

  • 导入模块方法

import 模块名 from 模块名 import 目标 from 模块名 import *
  • 导入包

import 包名.模块名 from 包名 import *
  • __all__ = [] :允许导入的模块或功能列表


一、上下文对象Context

上下文对象需要在登录金蝶产品后获取到,没有登录就会提示未登录信息。因此获取前需要判断是否登录

this.Context.UserId;#当前用户ID

this.Context.UserName;#当前用户名称

this.Context.UserPhone;#当前用户手机号

this.Context.CurrentOrganizationInfo.ID;#当前组织Id

this.Context.CurrentOrganizationInfo.Name;#当前组织名称

this.Context.DBId;#当前数据中心Id

this.Context.DataCenterNumber;#当前数据中心编码

this.Context.DataCenterName;#当前数据中心名称

this.Context.IpAddress;#客户端本机网络信息:IP、MAC等

二、视图层对象View

可理解为当前界面,界面类插件,服务类的插件没有这个,View能为开发提供很多特有的功能。

2.1、View的常用属性

this.View.BillBusinessInfo;#单据的业务逻辑元数据,元数据包含的信息很多,下面列了一下常用的信息

this.View.BillBusinessInfo.GetBillNoField().FieldName;#单据编号字段名

this.View.BillBusinessInfo.GetBillStatusField().FieldName;#单据状态字段名

this.View.BillBusinessInfo.GetBillTypeField().FieldName;#单据类型字段名

this.View.BillBusinessInfo.GetForm().Id;#单据FormId

this.View.BillBusinessInfo.MainOrgField.FieldName;#主业务组织字段名

this.View.BillBusinessInfo.GetEntity(“FBillHead”).TableName;#单据头表名

this.View.BillBusinessInfo.GetEntity(“实体标识”).TableName;#实体主表名

this.View.BillBusinessInfo.GetEntity(“实体标识”).SplitTables;#实体所有拆分表

this.View.OpenParameter;#表单入口参数

this.View.OpenParameter.Status;#当前界面状态:0,新增;1,查看;2,修改;

this.View.OpenParameter.GetCustomParameter(“参数标识”);#获取单据打开传入的参数

this.View.ParentFormView;#获取父页面的View

this.View.ParentFormView.BillBusinessInfo.GetForm().Id;#父页面的FormId,用来判断单据是从哪里进来的

2.2、View的常用方法

this.View.GetFormTitle();#获取单据标题

this.View.SetFormTitle(LocaleValue(“新标题”));#修改单据标题

this.View.GetFormOperation(“操作代码”);#获取单据的一个操作实例对象

this.View.InvokeFormOperation(“操作代码”);#触发单据的某个操作:保存、提交、审核、关闭 等!

this.View.GetControl[控件类](“控件标识”);#获取单据上的控件:按钮、菜单等,可用来设置控件的状态(可见性,锁定性等)

this.View.InvokeFieldUpdateService(“字段标识”,行号);#触发字段值更新,单据头字段行号填0

#触发实体服务规则

obj=BOSActionExecuteContext(this.View);

this.View.RuleContainer.RaiseDataChanged(“字段标识”, 字段所在实体行数据包,obj);#触发实体服务规则

#显示3种提示信息

this.View.ShowMessage(“绿色背景提示信息”);#显示正常提示信息

this.View.ShowWarnningMessage(“黄色背景提示信息”);#显示警告提示信息

this.View.ShowErrMessage(“红色背景提示信息”);#显示错误提示信息

#刷新界面数据,修改实体数据包后需要刷新重新读取,必须传标识,不建议粗暴刷新整个单据

this.View.UpdateView(“字段标识/单据体标识”);#刷新界面数据

三、单据数据模型Model

单据的实体数据包,赋值和取值都是通过Model获取,非常重要、非常重要、非常重要!!!

this.View.Model;#单据数据模型,单据的实体数据包获取

this.View.Model.DataObject;#单据的完整数据包,相当于前面讲的单据头实体数据包

this.View.Model.GetEntryCurrentRowIndex(“单据体标识”);#获取单据体当前焦点行号

this.View.Model.GetEntryRowCount(“单据体标识”);#获取单据体行数

this.View.Model.CreateNewEntryRow(“单据体标识”);#为单据体新增一行

this.View.Model.BatchCreateNewEntryRow(“单据体标识”,x);#批量为单据体新增x行

this.View.Model.InsertEntryRow(“单据体标识”, i);#在第i行前插入1行

this.View.Model.DeleteEntryRow(“单据体标识”, i);#删除第i行

this.View.Model.DeleteEntryData(“单据体标识”);#清空整个单据体数据

this.View.Model.GetValue(“字段标识”,x);#获取第x行(单据头不传x)某字段的值,不同字段类型返回不同类型数据

this.View.Model.SetValue(“字段标识”,“字段值”,x);#更新第x行(单据头不传x)某字段的值,不同字段类型赋值不同类型数据

this.View.Model.SetItemValueByID(“字段标识”,“内码id”,x);#用资料内码id更新第x行资料字段的值

this.View.Model.SetItemValueByNumber(“字段标识”,“编码”,x);#用资料编码更新第x行资料字段的值

四、Python事件

4.1、AfterCreateModelData

单据新增界面打开时触发,可以获取到单据初始化之后的数据。通常用于对单据新增进行默认值填充,例如,设置默认日期,填充单据体默认数据等

def AfterCreateModelData(e):

¨NBSP; billObj = this.Model.DataObject;#单据完整数据包,如需通过实体数据包操作读写数据,可从这里开始取

this.View.Model.SetValue(“FDate”, “2022-7-1”);#设置默认日期

msg=("{0}").format(this.View.BillBusinessInfo.GetEntity(“FBillHead”).TableName);

this.View.ShowMessage(msg);#调试使用

4.2、AfterBindData

界面数据绑定完毕后触发,通常在这里对字段控件状态进行设置。例如,设置颜色、设置字段锁定性/可见性、设置下拉列表动态枚举选项等

def AfterBindData(e):

this.View.GetControl(“FDate”).Enabled=False;#False:锁定,True:解锁

#this.View.GetControl(“控件标识”).Visible=False;#False:隐藏,True:显示

4.3、BarItemClick

单据头菜单点击事件,从参数e中获取菜单标识,来判断是哪个菜单发生了点击。一定要加判断,只需要监听需要的菜单

def BarItemClick(e):

key=e.BarItemKey.ToUpperInvariant();#菜单标识大写

if(key==“TESTBTN1”.ToUpperInvariant()):

msg=(“菜单[{0}]点击事件捕捉到了,可以继续菜单的功能啦!”).format(key);

this.View.ShowMessage(msg);

elif(key==“TESTBTN2”.ToUpperInvariant()):

msg=(“菜单[{0}]点击事件捕捉到了,可以继续菜单的功能啦!”).format(key);

this.View.ShowMessage(msg);

4.4、EntryBarItemClick

单据体菜单点击事件,与BarItemClick类似,只不过这个是监听单据体菜单栏

def EntryBarItemClick(e):

key=e.BarItemKey.ToUpperInvariant();

if(key==“entryTESTBTN1”.ToUpperInvariant()):

msg=(“单据体菜单[{0}]点击事件捕捉到了,可以继续菜单的功能啦!”).format(key);

this.View.ShowMessage(msg);

4.5、ButtonClick

按钮控件/超链接控件点击事件。点击一个超链接,弹出某个单据等等

def ButtonClick(e):

BtnKey=e.Key.ToUpperInvariant();#控件标识大写

if(BtnKey==“F_ora_LINK”.ToUpperInvariant()):

msg=(“按钮[{0}]点击事件捕捉到了,可以继续菜单的功能啦!”).format(BtnKey);

this.View.ShowMessage(msg);

4.6、EntityRowDoubleClick

单据体行双击事件,使用时一定要判断单据体!!!

def EntityRowDoubleClick(e):

entityKey=e.Key.ToUpperInvariant();#单据体标识大写

row=e.Row;#双击行号,从0开始

fldKey=e.ColKey.ToUpperInvariant();#双击单元格字段标识大写

msg=(“单据体[{0}]第[{1}]行,字段[{2}]双击啦!”).format(entityKey,row,fldKey);

this.View.ShowMessage(msg);

4.7、EntityRowClick

单据体行点击事件,也就是单据体单行选择事件,通过此事件可以知道当前焦点行,通常需要开发切换行处理子单据体数据时使用

def EntityRowClick(e):

entityKey=e.Key.ToUpperInvariant();#单据体标识大写

row=e.Row;#选择行号,从0开始

msg=(“单据体[{0}]第[{1}]行被选中啦!”).format(entityKey,row);

this.View.ShowMessage(msg);

4.8、AfterDeleteRow

单据体行删除事件,在这个事件里可以最后获取被删除的行数据

def AfterDeleteRow(e):

entityKey=e.EntityKey.ToUpperInvariant();#单据体标识大写

row=e.Row;#删除的行号,从0开始,注意:此时用此行号从单据实体数据包中取的数据已不是删除的行数据了

deletRowObj=e.DataEntity;#删除的行数据包

msg=(“单据体[{0}]第[{1}]行被删除啦!”).format(entityKey,row);

this.View.ShowMessage(msg);

4.9、DataChanged

值更新事件,当BOS的值更新与实体服务配置实现不了想要的功能时,就会用到插件值更新事件。事件参数中可以获取:发生值更新的字段标识、行号、更新前字段值、更新后字段值

def DataChanged(e):

fldKey=e.Field.Key.ToUpperInvariant();#字段标识大写

if(fldKey<>“ABC”):#注意:示例代码是不等于,实际应使用等于进行判断

row=e.Row;#字段所在的行号,从0开始,单据头字段为0

oldValue=e.OldValue;#更新前字段值

newValue=e.NewValue;#更新后的字段值

msg=(“第[{0}]行字段[{1}]从[{2}]更新成了[{3}]”).format(row,fldKey,oldValue,newValue);

this.View.ShowMessage(msg);

注意:使用时一定要判断字段标识!!!字段在BOS中勾选【即时触发值更新】才会触发插件值更新事件

4.10、BeforeDoOperation

单据界面执行单据操作前触发,例如,保存,提交,审核等,使用时一定要判断操作代码。此事件在校验规则之前触发

def BeforeDoOperation(e):

opCode=e.Operation.FormOperation.Operation.ToUpperInvariant();#触发操作代码大写,例如保存:SAVE

if(opCode==“SAVE”):

e.Cancel=True;#可以取消触发操作

this.View.ShowWarnningMessage(“取消保存!”);

4.11、AfterDoOperation

单据界面执行单据操作完成后触发,例如,保存,提交,审核等,使用时一定要判断操作代码

def AfterDoOperation(e):

opCode=e.Operation.Operation.ToUpperInvariant();#触发操作代码大写,例如保存:SAVE

this.View.ShowMessage(str(opCode));


发布版本:PT133705 [7.3.1219.3]及以上版本支持单点登录V2版本


启用第三方系统登录授权

          第三方系统集成.png


2   测试第三方系统单点登陆


使用生成的链接测试是否能正常的单点登录。

image.png


3   在第三方系统中生成签名授权的URL


【参数格式】:ud={"dbid":"5be178b96562c0","username":"Administrator","appid":"1","signeddata":"804e89bc062fd55cc463617b964530e12b90b540","timestamp":"1545815603",

"lcid":"2052","origintype":"SimPas","entryrole":"","formid":"","formtype":"","pkid":"","otherargs":""}

【参数说明】:

dbid:数据中心的ID;

username:用户名称;

appid:应用程序ID,通过Administrator登录数据中心后,在【系统管理】分类的【第三方系统登录授权】功能里面进行新增维护;(云之家可以不填由querystring参数决定)

signeddata:参考文章【https://vip.kingdee.com/article/37406】;

timestamp:登录时间戳(Unix时间戳,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数);

lcid(可选):语言ID,中文2052(默认),英文1033,繁体3076;

origintype: XT=云之家集成(同时要求entryrole=XT);SimPas=简单通行证集成;

entryrole:验证权限的入口角色;

formid: 登录后默认打开功能的表单id;

formtype:登录后默认打开功能的格式,目前有单据bill和列表list两种方式,没有列表的功能统一为bill;

pkid:formid对应表单的主键;formtype为list时忽略,formtype为bill时起作用,如果为空表示新增状态;

otherargs:作为用户自定义参数传入,使用于二开,具体内容和格式由二开人员确定,最终在指定表单的插件中通过GetCustomParameter(FormConst.StartAppArgs)获取,具体参考【https://vip.kingdee.com/article/37644】

.

NET示例代码如下:

using Kingdee.BOS.Util;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Kingdee.BOS.BusinessEntity.Login;


namespace PassportLogin

{

    class Program

    {

        static void Main(string[] args)

        {

            int lcId = 2052;

            long timestamp = DateTimeFormatUtils.CurrentTimeMillis() / 1000;//时间戳

            string dbId = "57b11d0f7a3b1a";//数据中心ID

            string usserName = "ly";//用户名称

            string appId = "SRMLightApp";//第三方系统应用Id

            string appSecret = "7d9169bfbdc34e9cbd96069db5e72917";//第三方系统应用秘钥

            string[] arr = new string[] { dbId, usserName, appId, appSecret, timestamp.ToString() };

            string sign = Kingdee.BOS.Util.SHA1Util.GetSignature(arr);//签名

            SimplePassportLoginArg arg = new SimplePassportLoginArg();

            arg.appid = appId;

            arg.dbid = dbId;

            arg.lcid = lcId.ToString();

            arg.origintype = "SimPas";

            arg.signeddata = sign;

            arg.timestamp = timestamp.ToString();

            arg.username = usserName;

            arg.entryrole = string.Empty;

            arg.formid = string.Empty;

            arg.formtype = string.Empty;

            arg.otherargs = string.Empty;

            arg.pkid = string.Empty;

            string argJosn = Kingdee.BOS.JSON.KDObjectConverter.SerializeObject(arg);//json格式

            string argJsonBase64 = System.Text.UTF8Encoding.UTF8.GetBytes(argJosn).ToBase64();//base64编码

            string silverlightUrl = "http://localhost/K3Cloud/Silverlight/IndexSL.aspx?ud=" + argJsonBase64;// Silverlight入口链接

            string html5Url = "http://localhost/K3Cloud/html5/Index.aspx?ud=" + argJsonBase64;// html5入口链接

            Console.WriteLine(silverlightUrl);

            Console.WriteLine(html5Url);

            Console.ReadLine();

        }

    }

}


中文名的进不去只到登录界面,请配置

common.config配置    <!--默认为操作系统默认编码,例如简体服务器为GB2312编码器,如果需要制定,可以用下面参数制定utf-8--> 

   <add key ="StartAppPluginUDConfig" value="{encoding:'utf-8'}" />


4   从第三方系统注销用户


接口地址:http://ip/K3Cloud/Kingdee.BOS.ServiceFacade.ServicesStub.User.UserService.LogoutByOtherSystem.common.kdsvc

请求类型:post

参数

参数名称:ap0

参数值:{"AcctID":"5ab22542230aaf","AppId":"hr","Username":"txt","SignedData":"4cdde33b74d55c328291a24f299cb745a50621bc","Timestamp":1525413177}

AcctID:数据中心ID

Username:为要注销的用户名称

AppId:应用ID

SignedData:签名数据,算法同上

Timestamp:时间戳

image.png


5、知识扩展链接

  V1版本集成:https://vip.kingdee.com/article/1245

利用启动插件校验机制实现免登录功能,实现跨系统无缝集成参考如下文章:  https://vip.kingdee.com/article/34918


作者:宇

来源:金蝶云社区

原文链接:https://vip.kingdee.com/article/9788?lang=zh-CN&productLineId=1

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


在大数据作业开发中,数据集成工具是非常重要的一个环节,一个好的数据集成系统从可用性、架构扩展性、底层引擎选型、数据源支持能力等方面都需要一定的考量,在本文中汇总了十款开源的数据集成系统,作者本人在过往的开发过程中,使用过其中的7款(DataX、Flume、Seatunnel、Canal、BitSail、InLong、Chunjun(Flinkx) ),其中三款(AiyByte、CloudCanal、Nifi),本文是对于每款数据集成软件的基础介绍说明,如果对于实践部分感兴趣的话,可以关注后续内容(如果你对于数据集成感兴趣的话,可以加入我们的小群(文末扫码),一起来交流&测试)

本文分为两个部分,一部分是对于十款不同组件的介绍,包括基本信息、特性支持、架构介绍等等,可以当作对于每个组件的基本了解,当然了,如果你有兴趣想参与测试每个组件的话,也欢迎一起来进行实践操作。另一部分是关于开源组件的一些基础维度对比,包括开源社区、背后支持企业、活跃度等等。本文分为两个部分,一部分是对于十款不同组件的介绍,包括基本信息、特性支持、架构介绍等等,可以当作对于每个组件的基本了解,当然了,如果你有兴趣想参与测试每个组件的话,也欢迎一起来进行实践操作。另一部分是关于开源组件的一些基础维度对比,包括开源社区、背后支持企业、活跃度等等。

  1. Apache InLong: 一站式、全场景的海量数据集成框架Apache InLong: 一站式、全场景的海量数据集成框架

  2. SeaTunnel: 下一代高性能、分布式、海量数据集成框架

  3. Chunjun:基于Flink的批流统一的数据同步工具

  4. BitSail : 高性能数据集成引擎

  5. AirByte:开源的数据移动基础设施

  6. CloudCanal : 数据同步、迁移工具

  7. Flume :开源分布式、高可靠的流式日志采集系统

  8. Canal:数据库增量日志解析、采集工具

  9. Nifi:一个易于使用、功能强大且可靠的系统,用于处理和分发数据

  10. DataX:异构数据源离线同步工具DataX:

一:Apahce InLong :一站式、全场景的海量数据集成框架

Apache InLong(应龙)是一站式、全场景的海量数据集成框架,同时支持数据接入、数据同步和数据订阅,提供自动、安全、可靠和高性能的数据传输能力,方便业务构建基于流式的数据分析、建模和应用。 InLong 项目原名 TubeMQ ,专注于高性能、低成本的消息队列服务。为了进一步释放 TubeMQ 周边的生态能力,我们将项目升级为 InLong,专注打造一站式、全场景海量数据集成框架。 Apache InLong 依托 10 万亿级别的数据接入和处理能力,整合了数据采集、汇聚、存储、分拣数据处理全流程,拥有简单易用、灵活扩展、稳定可靠等特性。 该项目最初于 2019 年 11 月由腾讯大数据团队捐献到 Apache 孵化器,2022 年 6 月正式毕业成为 Apache 顶级项目。

InLong 架构设计

InLong有两种架构模式,一种是标准架构,提供了更加丰富的能力,也支持Dashboard、CLI、API、SDK的能力,轻量化架构是将中间的数据集成层单独剥离了出来,更加的简单、灵活。

标准架构:包含 InLong Agent、Manager、MQ、Sort、Dashboard 等所有 InLong 组件,同时支持`数据接入`、`数据同步`和`数据订阅`。


在企业数字化转型的浪潮中,企业需要高效、灵活的工具来整合各种业务系统,以提升运营效率和竞争力。腾讯轻联iPaaS应用集成平台正是这样一款强大的工具,它通过无缝连接不同的应用和系统,帮助企业实现数据和业务流程的自动化。近期,轻联iPaaS平台的企微连接器迎来了重大更新,新增了多个连接器,涵盖审批、消息通知及通讯录三大场景。这些新功能不仅提升了企业微信在企业内部的应用价值,还为企业的数字化管理带来了更多便捷和可能性。

连接器的便捷性:轻松实现高效集成

在集成流搭建的过程中,集成效率是一个至关重要的因素。腾讯轻联 iPaaS 以其出色的连接器功能为核心优势,提供超过400个预封装的连接器,为企业带来高效、灵活的应用集成体验。

平台采用可视化的拖拽式界面,用户只需简单点选和拖拽,即可快速连接不同应用,构建复杂集成流程。

同时,平台在数据传输安全性上严格把关,提供加密、认证和权限管理等功能,确保数据在跨系统传输中的安全性。此外,它支持云服务、本地应用、数据库等多元平台,能够帮助企业实现跨平台数据集成和业务自动化。通过预构建连接器和自动化配置,企业能够显著降低开发和维护成本,实现总体拥有成本(TCO)的有效控制。

腾讯轻联 iPaaS 的企微连接器基于以上因素,为企业提供多种便捷的功能和使用场景。

企微连接器的三大场景及应用案例

目前轻联iPaaS的企微连接器已经涵盖四大场景,包括审批、消息通知、通讯录管理和客户联系等。这些功能覆盖了企业日常运营的多方面,帮助企业实现高效的内部沟通和管理。

1、审批场景

(1)功能介绍:

● 接收其他应用的审批信息,并在企微中创建审批任务。

● 将企微中的审批结果同步到其他应用中,确保数据的一致性。

(2)应用案例:

● 某大型企业跨系统审批流程优化:通过企微连接器,实现两个系统间审批信息的自动流转,减少了审批时间,提高了"物资采购/费用报销/用品申领/价格审批..."效率。

2、消息通知场景

(1)功能介绍:

支持将企业微信作为企业统一的消息交互接口,为业务系统提供全平台的消息接收和推送能力。公司其他系统收到消息后,可以推送企微应用消息或企微群消息,实现消息的实时推送。

适用场景包括:

  • 审批流程催办

  • 会议培训提醒

  • 重要事件提醒

  • 临时消息通知

  • 邮件通知

  • 快递件的消息推送

  • 员工生日提醒

  • 内部表彰通知

......

(2)应用案例:

某公司内ERP系统产生一条新的待办事项时,企微连接器可以将该信息通过企业微信应用消息推送给系统审批人。如果待办事项在一定时间内未处理,系统还会定时提醒审批人,确保重要事项不被遗漏。

3、通讯录场景

(1)功能介绍:

企微连接器可以与组织已有的账号体系无缝集成,实现账号体系的统一管理。企业微信可以作为企业的账号管理中心,提供增、删、改、查等管理能力:

● 对企业微信通讯录进行增、删、改、查:

  • 【增】将企业微信组织架构增量数据同步到其他系统

  • 【删】删除/批量删除企微通讯录

  • 【改】通讯录信息变更后通知给通讯录同步助手或者其他系统

  • 【查】通讯录查询

● 通讯录标签管理

(2)应用案例:

● 人力资源管理系统(HRMS)集成:某企业通过企业微信接口将组织架构的增量数据同步到HRMS,删除离职员工信息,通知HRMS通讯录信息变更,并查询最新的员工联系方式和组织架构,确保员工信息的统一管理和实时更新。

轻联iPaaS产品介绍

腾讯轻联iPaaS是一款集成平台即服务产品,旨在帮助企业实现跨系统、跨平台的数据和业务流程集成。通过轻联iPaaS,企业可以轻松地将不同的业务系统连接起来,实现数据的无缝流转和业务流程的自动化,从而提升运营效率和决策能力。

1.  轻联iPaaS的核心功能

1.1.  API管理

腾讯轻联iPaaS提供全面的API管理功能,支持API的全生命周期管理,包括API的设计、发布、监控和维护。通过统一的API管理平台,可以实现接口的标准化管理,提升接口开发和维护效率。

1.2.  集成流编排

平台支持灵活的集成流编排功能,用户可以通过可视化的方式,轻松创建和管理复杂的业务流程。集成流编排功能能够有效简化系统集成的复杂性,提升系统的整体性能。

1.3.  连接器市场

平台预集成丰富的应用连接器,覆盖办公、HR、ERP、营销、服务、运维、销售管理、财务管理等20+赛道赛道通用应用,以及电商、教育、文旅、工业、金融、政企、医疗、媒体等10+行业400多个专有应用。用户可以快速实现系统之间的互联互通,提升集成效率。

1.4.  监控告警

腾讯轻联iPaaS提供API实时的监控和告警功能,用户可以通过平台实时监控接口的运行状态,及时发现和处理接口故障。监控告警功能能够提升系统的稳定性和可靠性,保障业务的连续性。

2.  轻联iPaaS产品优势

● 高效:通过自动化的流程和数据集成,显著提升企业的运营效率。

● 便捷:提供可视化的操作界面和丰富的连接器库,低代码代码即可实现复杂的集成任务。

● 安全:采用多层次的安全机制,确保数据的安全性和隐私性。腾讯在数据安全和隐私保护方面有着丰富的经验和技术积累,轻联iPaaS继承了这一优势,为企业提供了可靠的安全保障。

● 腾讯生态优势:作为腾讯旗下的产品,轻联iPaaS已经实现与企业微信、腾讯会议等多种腾讯生态产品集成,形成强大的协同效应。企业可以充分利用腾讯生态系统中的资源,实现更高效的业务运作。

● 技术支持与服务:腾讯拥有强大的技术团队和完善的客户服务体系,能够为企业提供全方位的技术支持和服务保障。无论是产品使用中的问题,还是个性化的定制需求,轻联iPaaS都能及时响应并提供解决方案。

助力企业新发展

当企业在推动数字化转型的过程中,采用的系统越多,彼此之间的协调管理就越复杂,挑战也随之增大。腾讯轻联iPaaS平台致力于助力企业新发展,通过提供高效、可靠的企业集成解决方案,帮助企业应对这些挑战,实现数字化转型的目标。

如果您对我们提供的企业集成解决方案感兴趣,或者正在思考如何更好地进行数字化转型,欢迎点击阅读原文,留下您的联系方式。我们将安排腾讯专业的行业顾问与您洽谈沟通,共同探讨最佳的解决方案。