IDynamicFormModel接口 常用属性和方法原创
金蝶云社区-云社区用户C1k07307
云社区用户C1k07307
61人赞赏了该文章 4,806次浏览 未经作者许可,禁止转载编辑于2020年12月10日 09:53:02
summary-icon摘要由AI智能服务提供

本文档详细描述了BillBusinessInfo对象的管理功能和相关方法,该对象主要用于管理单据元数据对象及其操作。文档首先介绍了BillBusinessInfo中管理单据的元数据对象,包括返回单据元素、实体、主业务组织字段等方法。随后,详细列举了多种常用方法,如获取单据编号、类型字段,以及单据的全部字段、ORM数据模型对象等。此外,还提供了对单据元数据进行操作的方法,如新建数据、增加/删除/复制/移动单据体行、导入Excel文件等。文档还介绍了如何操作单据的脏标记、获取/设置字段值、处理子单据体数据等高级功能。最后,通过示例和代码片段展示了这些方法和功能的实际应用场景和注意事项。

BillBusinessInfo

当前界面所管理的单据元数据对象。


名称

描述

Elements

返回单据上的全部元素,包括全部字段、实体

Entrys

返回单据上的全部实体

MainOrgField

返回单据的主业务组织字段

 

常用方法

名称

描述

GetBillNoField()

获取单据编号字段,如果是基础资料,则返回基础资料编码

GetBillTypeField()

获取单据类型字段

GetBosFields()

获取单据全部字段

GetDynamicObjectType([bool forceRebuild   = false])

获取单据的ORM数据模型对象,

参数决定是否重新构建ORM数据对象模型。单据元数据改变后,需要强制要求重新构建ORM数据对象模型。

GetEntity(string key)

获取单据的实体元数据

GetField(string key)

获取单据字段元数据

GetFieldList()

获取单据全部字段元数据列表

GetForm()

获取单据整体属性元数据

GetRealField(string key)

获取代理字段的真实字段元数据

GetRedBlueField()

获取红蓝单标志字段

GetSubBusinessInfo(System.Collections.Generic.List<string> sectionKeys)

根据所选字段,产生节选单据元数据


BusinessInfo

当前界面对应的元数据对象;


Context

上下文对象。

常用属性

名称

描述

ClientType

客户端类型,如SL客户端,WPF客户端

ComputerName

客户端机器名

ContextId

上下文Id,唯一标识

CurrentOrganizationInfo

当前组织信息

DatabaseType

数据库类型,如SQL Server、Oracle

DataCenterName

数据中心名称

IpAddress

客户端机器IP地址

IsMultiOrg

是否启用了多组织

LoginName

登录用户名

UserId

登录用户内码

UserName

登录用户名


DataChanged

界面上的数据包,是否被改动。

DataObject

界面的后台数据包对象。

FunctionLib

支持实体规则运算的函数库;

OpenParameter

显示当前界面时,传入的参数。

ParameterData

单据选项数据包。

SubSytemId

子系统内码。

UserTypes

用户类型:普通用户、管理员;


公共方法

BeginIniti

标记数据模型进入初始化状态,避免触发字段值改变事件;

EndIniti

标记数据模型已经结束了初始化,可以触发值改变事件;

CreateNewData

新建空白数据包,并刷新界面;

或者传入自行构建的数据包,刷新界面;

语法

方法定义

C#


void   CreateNewData();

void   CreateNewData(DynamicObject newObject);


 

参数说明

参数

说明

DynamicObject newObject

动态表单数据包;如果传入了此参数,将把此数据包绑定到界面上


CreateNewEntryRow

向实体中增加一行,自动填写字段的默认值,并刷新到界面单据体表格;

语法

方法定义

C#


void   CreateNewEntryRow(string key);

void   CreateNewEntryRow(Entity   entity, int rowIndex);


 

参数说明

参数

说明

string key

实体Key

Entity entity

实体

int rowIndex

指定新行位置


BatchCreateNewEntryRow

批量新建单据体行;

语法

方法定义

C#


void   BatchCreateNewEntryRow(string key, int rowCount);

void   BatchCreateNewEntryRow(string key, DynamicObject   rowDataEntity, int   rowCount);


 

参数说明

参数

说明

string key

实体Key

int rowCount

批量创建的行数

DynamicObject rowDataEntity

