三个H厂需求,放进完整文件里逐行写
三个需求都出自H厂真资料,每个都放进完整文件里写,让你看到它在文件的哪个位置。全部 草稿:没进虚拟机跑过,标「待查」的地方要先查到才能填。
依据:属性表「产品属性」:中文品名 C8_Style_ZhName 文本;客户 C8_Style_Customer 引用单选。H厂的真值:客户 = 客户B(追踪表 Label BM),中文品名H厂资料里没有(成品基本资料文件夹是空的)。
前提:两个字段已在 Setup → Business Objects → Style 里建好、Enabled。
| 代码(一行一行) | 这一行在干什么 |
|---|---|
| <NodeRef Type="Style"> | 扩展「款式」对象(属性表:维度 = 产品 → Style) |
| <Headings> | 字段组 |
| <Heading Id="C8_Style_ZhName"/> | 文本字段 → 自闭合 |
| <Heading Id="C8_Style_Customer"> | ref 字段 → 不自闭合 |
| <Relationship Type="Customer"/> | 引用的对象是 Customer(属性清单第 1 行:品牌 → BO = Customer) |
| </Heading> | |
| </Headings> | |
| </NodeRef> |
| 代码(一行一行) | 这一行在干什么 |
|---|---|
| "Style": { | 已有的款式块 |
| "CntColorway": "…", | 原来的,保留;后面逗号 |
| "C8_Style_ZhName": "\u4e2d\u6587\u54c1\u540d", | 中文品名 |
| "C8_Style_Customer": "\u5ba2\u6237", | 客户 |
| "Action": { … } | 原来的按钮翻译,保留 |
| } |
依据:属性表 CBD 页「幣種 C8_CSM_Currency,默認 USD」;纪要「成品报价以美元为主,人民币较少」;H厂 CBD 表头「汇率 USD:RMB 6.8」。
为什么用 addDefaultValue 不用 addFixedValue:有人民币报价,要允许改。
| 代码(一行一行) | 这一行在干什么 |
|---|---|
| topic.subscribe("/csi/view/start", function (view) { | 已有的页面订阅,不新建 |
| var key = view.defView.getKey(); | 已有 |
| switch (key) { | 已有 |
| case "__Form__|Style": { … break; }; | 已有的 case,不动 |
| case "__Form__|<成本单Type名>": { | 新加:打开成本单新建表单时。Type 名 待查(CBD 属性 Id 前缀是 C8_CSM_,对象名还不知道) |
| view.addDefaultValue("C8_CSM_Currency", "<币种枚举名>:USD"); | 默认 USD,可改。枚举完整写法 待查 |
| break; | 必须 |
| }; | |
| } | |
| }); |
依据(真数验算过,见第 ② 页):H厂 CBD:人工费 = 69.2 × 0.10833 × 0.6 = 4.498;制造 = 69.2 × 0.10833 × 0.4 = 2.9987。属性 ID:C8_CSM_IETtlMin、C8_CSM_LaborPerM、C8_CSM_LaborCost、C8_CSM_ManCost。
| 代码(一行一行) | 这一行在干什么 |
|---|---|
| api.watchAttribute("<成本单Type名>", "C8_CSM_IETtlMin", function (ac, cn, node, id) { | 盯住 IE 分钟数 |
| var minutes = ac.newValue; | 刚填的分钟数,例 69.2 |
| var perMin = node.C8_CSM_LaborPerM; | 同一张单上的每分钟人工费,例 0.10833 |
| if (minutes && perMin) { | 两个都有值才算(Java 的 if 一样) |
| var total = minutes * perMin; | 69.2 × 0.10833 = 7.4966 |
| ac.m_writer | 写数据 |
| .changeNode(node.$URL) | 改当前这张成本单 |
| .changeAttribute("C8_CSM_LaborCost", "double", total * 0.6) | 人工费 = 4.498 |
| .changeAttribute("C8_CSM_ManCost", "double", total * 0.4); | 制造费 = 2.9987 |
| ac.bRefreshNode = true; | 刷新 |
| } | |
| return true; | 必须 |
| }); |
ac.m_writer.changeNode(node.$URL)
.changeAttributeExp("C8_CSM_LaborCost", "C8_CSM_IETtlMin * C8_CSM_LaborPerM * 0.6", false);
isOneTimeExp = false:不是只算一次,字段变了会跟着变(按课件「true 表示一次性表达式」反推)。
NodeRef,没复制整个 NodeOnAction="Site.X" 对应 return 里的 Xdefine / return 括号完整*)| 现象 | 先查 |
|---|---|
| 显示内部 Id(如 C8_ReviewApproval) | en.js 没保存;Id 拼错 |
| 字段在列表里找不到 | 要走 Manage Custom Views → Attributes 加,表格「三根竖条」菜单加不了新字段 |
| 字段在详情页不显示 | 知识库未解决问题,先记下来问人 |
| 下拉改值没反应 | 枚举是不是 枚举名:Key 完整写法 |
| 按钮点了没反应 | OnAction 名字和 return 里的不一致;return 里少逗号 |
| 按钮还在(想隐藏的) | 你是管理员账号(hideRevisionAction 对管理员无效) |
| Update 报错 | XML 没闭合、JS 括号/逗号 |
| 监听没触发 | 字段是图片/文件类型(监听不到) |
execute({sync:true})C8_ 前缀的 Id(Code、LossPct、PcsPerHr)是不是 C8 标准字段出处:带教同事《箱包属性信息整理 V1.0》、H厂.zip、会议纪要 10-08、课件 5《前端开发 xml》、课件 6《js》、知识库 C8配置规则_7.8.1。