页面内嵌其他单据原创
金蝶云社区-生态
生态
31人赞赏了该文章 7,554次浏览 未经作者许可,禁止转载编辑于2021年03月08日 09:37:22
summary-icon摘要由AI智能服务提供

本文介绍了在单据、动态表单等页面嵌入其他页面的实现方式,包括设置页面显示参数、单据分录金额和申请数量汇总、初始化单据页面数据、测试单据及列表、动态表单页面布局等步骤。同时,提供了移动端和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、测试单据列表界面,点击详情信息按钮,跳转动态表单

图片2.png

7、动态表单页面,按需求进行布局,自适应把扩展比例和压缩比例设置为0

 image.png

8、相关插件

InContaFormPlugin插件

 

图片1.png


工具类ShowFormUtils使用到的方法

图片3.png

 

EntrySumToHeaderPlugin插件

 

 

图片4.png


图片5.png


GetEntityDataListPlugin插件


图片6.png


SubBillFormPlugin插件

 

图片7.png

跳转移动表单列表

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)

赞 31