以此数据包为模板,批量创建其他行


InsertEntryRow

向单据体中插入新行,并放在第row行上;

语法

方法定义

C#


void   InsertEntryRow(string key, int row);


 

参数说明

参数

说明

string key

实体Key

int row

指定新行行号

 

备注

新行插入完毕,自动处理各字段默认值,并调整行序号;

 

示例代码暂缺;

ImportEntry

把uploadFile参数指定的Excel文件,导入到key参数对应的单据体中;

语法

方法定义

C#


void   ImportEntry(string key, string uploadFile);


 

参数说明

参数

说明

string key

实体Key

string uploadFile

上传的文件,在临时目录中的完整文件名

 

备注

特别注意:要求Excel中包含完整的单据体字段,如果缺少字段,会中断报错;另外,导入为追加模式;

 

示例代码暂缺;

CopyEntryColumn

把指定行的某字段值复制到整列;

语法

方法定义

C#


void   CopyEntryColumn(string key, int row, string field);


 

参数说明

参数

说明

string key

实体Key

int row

来源行号

string field

字段

 

备注

把指定单据体行上的某个字段值,复制到其他行上,其他行字段原值,将会被覆盖;

 

示例代码暂缺;

CopyEntryRow

复制行;

语法

方法定义

C#


void   CopyEntryRow(string key, int row, int newRow, bool   isCopyLinkEntry = false);


 

参数说明

参数

说明

string key

实体Key

int row

来源行号

int newRow

目标行号;

如果为-1,则自动创建新行,放在最后,作为目标行

bool isCopyLinkEntry

是否复制关联关系;

关联关系记录了本行与上游单据的关系,默认不复制

 

备注

单据体中的字段,如果控制选项中,勾选了不允许复制,则在复制行时,略过这些字段;

 

示例代码暂缺;

CopyEntryRowFollowCurrent

在行号curFocuseRowIndex之后,插入新行,并把行row的字段值,复制过来;

语法

方法定义

C#


void   CopyEntryRowFollowCurrent(string key, int curFocusRowIndex, int row, bool isCopyLinkEntry = false);


 

参数说明

参数

说明

string key

实体Key

int curFocusRowIndex

在此位置,创建新行,并作为目标行

int row

来源行号

bool isCopyLinkEntry

是否复制关联关系;

关联关系记录了本行与上游单据的关系,默认不复制

 

备注

于本函数在字段值的复制处理上,同CopyEntryRow方法;

 

示例代码暂缺;

MoveDownEntryRow

把单据体表格中的数据行,往下移动;

语法

方法定义

C#


void   MoveDownEntryRow(string key, int row);


 

参数说明

参数

说明

string key

实体Key

int row

需下移的行号

 

备注

移动完毕后,行序号并没有重排,需要自行处理;功能实现不太完备,请谨慎使用;

 

示例代码暂缺;

MoveUpEntryRow

把单据体表格中的数据行,往上移动;

语法

方法定义

C#


void   MoveUpEntryRow(string key, int row);


 

参数说明

参数

说明

string key

实体Key

int row

需上移的行号

 

备注

移动完毕后,行序号并没有重排,需要自行处理;功能实现不太完备,请谨慎使用;

 

示例代码暂缺;

DeleteEntryData

清空指定单据体的全部行;

语法

方法定义

C#


void   DeleteEntryData(string key);


 

参数说明

参数

说明

string key

实体Key

 

备注

示例代码,参阅CreateNewEntryRow

DeleteEntryRow

删除单据体的指定行;

语法

方法定义

C#


void   DeleteEntryRow(string key, int row);


 

参数说明

参数

说明

string key

实体Key

int row

需删除的行号

 

备注

示例代码暂缺;

GetDirty

获取单据数据包的脏标志状况;

语法

方法定义

C#


bool   GetDirty();


 

备注

保存单据数据时,会根据字段的改动情况,生成更新、插入、删除SQL语句,单据数据包没有进行过任何更改,保存时,不会执行任何SQL语句;

 

字段如果发生了改动,则会记录此字段的脏标志,单据体行发生了变动,也会记录脏标志;

 

单据数据包的脏标志,就是判断数据包是否发生过变更的依据;

 

如果单据数据包有更改,本方法即返回true;

 

如果返回false,表示未新增、删除行,字段也没有修改过;

 

示例代码暂缺;

