问题

针对在页面模板配置阶段有些字段(参照类型)没有参照引用的问题,尝试填了一点坑。
image.png

解决过程

1、数据库refpath关联

因为该字段关联的是“流程胜场订单明细”参照,首先在bd_refinfo参照表中添加refpath:mmpac/refer/pmo/PMOItemGridRef/index
image.png
这个步骤之后,点击默认取值的放大镜可弹出参照框,但是框暂时没有内容
image.png

2、前端参照组件编写

2.1、在业务模块下创建参照组件,路径为mmpac/refer/pmo/PMOItemGridRef/index.js

import { high } from ‘nc-lightapp-front’; const { Refer } = high;

export default function (props = {}) { var conf = { multiLang: { domainName: ‘mmpac’, currentLocale: ‘zh-CN’, moduleId: ‘refer_mmpac’, },

  1. refType: 'grid',
  2. refName: 'refer-50080115-000001',/* 国际化处理: 流程生产订单明细*/
  3. placeholder: 'refer-50080115-000001',/* 国际化处理: 流程生产订单明细*/
  4. refCode: 'mmpac.refer.pmo.PMOItemGridRef',
  5. queryGridUrl: '/nccloud/mmpac/pmo/PMOItemGridRef.do',
  6. isMultiSelectedEnabled: false,
  7. columnConfig: [
  8. {
  9. name: ['refer-50080115-000005', 'refer-50080115-000006','refer-50080115-000007','refer-50080115-000008'],
  10. code: ['refcode', 'vrowno','bd_material.code','bd_material.name']
  11. }
  12. ],
  13. //unitProps: unitConf,
  14. isShowUnit: false
  15. };
  16. return <Refer {...conf} {...props} />

}

注意:其中columnConfig中code属性需要与后台代码中的参照字段保持一致

2.2、同时创建多语文件 src\mmpac\public\lang\standard\simpchn\refer_mmpac.json

{

"refer-50080115-000001": "流程生产订单明细",

"refer-50080115-000005": "生产订单号",

"refer-50080115-000006": "生产订单行号",

"refer-50080115-000007": "主产品编码",

"refer-50080115-000008": "主产品名称"

}

2.3、将mmpac/refer/pmo/PMOItemGridRef/index.js加入到config.json文件,进行编译

image.png

3、后端参照动作编写

3.1、创建参照后台动作逻辑文件nccloud.web.mmpac.refer.pmo.PMOItemGridRef.java

```java package nccloud.web.mmpac.refer.pmo;

import nc.vo.bd.material.MaterialVO; import nc.vo.bd.material.measdoc.MeasdocVO; import nc.vo.bd.wk.wk0104.entity.BDWkVO; import nc.vo.mmpac.pmo.pac0002.entity.PMOHeadVO; import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO; import nc.vo.org.DeptVO; import nccloud.framework.web.processor.refgrid.RefQueryInfo; import nccloud.framework.web.ui.meta.RefMeta; import nccloud.framework.web.ui.meta.TreeRefMeta; import nccloud.web.refer.DefaultGridRefAction;

public class PMOItemGridRef extends DefaultGridRefAction { public PMOItemGridRef() { setShowDisabledData(Boolean.valueOf(false)); setUnitPkKey(“pk_org”); }

public RefMeta getRefMeta(RefQueryInfo refQueryInfo) {
setResourceCode("mm_mo");

TreeRefMeta refMeta = new TreeRefMeta();

String[] extraFields = new String[] {"cmoid","vrowno","bd_material.code","bd_material.name"}; 

refMeta.setCodeField("mm_pmo.vbillcode");
refMeta.setExtraFields(extraFields);;
refMeta.setPkField("mm_mo.cmoid");
//    refMeta.setMutilLangNameRef(true);

//构建联表逻辑
StringBuilder tableNameBuf = new StringBuilder();
// 关联物料
tableNameBuf
      .append("mm_mo left join " + MaterialVO.getDefaultTableName() + " on ")
      .append(" mm_mo." + PMOItemVO.CMATERIALVID + "=" + MaterialVO.getDefaultTableName() + "."
      + MaterialVO.PK_MATERIAL)
      // 关联工作中心
      .append(" left join " + BDWkVO.TABLE_NAME + " on ")
      .append(" mm_mo." + PMOItemVO.CWKID + "=" + BDWkVO.TABLE_NAME + "." + BDWkVO.CWKID)
      // 关联生产部门
      .append(" left join " + DeptVO.getDefaultTableName() + " on ")
      .append(" mm_mo." + PMOItemVO.CDEPTID + "=" + DeptVO.getDefaultTableName() + "." + DeptVO.PK_DEPT)
      // 关联单位
      .append(" left join " + MeasdocVO.getDefaultTableName() + " meas on ")
      .append(" mm_mo." + PMOItemVO.CUNITID + "=" + "meas." + MeasdocVO.PK_MEASDOC)
      // 关联辅单位
      .append(" left join " + MeasdocVO.getDefaultTableName() + " assmeas on ")
      .append(" mm_mo." + PMOItemVO.CASTUNITID + "=" + "assmeas." + MeasdocVO.PK_MEASDOC)
      .append(" left join mm_pmo on mm_pmo." + PMOHeadVO.CPMOHID + "=" + "mm_mo." + PMOItemVO.CPMOHID);

  refMeta.setTableName(tableNameBuf.toString());
  return refMeta;

}

public String getOrderSql(RefQueryInfo refQueryInfo, RefMeta refMeta) { return “ order by mm_pmo.vbillcode”; } }


> 注意:
> 1、该refAction中需要复写:
> public RefMeta getRefMeta(RefQueryInfo refQueryInfo)
> 和
> public String getOrderSql(RefQueryInfo refQueryInfo, RefMeta refMeta)。
> 逻辑一般参照对应的refModel进行改造,本例流程生产订单明细的参照文件为PMOItemRefModel.java。

> 2、extraFields中字段要包含前台索要显示的字段

<a name="Orjj9"></a>
#### 3.2、创建url的config分派路由,文件结构:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/321687/1557453802583-e01b5612-0e81-4b1a-8b3c-4b12dc937bcd.png#align=left&display=inline&height=206&name=image.png&originHeight=258&originWidth=358&size=19221&status=done&width=286.4)<br />其中action.xnl:
```xml
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<actions>
    <action>
    <name>mmpac.pmo.PMOItemGridRef</name>
    <lable>流程生产订单明细(表型参照)</lable>
    <clazz>nccloud.web.mmpac.refer.pmo.PMOItemGridRef</clazz>
  </action>
</actions>
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<authorizes>
  <authorize>
    <appcode>*</appcode>
    <actions>
      <action>mmpac.pmo.PMOItemGridRef</action>
    </actions>
  </authorize>
</authorizes>

appcode为*,可供任意节点调用,没有权限约束

4、调用与赋值

4.1、编辑后事件调用

image.png

4.2、编辑后事件逻辑编写

image.png