单据跳转到获取电子面单后刷新物流跟踪Python试例原创
金蝶云社区-文安根
文安根
63人赞赏了该文章 1009次浏览 未经作者许可,禁止转载编辑于2023年02月13日 20:13:55

    在星空版本 PT-146899 [7.7.0.202112] 之后,支持从销售订单,发货通知单,销售出库单,销售退货单(下文以销售单据引用这四种单据)单据编辑界面直接跳转到'获取电子面单'并自动填充相关单据数据到'获取电子面单'界面上,但是当在'获取电子面单'界面申请完快递100电子面单后,快递单号不会立即显现在销售单据上,除非重新打开销售单据 ,快递单号是在后台保存进销售单据上的物流跟踪页签对应的数据库表中的。如果想通过二开按钮刷新物流单号数据,本文可作为一个参考,下面简单介绍步骤。

    首先,在销售出库单物流跟踪页签中添加一个按钮,按钮标识为tbButtonRefreshCarryBillNos,如下图1-1所示:

image.png图1-1


    在表单插件中注册一个Python插件,如下图1-2所示:

image.png

图1-2


    上图1-2中的Python代码如下:(注意从论坛上直接复制可能会出现空格转换出错,建议手工输入python脚本或者使用附件


# -*- coding: utf-8 -*-

#销售出库单表单插件


import clr

clr.AddReference('System')

clr.AddReference('mscorlib')

clr.AddReference('Kingdee.BOS')

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


from System import *

from System.Collections.Generic import List

from Kingdee.BOS.Core import *

from Kingdee.BOS.Core.DynamicForm.PlugIn.Args  import BarItemClickEventArgs


def EntryBarItemClick(e):

    if e.BarItemKey == "tbButtonRefreshCarryBillNos":

        this.View.Refresh();


    保存上文Python插件后,当通过销售出库单物流跟踪页签中的'获取电子面单'按钮跳转到'获取电子面单'界面后,如果在'获取电子面单'界面成功申请了快递100电子面单,则可以在销售出库单上点击二开的 '刷新物流单号' 按钮进行物流单号的刷新,下图1-3演示了点击按钮后加载出三条物流单号。

image.png

图1-3


写在最后:

    本人在操作此Python插件时,曾尝试通过this.View.Model.SynDataFromDB方法去刷新,但是发现没有用,这个方法代替不上上文中的this.View.Refresh方法,SynDataFromDB只是当分录行存在时才能刷新而Refresh方法可以在单据体从数据库中加载新行进来,原来有问题的代码如下图2-1所示:

image.png

图2-1


    在上图2-1中,我注释了from Kingdee.BOS.Core import *。如果不注释,会发现原来的代码会报 expected str, got type 的错。猜测是因为在EntryBarItemClick方法中使用了List[str](),这个类对应了C#中的泛型列表 List<String>。而from Kingdee.BOS.Core import * 可能导入了 Kingdee.BOS.Core.List命名空间,里面的List命名空间片段与类List可能出现IronPython解析冲突,一般来讲要么直接import 用到的所有类,要么不要使用与命名空间片段有冲突的类。

Empty.zip(0.43KB)

赞 63