ClearDirty

清除整单数据包,或者所指定单据体行数据包中的脏标记;

语法

方法定义

C#


void   ClearDirty();

void   ClearDirty(string entityKey, int row);


 

参数说明

参数

说明

string entityKey

实体Key

int row

需清除脏标记的行号

 

备注

BOS平台在保存单据时,会根据数据包中各字段的脏标记,判断字段值是否发生了改动,如果未发生改动,保存时略过此字段;

 

清除了脏标记,保存操作会判断字段未更改过,略过不更新;请谨慎调用此方法;

 

示例代码略;

ClearNoDataRow

清除空行;

语法

方法定义

C#


void   ClearNoDataRow();


 

备注

单据界面在加载数据包时,为方便用户编辑,会为单据体自动追加一空白行,保存前,这些空行需要调用本方法清除掉。

 

默认情况下,平台会自动调用本方法清除空白行,如果需要在插件中自行调用保存操作,则需要在调用保存操作前,调用本方法清除空行;

 

清除空行的主要依据,是单据体的关键字段是否有值,如果关键字段设置了默认值,则系统会判定此行非空白,不予删除;

 

示例代码暂缺;

 

GetBaseDataFieldByKey

到单据元数据中,取指定基础资料字段的元数据;

语法

方法定义

C#


BaseDataField GetBaseDataFieldByKey(string key);


 

参数说明

参数

说明

string key

字段key

 

备注

如果给定的key不存在,返回null;

如果字段不是基础资料字段,返回null;

 

示例代码暂缺;

IsFlexField

判断字段是否为弹性域维度字段;

语法

方法定义

C#


bool   IsFlexField(string key);


 

参数说明

参数

说明

string key

字段key

 

备注

辅助资料、仓位、核算项目等弹性域字段,会包含很多维度,也要展示在表格中,供用户直接编辑。这些维度字段,并不是单据的原生字段,是把弹性域字段展开后,自动产生的;在某些功能上,可能需要做特别处理,因此,需要区分出这些维度字段;

 

示例代码暂缺;

GetDecimal

获取指定数值字段的精度;

语法

方法定义

C#


int   GetDecimal(string key);


 

参数说明

参数

说明

string key

字段key

 

备注

如果字段不存在、或者字段非数值类型,返回0;

 

示例代码暂缺;

GetEntityDataObject

获取指定单据体的全部行数据包集合,或者取指定单据体的行row数据包;

语法

方法定义

C#


DynamicObjectCollection GetEntityDataObject(Entity entity);

DynamicObject GetEntityDataObject(Entity entity, int row);


 

参数说明

参数

说明

Entity entity

实体

int row

行号

 

备注

子单据体,仅返回归属于父单据体当前焦点行的子集合,其他与当前父单据体焦点行无关的子单据体行,不会返回;

 

TryGetEntryCurrentRow

尝试返回单据体焦点行数据包、行号;

语法

方法定义

C#


bool   TryGetEntryCurrentRow(string entryKey, out DynamicObject row, out int rowIndex);


 

参数说明

参数

说明

string entryKey

实体Key

DynamicObject row

输出焦点行数据包

int rowIndex

输出焦点行号

 

备注

如果指定的单据体中无数据行,则本函数返回false,输出参数row为null,rowIndex为-1;

 

示例代码暂缺;

GetEntryCurrentRowIndex

获取单据体当前焦点行号;

语法

方法定义

C#


int   GetEntryCurrentRowIndex(string key);


 

参数说明

参数

说明

string key

实体Key

 

备注

对单据体字段赋值SetValue时,需要传入行号,如果当时的上下文中,并没有行号参数,则可以调用此方法,获取单据体焦点行号;

 

案例 – 取当前物料的销售价格返回

代码来源

Kingdee.K3.SCM.Business.DynamicForm.Operation.QuerySalPrice

 

需求背景

供应链领域,封装了一个通用的操作:取销售价格返回;

 

此操作需要根据界面上录入的价目表、物料等信息,显示出对应的销售价格列表,供用户查询;

 

难点在于显示销售价格列表之前,需要取得界面上的相关字段值,如果字段在单据体,必须取焦点行的字段值;

 

实现方案

编写操作实现类(AbstractBillOperation),重载操作执行方法。

 

依赖IDynamicFormModel接口,取得当前界面上,价目表、物料等字段值,并拼接出过滤条件;

 

