
@[TOC](一.导航)
# 二.python包概念
包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为`__init__.py` 文件,那么这个文件夹就称之为包。
## 2.1 制作包
[New] — [Python Package] — 输入包名 — [OK] — 新建功能模块(有联系的模块)。
注意:新建包后,包内部会自动创建`__init__.py`文件,这个文件控制着包的导入行为。
### 2.1.1 快速体验
1. 新建包`mypackage`
2. 新建包内模块:`my_module1` 和 `my_module2`
3. 模块内代码如下
``` python
# my_module1
print(1)
def info_print1():
print('my_module1')
```
``` python
# my_module2
print(2)
def info_print2():
print('my_module2')
```
## 2.2 导入包
### 2.2.1 方法一
``` python
import 包名.模块名
包名.模块名.目标
```
#### 2.2.1.1 体验
``` python
import my_package.my_module1
my_package.my_module1.info_print1()
```
### 2.2.2 方法二
注意:必须在`__init__.py`文件中添加`__all__ = []`,控制允许导入的模块列表。
``` python
from 包名 import *
模块名.目标
```
#### 2.2.2.1 体验
``` python
from my_package import *
my_module1.info_print1()
```
# 三. 总结
- 导入模块方法
``` python
import 模块名
from 模块名 import 目标
from 模块名 import *
```
- 导入包
``` python
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.GetContr