Python 插件开发常用的事件函数原创
金蝶云社区-╄秋メ凋零
╄秋メ凋零
36人赞赏了该文章 1,555次浏览 未经作者许可,禁止转载编辑于2024年12月21日 10:23:21
summary-icon摘要由AI智能服务提供

本文介绍了在特定平台(如金蝶云)中开发表单插件时常用的事件函数及其示例代码,包括按钮点击、菜单按钮点击、工具栏按钮点击、字段数据改变等事件。同时,提供了插件中常用属性和方法的使用说明,以及日期相关的条件判断和赋值操作。

上传图片


常用的事件函数


注意:

1、(False \ True \ None) 等关键字必须是首字母大写,正确写法会自动亮橙黄色

2、换行缩进,必须是用 Tab 键缩进 或 敲 4个空格 代表缩进。


#从这里开始


0获取当前表单,单据头FID与明细行ID

this.View.Model.DataObject["Id"]#获取当前单据头FID

this.View.Model.GetEntryPKValue("FSaleOrderEntry", 0); #获取明细行ID"FSaleOrderEntry" 为单据明细标识+“0”即行下标,一般需配合使用循环。

1713689343669.jpg

1、按钮被点击

image.pngdef ButtonClick(e):

    #注意:默认 e.Key 是大写,需将我们的按钮标识转换为大写,或者lower 统一转换为小写 e.Key.lower() 

    if e.Key.ToUpperInvariant() == "按钮标识".ToUpperInvariant(): #将 我们的按钮标识 转换为大写

        this.View.ShowMessage("插入表单上的按钮被点击事件")
        return


2、菜单栏的菜单按钮被点击
def BarItemClick(e): #最优先执行

     if e.BarItemKey == "按钮标识":

        this.View.ShowMessage("菜单栏的菜单按钮被点击")
        return

def AfterBarItemClick(e):#次执行

    if e.BarItemKey == "按钮标识"    

        this.View.ShowMessage("菜单栏的菜单按钮被点击")

        return


3、单据体--菜单按钮--点击事件
def EntryBarItemClick(e):

     if e.BarItemKey == "单据体菜单按钮标识":

        this.View.ShowMessage("单据体菜单按钮点击事件")
        return


4、工具栏按钮点击事件
def ToolBarItemClick(e):   

     if e.BarItemKey == "按钮标识":

        this.View.ShowMessage("工具栏按钮点击事件")
        return


5、字段的数据发生改变
def DataChanged(e):
    if e.Key == "要监控的字段标识":

        this.View.ShowMessage("要监控的字段数据发生改变")
        return

        
6、初始化加载单据时
def OnLoad(e):
    this.View.ShowMessage("打开单据,载入单据时")
    return


7单据体--明细行--双击--事件

def EntityRowDoubleClick(e):   

    this.View.ShowMessage("单据体明细行,双击事件"));


8、单据体--明细行-单击事件

def EntityRowClick(e):

    if e.Row == 0:

        this.View.ShowMessage("单据体明细行,单击事件");

        return


9、动态列表选择(F8选择功能)
def BeforeF7Select(e):

    this.View.ShowMessage("动态列表选择");

    return



10、保存成功
def AfterSave(e):

    this.View.ShowMessage("保存成功");

    return



11、保存前
def BeforeSave(e):

    this.View.ShowMessage("保存前");

    return


12、焦点触发事件

def EntryCellFocued(e):

    if e.NewFieldKey.ToUpper() <> "":

        this.View.ShowMessage("焦点触发事件");

        return

#在参数e里可以获取到新行NewRow,新列NewFieldKey,旧行OldRow,旧列OldFieldKey,这四个值!


13、服务操作插件

def EndOperationTransaction(e):
    # 保存8 提交9 审核1 反审核26
    if this.FormOperation.OperationId == 8:

        for dataEntity in e.DataEntitys:#遍历数据包

            FText = dataEntity["字段标识"];#获取数据

        raise Exception("提示:xxxxx!Python主动抛异常方法");


 

############################################################################


#以下摘自:https://vip.kingdee.com/article/338117169206442496?productLineId=1&lang=zh-CN 

表单插件的重要成员

    插件基类为我们提供了许多重要的成员供开发时使用,下面介绍一下常用的一些属性和用法。

    在插件中可以通过this关键字来调用这些成员。

  • 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能为开发提供很多特有的功能。

    ①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,用来判断单据是从哪里进来的

    ②View的常用方法

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

    this.View.GetFormOperation("操作代码");#获取单据的一个操作实例对象
    this.View.InvokeFormOperation("操作代码");#触发单据的某个操作:保存、提交、审核、关闭 等!
    this.View.GetControl[控件类]("控件标识");#获取单据上的控件:按钮、菜单等,可用来设置控件的状态(可见性,锁定性等)
    this.View.InvokeFieldUpdateService("字段标识",行号);#触发字段值更新,单据头字段行号填0
    #触发实体服务规则,下面2行代码
    obj=BOSActionExecuteContext(this.View);
    this.View.RuleContainer.RaiseDataChanged("字段标识", 字段所在实体行数据包,obj);#触发实体服务规则

    #显示3种提示信息
    this.View.ShowMessage("绿色背景提示信息");#显示正常提示信息
    this.View.ShowWarnningMessage("黄色背景提示信息");#显示警告提示信息
    this.View.ShowErrMessage("红色背景提示信息");#显示错误提示信息

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

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

  • Model:单据数据模型,很重要,单据的实体数据包获取从这里开始,结合上1篇所讲的实体数据包。

    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("单据体标识");#清空整个单据体数据

    #获取第x行(单据头不传x)某字段的值,不同字段类型返回不同类型数据,参考第3篇讲解

    this.View.Model.GetValue("字段标识",x);

    #更新第x行(单据头不传x)某字段的值,不同字段类型赋值不同类型数据,参考第3篇讲解

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


 ############################################################################   

BOS 平台日期相关




一:条件判断

(1)大于某个固定日期:FDate1.ToString('yyyy-MM-dd')>='2021-05-01'

(2)两个元素类型为日期字段的比较:FDate1 > FDate2

(3)判断日期是否大于今天:FDate1 > @currentshortdate

注:@currentshortdate是系统变量,常用的日期类系统变量还有:

@currentshortdate : 今天,短日期,不包含时间

@currentlongdate : 此时,长日期,包含时间

@maxdate : 系统最大时间

@mindate : 系统最小时间


二:赋值

(1)设置固定日期:FDate1='202105-05'

(2)日期的计算,如结束日期为开始日期+1天:

FEndDate = FStartDate.AddDays(1)

同理:增加月份:FStartDate.AddMonths(1)

增加年份:FStartDate.AddYears(1)

(3)计算日期差:(FDate1 - FDate2).Days

(4)时间间隔,如2个日期的时间间小时数:

FText = ( FEndDate - FStartDate).TotalHours

(5)获取日期的月份、天:

FText =FDate1.Date.Month

FText =FDate1.Date.Day

(6)获取日期是对应的星期几

FText = '星期'+str(int(FDate1.DayOfWeek))

(7)取本月最后一天:

FEndDate = FStartDate.AddDays(1-float((FStartDate.ToString("dd")))).AddMonths(+1).AddDays(-1)

(8)取本月第一天日期:

日期字段 = @currentshortdate.AddDays((1-float(@currentshortdate.ToString("dd"))))

          

图标赞 36
36人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!