并把过滤条件传入,据此显示、过滤销售价格列表;

 

关键字

自定义操作,操作实现类,显示列表界面,设置列表过滤条件,取单据体字段值,取单据体当前行的字段值;


SetEntryCurrentRowIndex

设置单据体的焦点行;

语法

方法定义

C#


void   SetEntryCurrentRowIndex(string key, int rowIndex);


 

参数说明

参数

说明

string key

实体Key

int rowIndex

焦点行号

 

备注

子单据体数据集合与单据体焦点密切相关,如果需要对其他单据体行所属的子单据体行进行数据处理,需要切换焦点;

 

示例代码暂缺;

GetRowIndex

返回单据体数据行的行号,行号从0开始;

语法

方法定义

C#


int   GetRowIndex(Entity entity, DynamicObject activeRow);


 

参数说明

参数

说明

Entity entity

实体

DynamicObject activeRow

实体行数据包

 

备注

本方法,能够把行数据包转换为行号,作为Model对象的其他方法的参数;

 

示例代码暂缺;

 

GetEntryRowCount

获取单据体行数;

语法

方法定义

C#


int   GetEntryRowCount(string key);


 

参数说明

参数

说明

string key

实体Key

 

备注

子单据体,返回父单据体当前焦点行所含子集合行数;其他父单据体行下的子单据体行,不包括在内;

 

示例代码暂缺;

GetChildFieldRowIndex

根据父字段所在的单据体行,反查指定子字段所在的单据体的对应行号;常用于在刷新父字段后,同步刷新子字段之前,定位子字段焦点行;

语法

方法定义

C#


int   GetChildFieldRowIndex(Field   parentField, Field childField, int parentFieldRowIndex);


 

参数说明

参数

说明

Field parentField

父字段

Field childField

子字段

int parentFieldRowIndex

父单据体行号

 

备注

示例代码暂缺;

 

LoadFieldDataWithCoreFilter

附加基础资料限定条件,取其数据包;如果条件不满足,则返回null;

语法

方法定义

C#


DynamicObject LoadFieldDataWithCoreFilter(BaseDataField field, object pkValue, DynamicObject activeRow);


 

参数说明

参数

说明

BaseDataField field

基础资料字段

object pkValue

内码

DynamicObject activeRow

基础资料所在单据体行数据包,需要据此取基础资料的控制字段值,以组成完整的过滤条件

 

备注

基础资料在单据上的使用时,可能需要一些额外的限制,如需要受数据授权、组织隔离等限制,也可能是需要受到其他字段所选值限制,比如供应商联系人,并不能选择任意联系人填写到单据上,必须选择当前供应商名下的联系人;

 

因此,插件给基础资料字段赋值时,随意的给一个pkValue,可能赋值不会成功;

 

本函数,会自动考虑各种限制条件,如果条件满足,则返回pkValue对应的基础资料数据包,如果条件不满足,则返回null;

 

示例代码暂缺;

LoadReferenceData

到数据库中,加载dt模型,内码为pkValue的数据包;

语法

方法定义

C#


DynamicObject LoadReferenceData(DynamicObjectType dt, object pkValue);


 

参数说明

参数

说明

DynamicObjectType dt

基础资料ORM数据模型:

BaseDataField.RefFormDynamicObjectType

object pkValue

内码

 

备注

本方法可以如下代码替代:

BusinessDataServiceHelper.LoadSingle(this.Context, pkValue, dt, option);

差别在于如果数据库中不存在内码为pkValue的数据,本方法不会报中断,而BusinessDataServiceHelper.LoadSingle会报中断;

 

示例代码暂缺;

LoadReferenceDataBatch

到数据库中,批量加载数据包;数据包模型为dt,数据内码为pkValues集合;

语法

方法定义

C#


DynamicObject[] LoadReferenceDataBatch(DynamicObjectType dt, object[] pkValues);


 

参数说明

参数

说明

DynamicObjectType dt

基础资料ORM数据模型:

BaseDataField.RefFormDynamicObjectType

object[] pkValues

内码数组

 

备注

本方法可以如下代码替代:

BusinessDataServiceHelper.Load(this.Context, pkValues, dt);

 

示例代码暂缺;

GetValue

读取字段值;

语法

方法定义:

C#


object   GetValue(Field field);

