【Python插件入门】第1篇:Python插件入门讲解--序言原创
金蝶云社区-CQ周玉立
CQ周玉立
600人赞赏了该文章 48439次浏览 未经作者许可,禁止转载编辑于2022年11月17日 15:43:54
封面

      随着近几年Python热度不断提升,应用场景越来越多样化,这个开发语言备受青睐,Python的学习门槛相对较低,这让很多本不是学计算机出身的有志之士对Python产生了浓厚的兴趣。金蝶云星空强大的架构和开发平台,支持用Python开发,虽然说不上是最好的开发方式,但是也让金蝶云星空的开发多了一个开发思路,也进一步提高了金蝶云星空平台的开放性,C#插件开发虽然也比较方便灵活,但是这个传统的开发方式让许多金蝶云星空圈里面的非技术出身小伙伴对系统二开望而却步,强大的BOS平台和IronPython解释器引擎为系统二开带来了新的方向。


       比较遗憾的时候,官方没有太多关于Python插件开发教程和学习资料,让许多想学习Python插件开发的小伙伴也只能做一些少量的感受和尝试,很难进一步掌握和自主应用。

      小弟不才,也是凭着对Python脚本插件的好奇心和兴趣,逐步研究和使用Python脚本开发,虽然没有太大的成就,但是也小有心得,抱着技术交流与自我提升的心态,准备结合自己的心得和总结,规划一系列的Python插件入门讲解供大家参考和指正。

  今天先发第一篇,简单引入一下话题和大致课程规划。感兴趣的小伙伴来一波"三连",后续敬请期待。。。


一、Python简介

首先了解一下,Python是什么?

      Python语言,是一种面向对象、直译式计算机程序设计语言,Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。常见的一种应用情形是,使用python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写。

      Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符和动态类型。

      Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C语言、C++、Cython来编写扩充模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。因此,很多人还把Python作为一种“胶水语言”(glue language)使用。使用Python将其他语言编写的程序进行集成和封装。

再了解一个概念:Python解释器

作用:运行文件(运行代码)

Python解释器的作用通俗理解,就是起到一个翻译的作用,让我们程序员所编写的代码计算机能读懂然后执行代码。

Python解释器分类

1.CPython
        CPython是使用最广且被的Python解释器。当我们从Python官方网站下载并安装好Python 2.7后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。
2.IPython
        IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。
2.PyPy
        PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释,这里可以去了解一下解释和编译的区别),所以可以显著提高Python代码的执行速度。绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。
3.JPython
        JPython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
4.IronPython

        IronPython和JPython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。


对于Python解释器,大家可以去查资料对Python语言的运行原理做一个了解,我这里不过多介绍。

        言归正传,对Python的介绍就到这里,虽然CPython是使用最广且被的Python解释器,但是我们要学习的是金蝶云星空Python插件开发,这里用到的是IronPython,所以我们学习的并不是大家日常所了解的Python,而是Python插件开发。语法结构和Python是一样的,但是更多的开发思想还是和.NET更接近,API库用得更多也是金蝶云星空插件API。

二、金蝶云星空中的Python插件是什么?与C#插件有什么区别?

Python插件可以使用Python基础语法调用.NET的库来完成开发,这也是能用Python开发插件的基础。

理论上讲,C#能实现的插件开发,用Python都能实现,但是个人目前看来,Python能实现90%的C#插件开发,有一些C#语言特有的运行机制不能用Python代替,或者需要变通实现。

Python不能实现、必须用C#实现的服务端接口开发、执行计划定时任务开发、继承重写标准插件、其他C#特殊用法...

大部分情况下,Python和C#都能做,使用的时候也要根据具体情况理智选择,也不能为了用Python而用Python!

简单剖析,对比一下.NET与Python做开发的情况:

image.png

