1、单据体数据行遍历
DynamicObjectCollection entryRows = this.getModel().getEntryEntity("单据体标识");
for (DynamicObject entryObj : entryRows) {
//修改某行的某个字段的值
entryObj.set("kded_textfield", "测试");
}
2、对单据体指定行赋值
this.getModel().setValue("字段标识","字段值",index);
3、单据体新增行几种方式
方式①:新增一行
int i = this.getModel().createNewEntryRow(“单据体标识”);
this.getModel().setValue("字段标识1", "字段值1", i);
this.getModel().setValue("字段标识2", "字段值2", i);
方式②:新增多行
int[] newEntryRow = this.getModel().batchCreateNewEntryRow("单据体标识", 新增的行数);
for (int index : newEntryRow) {
this.getModel().setValue("字段标识", "字段值", index);
}
方式③:创建单据体行对象新增行
如果单据体字段有设置默认值,此方式默认值会覆盖代码设置的值
DynamicObject entry = ORM.create().newDynamicObject(this.getModel().getEntryEntity("单据体标识 ").getDynamicObjectType());
entry.set("textfield1","44");
entry.set("amountfield",10);
int rowindex = this.getModel().createNewEntryRow("单据体标识", entry);
方式④:通过数据包新增行
获取单据体数据包,在数据包新增行对象,是需要代码调用updateView才会将新内容显示到界面上。
DynamicObjectCollection entryentityCols = this.getModel().getDataEntity(true).getDynamicObjectCollection("entryentity");
DynamicObject entryCol = entryentityCols.addNew();
entryCol.set("textfield", "字段值");
this.getView().updateView("entryentity");
方式⑤:通过数据包新增行(另一钟方式)
DynamicObjectCollection entryColl = this.getModel().getEntryEntity("entryentity");
DynamicObjectType entryType = entryColl.getDynamicObjectType();
DynamicObject entryObj = new DynamicObject(entryType);
entryObj.set("textfield", "字段值");
entryColl.add(entryObj);
this.getView().updateView("entryentity");
4、树形单据体操作
树形单据体和单据体操作是一致的,比单据体多了一个隐藏的pid字段,通过pid关联父节点数据行。
5、子单据体操作
单据体的操作,同样适用于子单据体,在操作前,必须先指定子单据体的父单据体行号,否则处理的数据行会错位
//先设置父单据体选中行
this.getModel().setEntryCurrentRowIndex("entryentity",0);
6、修改单据体小数字段的“精度”
以修改一个小数字段的“精度”属性为例,使用以下代码,可以修改editor属性(仅限于editor属性)
方式①
ClientViewProxy clientViewProxy = this.getView().getService(IClientViewProxy.class);
clientViewProxy.invokeControlMethod("单据体标识", "setColEditorProp", new Object[]{"小数字段标识", "sc", 1});
方式②
ClientViewProxy clientViewProxy = this.getView().getService(IClientViewProxy.class);
clientViewProxy.invokeControlMethod("单据体标识", "setColEditorProp", "小数字段标识", "sc", 1);
7、设置单据体样式
//设置字体颜色
IClientViewProxy proxy = this.getView().getService(IClientViewProxy.class);
ClientActions.createRowStyleBuilder().setRows(行标) .
setForeColor("颜色如:red").buildStyle().build().invokeControlMethod(proxy, "单据体标识");
//设置背景颜色
IClientViewProxy proxy = this.getView().getService(IClientViewProxy.class);
ClientActions.createRowStyleBuilder() .setRows(行标)
.setBackColor("颜色如:red").buildStyle().build().invokeControlMethod(proxy, "单据体标识");
//设置字体大小
IClientViewProxy proxy = this.getView().getService(IClientViewProxy.class);
ClientActions.createRowStyleBuilder() .setRows(行标)
.setFontSize(18).buildStyle().build().invokeControlMethod(proxy, "单据体标识");
8、获取单据体当前光标所在行对象
// 获取单据体当前光标所在行
int index = this.getModel().getEntryCurrentRowIndex("单据体标识");
DynamicObject selectedData = this.getModel().getEntryRowEntity("单据体标识", index);
9、设置单据体/列表控件的选中指定行
单据体
// 获取单据体控件
EntryGrid entryGrid = this.getControl("单据体控件标识");
// 获取选中行,数组为行号,从0开始
int[] selectRows = entryGrid.getSelectRows();
// 设置选中行,第一个参数传选中行号的数组,第二个参数传入焦点行的行号,(之后不要updateView,否则会重置不生效)
entryGrid.selectRows(new int[]{0,1}, 0);
// 清空所有选中行(第一个参数传入空数组即可)
entryGrid.selectRows(new int[0], 0);
// 不要调用此方法,否则前面的设置不生效
//this.getView().updateView("单据体控件标识");
列表
// 获取单据列表控件
BillList billList = this.getControl("billlistap");
// 获取单据列表选中行集合
ListSelectedRowCollection selectedRows = billList.getSelectedRows();
for (ListSelectedRow selectedRow : selectedRows) {
String billNo = selectedRow.getBillNo();
}
// 设置列表选中行,参数有行号数组(后面不要调用updateView方法)
billList.selectRows(new int[] {0,1});
// 清空选中行
billList.clearSelection();
// 不要调用此方法,否则前面的设置不生效
//this.getView().updateView("billlistap");
10、根据条件锁定单据体行不能选中
在某些情况,需要锁定单据体某些行,不能选中,在表单插件中实现,代码如下(谨慎使用,里面不能有太多代码耗时逻辑,否则会影响性能):
@Override
public void initialize() {
super.initialize();
EntryGrid entryentity = this.getControl("单据体标识");
entryentity.addPackageDataListener(this::packageData);
}
private void packageData(PackageDataEvent event){
boolean status = "1".equalsIgnoreCase(event.getRowData().get("status").toString());
if (status){
//设置单据体行不能选择
event.getNoLinkKey().add("f_comment");
event.setCanSelectRow(false);
}
}
11、对单据体数据进行过滤和排序
如果你想对单据体的数据进行过滤和排序,可参考以下代码:
//过滤
DynamicObjectCollection dymObjectCollerction = this.getModel().getEntryEntity("单据体标识");
//按字段 parent 进行过滤
List<DynamicObject> dyms =
dymObjectCollerction .stream().filter(e -> e.getLong("parent") == 112l).collect(Collectors.toList());
//排序
DynamicObjectCollection dymObjectCollerction = this.getModel().getEntryEntity("单据体标识");
//按字段 menuindex 排序
Collections.sort(dymObjectCollerction , new Comparator<DynamicObject>(){
@Override
public int compare(DynamicObject stu1, DynamicObject stu2) {
return stu1.getInt("menuindex")-stu2.getInt("menuindex");
}
});
推荐阅读