object   GetValue(string key);

object   GetValue(Field field, int row);

object   GetValue(string key, int row);


 

参数说明

参数

说明

Field field

字段

string key

字段Key

int row

行号,如果不指定行号,取当前焦点行

返回值

字段类型不同,本函数的返回值类型也不同,可能的值类型如下:

值类型

字段类型

string

文本、多行文本、多语言文本、下拉列表、单据状态、单选按钮组等

decimal

小数、数量、基本单位数量等

long

整数等

DateTime

日期、长日期、时间

bool

复选框

DynamicObject

基础资料、辅助资料

DynamicObjectCollection

多选基础资料、单据体

 

备注

如果字段在单据体表格中,还需要指定单据体行号;如果不指定行号,则默认取单据体焦点行上的字段值;

 

示例代码暂缺;

 

SetValue

为字段赋值。

语法

方法定义:

C#


void   SetValue(string key, object value);

void   SetValue(Field field, DynamicObject activeRow, object value);

void   SetValue(string key, object value, int row);

void   SetValue(Field field, DynamicObject rowDataEntity, object value, int rowIndex);


 

参数说明

参数key为字段key;

参数row为单据体行号,如果为单据头字段赋值,可以略过此参数;

参数value为字段值,不同类型的字段可以接受的值不同,下表列出一些常用字段的值类型:

字段类型

值类型

文本

String

小数

decimal

整数

Long

日期

DateTime

长日期

DateTime

多行文本

string

组织

Long

复选框

Bool

下拉列表

String

单据编号

String

基础资料

DynamicObjec或者基础资料内码(string或long)

基础资料属性

不能赋值

多类别基础资料列表

String

多类别基础资料

DynamicObjec或者基础资料内码long

创建人

不能赋值

用户

DynamicObjec或者用户内码long

批次

根据录入模式确定值类型,可能为批号string或者是批号主档内码long

单价

decimal

金额

decimal

数量

decimal

多选基础资料

单条基础资料数据包DynamicObject

单个基础资料内码long或者 string

多个基础资料内码IEnumerable<T>

单选按钮

不能赋值

创建日期

不能赋值

修改人

不能赋值

修改日期

不能赋值

多选下拉列表

String

单选辅助资料列表

DynamicObjec或者辅助资料内码string

多选辅助资料列表

多条辅助资料数据集合DynamicObjectCollection

单条辅助资料数据包DynamicObject

多个辅助资料内码string或者用”,”分隔各内码

多个辅助资料内码object[]

图片字段

String

金额大写控件

不能赋值

单选按钮组

string

分组

DynamicObjec或者分组内码long

多语言文本

String

基本单位数量

decimal

计量单位

DynamicObjec或者单位内码long

折扣率

Decimal

折扣额

Decimal

组合字段

JSONObject其中包含了子项Key与Value

颜色

String

打印次数

不能赋值

打印时间

不能赋值

单据体图片字段

String

富文本

string或者byte[]

上传文件字段

string或者JSONArray

富文本内容编辑

String

跨组织业务类型

DynamicObjec或者内码long

附件字段

string或者JSONArray

代理字段

不能赋值

单据状态

String

维度关联字段

不能赋值

时间

DateTime

单据类型

不能赋值

大文本

String

XML字段

String

源单类型

String

源单编号

String

基本计量单位

DynamicObjec或者内码long

公式编辑器

String

动态文本

String

多语言XML字段

String

税组合

DynamicObjec或者税组合内码long

附件数

不能赋值

业务流程

DynamicObjec或者流程内码string

红蓝字

String

移动代理字段

不能赋值

进度文本

Decimal

 

备注

推荐使用void SetValue(string key, object value, int row)重载方法,参数更加简单、直接;其他重载方法效果一样,但是参数比较难以准备,或者难以理解;

 

示例代码暂缺;

SetCombinedValue

设置组合字段值;

语法

方法定义

C#


void   SetCombinedValue(string   combinedKey, string valueKey, object value, int row);


 

参数说明

参数

说明

string combinedKey

组合字段Key

string valueKey

组合字段子项Key

object value

组合字段子项值

int row

行号

 

备注

组合字段,包含了多个子项,根据一定的条件,选择某个子项作为展示项;

赋值时,需要明确指定需要给那个子项赋值。相比其他字段,就复杂了一些,因此,封装了一个单独的方法;

 

