NC 设置字段可编辑

/QlgqArap/src/client/nc/ui/arap/actions/BillSaveAction.java

				// 设置字段可编辑
				BillCardPanelUtil.contorlFeildEditable(billCardPanel, true,
						new String[] { IBillFieldGet.OBJTYPE,
								IBillFieldGet.CUSTOMER, IBillFieldGet.SUPPLIER,
								IBillFieldGet.RECACCOUNT,
								IBillFieldGet.PAYACCOUNT,
								IBillFieldGet.PK_PSNDOC,
								IBillFieldGet.MONEY_DE, IBillFieldGet.MONEY_CR,
								IBillFieldGet.PK_CURRTYPE });
getBillListPanel().setEnabled(true);//设置面板可编辑性
//设置字段可编辑
this.getBillListPanel().getHeadItem("realityamount").setEdit(true);
<think>嗯,用户需要将NC633单据中的字段从手动输入改为选择框输入方式。根据用户提供的引用内容,这个问题涉及NC系统的二次开发,特别是单据界面定制。用户上次问过类似问题,这次更聚焦在NC633版本的具实现。从引用[1][4]看,参照框(即下拉选择框)的实现关键在于事件处理和元数据配置。考虑到用户可能正在开发环境中操作,需要具指导:首先想到后台数据配置,引用[3]提到通过SQL修改md_property的readonly属性,但更安全的方式应该是在NC元数据管理器中操作。因为直接改数据库有风险,系统升级可能导致配置丢失。然后是前端事件绑定,引用[1]的CardBodyAfterEditHandler展示了字段编辑后事件的处理框架。如果要添加下拉框,可能需要继承类似的IAppEventHandler接口实现值改变时的逻辑。对于多选需求(引用[4]),还要注意设置参照窗口的multiSelection属性为true。这里的关键点是AbstractBillEditComponent的使用,这是NC前端框架的核心组件。最后考虑用户可能遇到的坑:如果字段是主子关联字段,还需要检查foreignKey配置;保存时验证逻辑也要调整,像引用[2]那样重写SaveScriptAction时需考虑空值处理。是否需要生成参照类?参照类型选择也很重要,系统预制参照类名通常是类似RefClassName这样的格式。</think> 根据引用内容及NC二次开发经验,将NC633单据字段从手动输入改为选择框的实现步骤如下(以参照框为例): ### 实现方案 ```java // 1. 在元数据模型中设置参照属性 public void initMetaData() { UIMeta meta = getBillForm().getModel(); // 获取目标字段(假设字段名为material) UIField field = meta.findField("material"); // 设置为参照类型 field.setRefEnabled(true); // 指定参照类(如物料参照) field.setRefClassName("nc.ui.mm.material.ref.MaterialRefModel"); // 设置参照多选(按需) field.getRefMetaData().setMultiSelectedEnabled(false); } // 2. 注册字段编辑事件(引用[1]) public class BodyAfterEditHandler implements IAppEventHandler<CardBodyAfterEditEvent> { @Override public void handleAppEvent(CardBodyAfterEditEvent e) { if ("material".equals(e.getKey())) { // 指定字段 Object newValue = e.getValue(); // 此处可添加值变更逻辑 e.setReturnValue(true); // 必须设置(引用[1]) } } } // 3. 在BillController中绑定事件 public void initController() { // 注册编辑后事件 getBillCardPanel().addBodyAfterEditListener(new BodyAfterEditHandler()); } ``` ### 关键配置点 1. **元数据修改**(引用[3]): ```sql -- 检查字段状态 SELECT hided, readonly FROM md_property WHERE name = 'material' AND classid = (SELECT id FROM md_class WHERE defaulttablename = '名'); -- 启用编辑(通常无需直接修改数据库) UPDATE md_property SET hided='N', readonly='N' WHERE ...; ``` > 优先通过**开发配置平台**修改字段属性,避免直接操作数据库 2. **参照框高级配置**(引用[4]): - 多选模式:`.setMultiSelectedEnabled(true)` - 筛选条件:通过 `IRefFilter` 接口实现条件过滤 - 自定义参照:继承 `nc.ui.pubapp.clientdoc.ref.AbstractRefModel` ### 注意事项 1. 事件处理必须 `e.setReturnValue(true)`(引用[1]),否则无法保存输入值 2. 若字段为必填项,需重写保存事件(引用[2]): ```java public class SaveAction extends SaveScriptAction { @Override protected boolean checkData() { if (StringUtils.isEmpty(getModel().getMaterial())) { MessageDialog.showError("物料不能为空!"); return false; } return super.checkData(); } } ``` 3. 开发后需更新元数据缓存:登录 `NC 配置平台` → 元数据管理 → 刷新缓存 ### 实施流程 ```mermaid graph TD A[分析需求] --> B(确定目标字段) B --> C{元数据是否支持参照} C -->|是| D[配置参照属性] C -->|否| E[扩展字段元数据] D --> F[实现参照类] E --> F F --> G[注册编辑事件] G --> H[部署测试] ``` ### 相关问题 1. 如何实现NC单据字段的联动逻辑?(例如选择物料后自动带出规格) 2. NC633自定义参照与系统预制参照有哪些性能差异? 3. 当参照数据量过大时如何优化加载速度? 4. 如何通过代码动态修改参照的过滤条件?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值