三、为什么要学Python插件开发?学了Python插件能带来什么好处?

  • 熟悉BOS的小伙伴已经发现了,强大的BOS平台灵活配置已经可以实现我们遇到的90%二开需求。

  • Python有一个最大的好处是,在BOS平台配置即可生效,方便做代码运维调整。

  • 在这个优点下,那么引入了Python的使用之后,可以将BOS的功能更加丰富,从90%扩大到实现99%的二开需求!

  • Python相对与其他编程语言来说,语法结构比较简单,更容易入门,对于没有代码基础或者代码基础薄弱,但是想做点开发的小伙伴来说,这是一个福音!

  • 对于公有云的系统,发布更新代码比较麻烦,有了Python,就可以轻松解决这个烦恼!

  • 对于已经上线运行的功能,要做开发更新升级,要协调时间重启服务,用了Python之后可以免重启,快速部署生效

  • Python在BOS中配置之后,存在于单据的元数据中元数据存储于数据库,备份和功能迁移更加方便。

  • ......


三、学习Python插件需要具备哪些基础?

金蝶云星空系统以及BOS平台:

  • 掌握BOS平台配置,熟悉BOS中的各种控件、业务模型、业务规则(值更新、实体服务规则、单据转换、反写等)。

  • 了解系统标准功能如何使用,标准功能大致是如何实现的,要二开一个功能,首先得知道改哪里。

  • 了解各种业务对象(单据、单据列表、基础资料、动态表单、报表等)。

  • 了解系统数据在数据库表中的存储关联逻辑,知道如何通过BOS查找单据对应的表结构。

  • 使用SQL的能力,最好能熟练使用SQL语句对系统的数据进行查询等操作。

可以先学习:星空开发工程师-初级

编程基础:

  • 有编程的逻辑思维,对基本的代码语法有所掌握(循环语句、条件语句、函数方法、数据变量、基本数据结构等等)。

  • C#编程基础:尽量有,实在不满足,可暂时跳过,但是会影响学习理解,以及后续能学到什么程度。

  • 星空插件开发基础,对星空的插件开发模式以及执行过程有一定了解。参考学习:插件介绍

  • Python语法基础,如果没有任何代码基础,一定要先学习Python语法基础

四、Python插件入门讲解大致内容规划

Python插件入门讲解-基本开发过程介绍
  • Python插件的基本开发过程

  • Python插件脚本代码"三部曲"

  • Python插件中语法注意事项

  • Python插件调试   

  • Python插件常见编译错误说明

Python插件入门讲解-插件进行数据操作

(非常重要)

  • 单据的实体构成介绍

  • Python插件中对实体数据包的操作

  • Python插件中对各字段类型的取数赋值操作

Python插件入门讲解-单据表单插件
  • Python表单插件基本代码模板示例

  • Python表单插件常用事件介绍

  • Python表单插件中如何对单据数据进行取值、赋值

Python插件入门讲解-单据列表插件
  • Python列表插件基本代码模板示例

  • Python列表插件插件常用事件介绍 

  • Python列表插件中如何获取单据数据

Python插件入门讲解-操作服务插件
  • Python服务插件基本代码模板示例

  • Python服务插件常用事件介绍 

  • Python服务插件如何读取单据 

  • Python服务插件校验器

Python插件入门讲解-简单账表服务插件
  • Python简单账表服务插件开发过程介绍

Python插件入门讲解-报表表单插件
  • Python报表表单常用事件介绍

Python插件入门讲解-单据转换插件
  • Python单据转换插件常用事件介绍

Python插件入门讲解-插件常用工具类分享

(完结篇)

  • Python插件中如何操作数据库执行SQL

  • Python插件生成单据,可根据实际情况放到各类型插件事件中调用

  • 更多使用工具类Python代码分享......

五、Python插件实践案例(持续更新中...)

---------------------------------------好了,序言就写到这里---------------------------------------------------------------

                                      后续更新的速度,还得大家的点赞、评论的热情带动啦...

PS:为了更好的持续学习,借此机会新建交流群:【550273071】,欢迎加入,大家一起来学习Python插件开发!

发布于 金蝶云星空BOS开发交流圈 社群

赞 600