示例代码暂缺;

 

SetItemValueByID

设置基础资料内码,为其赋值;

语法

方法定义

C#


void   SetItemValueByID(string key, object id, int row);


 

参数说明

参数

说明

string key

基础资料字段Key

object id

基础资料内码

int row

行号

 

备注

如果不存在此内码的基础资料,或者其他附加条件(数据授权、组织隔离、控制字段限定等)不符合,赋值会失败。

 

推荐统一使用SetValue方法为基础资料赋值,不推荐本方法;

 

示例代码暂缺;

SetItemValueByIDFromClient

对基础资料字段赋值,设置基础资料内码;

语法

方法定义

C#


void   SetItemValueByIDFromClient(string key, object id, int row);


 

参数说明

参数

说明

string key

基础资料字段Key

object id

基础资料内码

int row

行号

 

备注

本方法会略过条件检查,直接取基础资料数据包填写到字段上;

 

本方法是BOS平台内部为提升性能,专门封装的方法,不推荐插件使用;

 

示例代码暂缺;

SetItemValueByNumber

根据基础资料的编码,检索基础资料数据,检索成功后,把成功取得的基础资料数据包,填写到单据上;

语法

方法定义

C#


void   SetItemValueByNumber(string key, string number, int row);


 

参数说明

参数

说明

string key

基础资料字段Key

string number

基础资料编码

int row

行号

 

 

备注

如果不存在此编码的基础资料,或者其他附加条件(数据授权、组织隔离、控制字段限定等)不符合,赋值会失败。

 

在仅知道基础资料编码的情况下,推荐使用本方法为基础资料赋值;

 

示例代码暂缺;

SummaryDataAndFill

把单据体字段,汇总到单据头字段上;

语法

方法定义

C#


void   SummaryDataAndFill(Field   SummaryField, string   TargetFieldName);


 

 

参数SummaryField为单据体字段;其他实体类型,包括子单据体的字段,未支持;

参数TargetFieldName为单据头字段Key,子单据头字段也支持;

 

如果SummaryField非单据体字段,本函数直接略过,不计算,也不对目标字段做改动;

 

示例代码暂缺;

GetService

方法定义:

C#


T GetService<T>();


 

获取注入到表单模型的特殊服务,如填写默认值的服务(IdefaultValueCalculator),数据库访问服务(IDBModelService),函数实现服务(IExprFuncService)等;

 

这些服务只有在特殊场景下才会用到,插件中,直接使用Kingdee.BOS.ServerHelper中封装的静态类即可;

 

示例代码暂缺;

FuncPermissionAuth

方法定义:

C#


List<Core.Permission.PermissionAuthResult> FuncPermissionAuth(IEnumerable<DynamicObject> datas, string   strPermissionItemId, string strFuncName = null, bool bUseFilterScope = true);

 

List<Core.Permission.PermissionAuthResult> FuncPermissionAuth(string[] ids, string strPermissionItemId, string strFuncName = null, bool bUseFilterScope = true);


 

验证功能权限;

 

默认情况下,权限项绑定在操作上,菜单点击时,调用操作,自动验证操作绑定的权限项;

 

某些特殊场景,插件需要调用此方法,自行判断用户是否具有某个权限项;

 

示例代码,参阅Context章节;

 

GetPermissionOrg

方法定义:

C#


List<long> GetPermissionOrg(string perItem);


 

返回一个组织列表:当前用户,在这些组织下,分配了指定的权限项;

 

例如,可以通过此方法,查询当前用户可以在那些组织下新增本单据;

 

示例代码暂缺;

WriteLog

方法定义:

C#


void   WriteLog(LogObject   logObject);


 

写上机日志;

 

参数logObject为日志详情,关键属性如下:

属性

描述

string pkValue

单据内码

OperatingEnvironment Environment

操作场景,枚举值,包括登录、退出、操作等;

string SubSystemId

子系统

string Description

日志详情

string ObjectTypeId

业务对象内码,如单据的FormId

string OperateName

操作名称,如”保存”、”删除”、”提交”、”审核”、”反审核”

 

 

BatchWriteLog

方法定义:

C#


void   BatchWriteLog(List<LogObject> logObjects);


 

批量写用户上机操作日志,需要预先准备好待写的日志对象(LogObject);


赞 61