本文介绍了在单据、动态表单等页面嵌入其他页面的实现方式,包括设置页面显示参数、单据分录金额和申请数量汇总、初始化单据页面数据、测试单据及列表、动态表单页面布局等步骤。同时,提供了移动端和PC端的不同参数设置示例,以及使用插件和工具类的方法,并简要说明了如何设置报表显示参数和弹出报表。此外,还给出了内嵌列表界面的示例代码。
场景:
在单据、动态表单等页面嵌入其他页面的场景,可以参考以下方式实现。本案例在列表界面点击查看详情页面,跳转到由本单基本信息单据头、单据B的部分信息合成的动态表单。
详情页面
干预页面显示参数
1、显示表单界面
FormShowParameter formShowParameter = new FormShowParameter();
//显示样式(内嵌)
formShowParameter.getOpenStyle().setShowType(ShowType.InContainer);
//将页面嵌入哪个容器,容器标识
formShowParameter.getOpenStyle().setTargetKey(targetKey);
//页面打开状态
formShowParameter.setStatus(OperationStatus.EDIT);
formShowParameter.setFormId(formId);
//设置为异步处理
formShowParameter.setSendToClient(true);
需要选择对应的页面参数,比如单据就使用BillShowParameter、列表就使用ListShowParameter,还有移动端MobileFormShowParameter,MobileListShowParameter等
2、单据分录金额和申请数量汇总到单据头
a、
// 获取单据体数据
DynamicObjectCollection entrys = this.getModel().getEntryEntity("entryentity");
if (!entrys.isEmpty()) {
// 总的申请数量
BigDecimal sumqty = new BigDecimal("0");
// 总的金额
BigDecimal sumamount = new BigDecimal("0");
for (DynamicObject entry : entrys) {
sumqty = sumqty.add(entry.getBigDecimal("qtyfield"));
sumamount = sumamount.add(entry.getBigDecimal("amountfield"));
}
this.getModel().setValue("sumqty", sumqty);
this.getModel().setValue("amountfield1", sumamount);
}
b、将字段设置为合计列,然后通过单据体控件编程模型获取这个合计字段
3、初始化单据页面数据
BillModel model = this.getView().getService(IDataModel.class);
model.load(Long.valueOf(pkid));
这里的Model也需要根据界面选择,单据BillModel、基础资料BaseModel,动态表单FormDataModel。
4、测试单据
5、测试单据2
6、测试单据列表界面,点击详情信息按钮,跳转动态表单
7、动态表单页面,按需求进行布局,自适应把扩展比例和压缩比例设置为0
8、相关插件
InContaFormPlugin插件
工具类ShowFormUtils使用到的方法
EntrySumToHeaderPlugin插件
GetEntityDataListPlugin插件
SubBillFormPlugin插件
跳转移动表单列表
MobileListShowParameter mobileListShowParameter = new MobileListShowParameter();
mobileListShowParameter.getOpenStyle().setShowType(ShowType.Modal);
mobileListShowParameter.setStatus(OperationStatus.VIEW);
mobileListShowParameter.setFormId("bos_moblist");
mobileListShowParameter.setBillFormId(formId);//PC端单据标识
// formShowParameter.setSendToClient(true); //设置为异步处理
return mobileListShowParameter
KED脚本
showMobileListPage: function(e) {
var parameter = new MobileListShowParameter();
parameter.setFormId("bos_moblist");
parameter.getOpenStyle().setShowType(ShowType.Floating);
//这个formid需要是PC端的表单标识
parameter.setBillFormId("kded_welkin_presale_apply");
this.getView().showForm(parameter);
}
9、后补充
弹出报表
//获得报表显示参数
ReportShowParameter reportShowParameter = new ReportShowParameter();
//设置报表标识
reportShowParameter.setFormId(“报表表单标识”);
//设置弹出页面标题
reportShowParameter.setCaption("***表");
//设置弹出页面的打开方式
reportShowParameter.getOpenStyle().setShowType(ShowType.Modal);
StyleCss styleCss = new StyleCss();
styleCss.setWidth("800");
styleCss.setHeight("600");
//设置弹出页面的样式
reportShowParameter.getOpenStyle().setInlineStyleCss(styleCss);
//设置页面回调事件方法
reportShowParameter.setCloseCallBack(new CloseCallBack(this, KEY_BILLID));
//绑定子页面到当前页面
this.getView().showForm(reportShowParameter);
列表页面
/**
* 内嵌列表界面
*
* @param formId
* @param targetKey
* @return
* @throws IOException
*/
public static ListShowParameter inContainerListParameter(String formId, String targetKey) throws IOException {
ListShowParameter showParameter = new ListShowParameter();
showParameter.setBillFormId(formId);
// showParameter.setFormId("bos_listf7");
showParameter.setSendToClient(true); // 设置为异步处理
showParameter.getOpenStyle().setShowType(ShowType.InContainer);
showParameter.getOpenStyle().setTargetKey(targetKey);
showParameter.setStatus(OperationStatus.VIEW);
// 设置列表显示
showParameter.setLookUp(true);
return showParameter;
}
demo.rar(38.04KB)
推荐阅读