NetSuite 集成指南:用于 SkyPlanner APS 生产排程
本指南面向 NetSuite 合作伙伴、管理员和技术采购人员,介绍如何将 SkyPlanner APS 与 Oracle NetSuite 对接,实现符合机器和人员实际产能约束的生产排程。SkyPlanner 通过 REST Web 服务和 SuiteQL 与 NetSuite 进行双向集成:
- 导入工单、工艺路线、工作中心、物料和采购订单。
- 将计划开始和结束时间写入制造工序任务。
- 将记录的工时和产量以 Work Order Completions 或 Assembly Builds 的形式回传。
- 排程发生变化时,SkyPlanner 通过 webhook 实时推送。
NetSuite 负责管理物料、BOM、工艺路线、工单、库存和成本核算。SkyPlanner 使用 Arcturus 引擎,按实际产能约束生成生产排程。SkyPlanner 团队在实施初期根据您的账户配置集成,并在上线后提供支持。集成使用 NetSuite 标准记录,不依赖 Advanced Manufacturing SuiteApp。
在芬兰乌尔维拉的配电盘和开关设备制造商 UTU,SkyPlanner 已与 NetSuite 集成运行。UTU 于 2025 年 9 月上线,将 SkyPlanner 与 Oracle NetSuite 及其薪资系统对接。要了解业务价值,可先阅读 NetSuite 生产排程页面和《NetSuite 是否支持按实际产能约束进行生产排程?》。
决定项目方向的关键选择:REST 和 OAuth 2.0
Oracle 已明确技术方向。从 2026.1 起,新集成应基于 SuiteTalk REST Web 服务构建,并使用 OAuth 2.0。从 2027.1 起,不得再基于 SOAP 或 Token-Based Authentication(TBA)创建新集成。SOAP 端点将在 2028.2 停用。现在启动的任何排程集成都应采用 REST。
| NetSuite 选项 | 说明 | 在 APS 集成中的作用 |
|---|---|---|
| SuiteTalk REST 记录 API | /services/rest/record/v1/<recordType>,版本随 NetSuite 版本更新;通过 !transform 处理工单完工、发料和装配 | 写入:工序任务和工单日期(PATCH),以及完工、发料和装配记录(transform) |
| 通过 REST 使用 SuiteQL | POST /services/rest/query/v1/suiteql,携带 Prefer: transient;每次查询最多返回 100,000 条结果,使用 limit/offset 分页 | 批量读取:物料、工艺路线、工作中心、未结工单、库存 |
| SuiteScript 2.1 RESTlets | 自定义 get/post/put/delete 端点 | 补足 REST 未覆盖的功能,传输组合数据,例如包含全部工序的工单 |
| SuiteScript User Event / Map-Reduce | 在 NetSuite 内运行的服务端脚本 | 向外部发送变更通知 |
| CSV Import Assistant | 已保存的导入映射 | 用于一次性导入,不适合持续同步 |
| SuiteTalk SOAP | 旧版技术,仅支持 TBA | 不要用于新的集成开发 |
身份验证
服务器间运行的排程服务应使用 OAuth 2.0 Client Credentials(机器对机器)。管理设置路径为 Setup > Integration > Manage Authentication > OAuth 2.0 Client Credentials (M2M) Setup。上传公钥证书后,将其映射到一个实体、一个角色及集成记录。每条集成记录最多可保留五个有效证书。
创建专用的集成角色:对物料、BOM 修订版、工艺路线和工作中心授予查看权限;对工单、完工记录和领料记录授予编辑权限。SkyPlanner REST API(API 参考文档)使用 JWT,因此中间件需要持有两端的凭据。
事件:没有标准 webhook
Oracle 文档未说明有原生的出站 webhook。可行的做法是在 Work Order 上配置 SuiteScript User Event 脚本(afterSubmit),通过 N/task 或 Map/Reduce 脚本将出站调用加入队列,再使用 N/https 发起调用。切勿在 afterSubmit 中同步调用外部服务:调用会在用户保存操作期间执行,因此端点响应缓慢会拖慢保存,甚至导致保存失败。
用户事件无法覆盖所有变更途径,批量更新和 CSV 导入可能绕过这些事件。应在事件脚本之外,定期通过 SuiteQL 按 lastmodifieddate 轮询核对,确保不遗漏任何变更。反向同步则由 SkyPlanner 自身的 webhook 触发回写,计划一变更,NetSuite 就能收到新的日期。
数据映射:从 NetSuite 到 SkyPlanner
| NetSuite 记录(REST id) | SkyPlanner 对象 | 方向 | 频率 |
|---|---|---|---|
Assembly Item(assemblyItem)、Inventory Item(inventoryItem) | 产品 / 物料 | NetSuite → SkyPlanner | 首次导入,之后每天或在变更时同步 |
BOM Revision(bomRevision)、BOM 组件 | 多层产品结构、物料需求 | NetSuite → SkyPlanner | 变更时 |
Manufacturing Routing(manufacturingRouting,子列表 routingStep、routingComponent) | 工序:顺序、工作中心、准备时间、加工时间 | NetSuite → SkyPlanner | 变更时 |
| Manufacturing Work Center(标记为工作中心的 Group):Machine Resources、Labor Resources、Work Calendar | 工作中心、工作中心组、班次 | NetSuite → SkyPlanner,之后在 SkyPlanner 中维护 | 首次导入 |
Work Order(workOrder):物料、数量、地点、Production Start/End Date、状态;交期取自关联的 Sales Order | 带有交期和优先级的订单 / 生产任务 | NetSuite → SkyPlanner | 通过 User Event 近实时同步,并辅以轮询核对 |
Manufacturing Operation Task(manufacturingOperationTask) | 已排程的工序 | NetSuite → SkyPlanner,日期由 SkyPlanner → NetSuite | 近实时 |
各地点的现有库存(SuiteQL)、Item Receipts(itemReceipt) | 库存余额,用于依据物料情况排程 | NetSuite → SkyPlanner | 每 15 至 60 分钟,或收货时 |
Purchase Order(purchaseOrder)行:物料、数量、预计收货日期、状态 | 采购订单 / 待到货物料(预计交货日期)。在交货日期计入可用物料;采购订单标记为 Delivered 时更新库存 | NetSuite → SkyPlanner | 每 15 至 60 分钟,或变更时 |
| 各工序的计划开始和结束时间 | PATCH manufacturingOperationTask/{id}(startDate、endDate)和 PATCH workOrder/{id}(Production Start/End Date) | SkyPlanner → NetSuite | 排程变更时,通过 SkyPlanner webhook 同步 |
| Mobile Confirmations、工时记录、Production Timer | POST workOrder/{id}/!transform/workOrderCompletion:startOperation/endOperation 范围、完工数量、operation 行上的人工工时,以 SkyPlanner 工时记录 ID 作为外部 ID | SkyPlanner → NetSuite | 逐条报工或批量同步 |
| 物料消耗 | POST workOrder/{id}/!transform/workOrderIssue,或在完工记录上使用 isBackflush | SkyPlanner → NetSuite | 每次报工时 |
| 订单完工(未启用 WIP 的账户) | POST workOrder/{id}/!transform/assemblyBuild | SkyPlanner → NetSuite | 订单完工时 |
| 订单关闭 | Work Order Close(workOrderClose) | 由财务人员在 NetSuite 中操作 | 默认不自动执行 |
集成方式
1. 首次加载主数据。使用 SuiteQL,先读取工作中心,再读取物料、BOM 修订版和工艺路线。工艺路线会引用工作中心,因此必须按此顺序加载。试用期间,将同样的数据导出为 CSV,再导入 SkyPlanner。这样,无需编写任何代码,就能先验证排程。
2. 订单同步。拉取状态为 Released 和 In Process 的工单。尽早确定是否也要同步 Planned 状态的工单;如果同步,应将其视为暂定需求。在同一周期内同步未结采购订单,让排程在检查每项生产任务的物料时,同时考虑库存和待到货物料,而不是只看库存。
3. 排程回写。排程变更时,SkyPlanner webhook 会将新的工序日期推送至中间件。中间件针对每道发生变更的工序发送 PATCH /services/rest/record/v1/manufacturingOperationTask/{id}(Oracle 记录参考文档),携带 startDate 和 endDate。再对 workOrder 头信息执行一次 PATCH,设置 Production Start 和 End Date。只写入日期,以及自定义顺序字段(如有使用)。切勿回写数量或 BOM 数据。如果需要在一个事务中更新多道工序,可以用一个简单的 RESTlet 在一次调用中保存整个工序列表。默认仍使用记录 API。
4. 车间报工。操作员在 SkyPlanner Mobile Confirmations 中记录生产作业。中间件通过Work Order 转换操作,使用 POST /services/rest/record/v1/workOrder/{id}/!transform/workOrderCompletion 提交每条报工记录,携带 startOperation、endOperation、完工数量以及工序行上记录的工时。非 WIP 工单则通过 !transform/assemblyBuild 完成结单。通过 REST 使用 Work Order Completion 需要启用 Manufacturing Work In Process 功能。库存和成本过账仍在 NetSuite 中处理。
5. 幂等性与重试。每条完工记录都以 SkyPlanner 工时日志 ID 作为其 NetSuite 外部 ID。外部 ID 在同一记录类型内唯一,因此重复发送的 webhook 会被判定为重复并拒绝,不会重复过账数量和成本。写入操作通过队列执行。调用失败时(如达到并发上限、记录被锁定或证书过期),系统会重试并记录日志。重试后仍失败的操作,负责集成支持的 SkyPlanner 团队都能看到。
6. 数据管理权责。NetSuite 决定生产什么:物料、数量、BOM、工艺路线和地点。SkyPlanner 决定何时、在哪里生产:工序顺序、工作中心以及开始和结束时间。在 NetSuite 中修改的日期会在下次回写时被覆盖,因此应通过自定义表单或工作流锁定 Production Start/End Date 字段。
典型项目步骤
通常从实施启动到完成只需数周,即使是大型企业也不例外。NetSuite 项目包括以下内容:
- 使用自己的数据试用:通过已保存的搜索,将工作中心、工艺路线和未结工单导出为 CSV,在 30 天试用期内导入 SkyPlanner。
- 主数据映射:将 NetSuite 记录映射到 SkyPlanner 对象,确定自定义字段、计量单位,以及每种物料采用 WIP 还是非 WIP 模式。
- 首次加载:通过 SuiteQL 加载物料、BOM 修订版、工艺路线和工作中心,然后在 SkyPlanner 中设置班次、操作员和备选工作中心。
- 工单与采购订单同步:通过 User Event 脚本和用于核对数据的轮询,同步 Released 和 In Process 状态的工单,以及带有预计收货日期的未结采购订单。
- 排程回写:将工序计划日期写回工单和工序任务,并在沙箱和生产环境中配置 OAuth 2.0 M2M。
- 车间报工:根据 Mobile Confirmations 和工时日志生成 Work Order Completions、领料记录或 Assembly Builds。
- 与现行计划并行测试:将 SkyPlanner 排程与现行下达流程并行运行,对比结果。
- 上线:将计划工作切换到 SkyPlanner,并锁定 NetSuite 中的日期字段。
工艺路线数据规范且仅涉及一家子公司时,项目范围较小。多家子公司、WIP 倒冲和自定义表单都会增加映射工作量。
NetSuite 集成中的常见问题
- 工单缺少工艺路线。没有 Manufacturing Routing 的工单,就没有可供排程的工序。对于其自身按实际产能约束进行生产排程的工具,Oracle 也有相同说明:”Work orders not associated with a NetSuite routing should not be scheduled.”(未关联 NetSuite 工艺路线的工单不应参与排程。)上线前应使用 SuiteQL 找出这些工单。
- 工作中心数据较简单。NetSuite 工作中心是一个 Group,包含 Machine Resources 和 Labor Resources 两个数量字段(默认值均为 0),以及一个 Work Calendar,通常为 “Default Work Calendar”。首次加载工作中心后,在 SkyPlanner 中维护各个工作中心、每人的班次、工具、换型时间矩阵和备选工作中心。
- Setup Time 和 Run Rate 的数据质量。NetSuite 的无限产能排程会使用这些字段,但由于不考虑产能,错误值往往不会被发现。一旦按实际产能约束进行生产排程,这些问题第一天就会显现。
- WIP 还是非 WIP。使用 Manufacturing WIP 时,通过 Work Order Issue、Work Order Completion 和 Work Order Close 对生产结果过账。不使用 WIP 时,则使用 Assembly Build。集成会为 WIP 物料提交完工记录,为其余物料提交装配记录,因此每种物料采用的模式都需要纳入映射。
- 同一账户中使用 Advanced Manufacturing。如果账户还运行 Advanced Manufacturing SuiteApp,其 Manufacturing Work Bench 记录必须与工艺路线完全一致,包括工序顺序、工序名称和工作中心。应明确由哪个系统设定工序日期。两个排程系统处理同一批工单,就会产生两套相互冲突的计划。
- 并发限制。Web 服务和 RESTlet 调用共用同一个账户并发上限,该上限由服务等级决定,每份 SuiteCloud Plus 许可证可增加 10。逐条记录并行轮询很快就会触及上限。读取应使用 SuiteQL 分页,写入应通过队列执行。
- 刷新沙箱会清除 M2M 配置。刷新沙箱时,OAuth 2.0 客户端凭据映射会被清除,这些映射也不会在账户之间复制。证书过期或被吊销后,同步会停止,直到创建新的映射。应为身份验证失败设置告警。
NetSuite 集成:由谁配置和提供支持
工作内容包括映射您的记录、工艺路线和工作中心,以及处理 NetSuite 未作为可排程数据保存的约束:换型时间矩阵、工具、操作员人数和备选资源。排程发生变化时,SkyPlanner 会通过 webhook 实时回传,其中也包括 Autopilot 所做的调整。
- SkyPlanner 团队在实施初期配置集成,并在上线后提供支持。各工厂使用 NetSuite 的方式各不相同,包括 WIP 或非 WIP 模式、自定义表单、脚本和工艺路线编制规则。团队会映射您的记录,将 SkyPlanner REST API 和 webhook 与 NetSuite REST、SuiteQL 和 RESTlets 对接。支持范围涵盖 User Event 脚本及中间件,并会跟进您对 NetSuite 配置的变更。
- 您的 NetSuite 合作伙伴也可参与。合作伙伴熟悉您的自定义表单、脚本和角色,可通过 SkyPlanner REST API 进行对接。该 API 涵盖订单、产品、物料、采购订单、工艺步骤和工时日志,提供 Swagger/OpenAPI 文档,并使用 JWT 身份验证。公开文档:SkyPlanner 文档。
- 您的开发团队可基于这些接口开发。常见的分工方式是:在 NetSuite 内运行 User Event 脚本,在外部运行一个小型中间件服务。有 API 密钥即可开始(参见集成教程),SkyPlanner 团队会在需要时提供协助。
先在30 天免费试用中,使用 CSV 数据验证排程,最多支持 20 个工作中心,无需信用卡。这样,集成就能以已经符合工厂实际情况的排程为基础启动。
连接后,Arcturus 引擎根据 NetSuite 实时工单进行排程,并结合库存和待收货采购订单检查物料。操作员使用 Mobile Confirmations、Production Timer 和 Quick Log Mode 记录作业,NetSuite 无需人工录入即可反映车间情况。SkyPlanner 每月 199 € 起,包含 5 个工作中心,按月计费,可随时取消。集成费用会根据您的流程和需求,与所选方案一同提前报价,让您在开始前了解全部费用。请联系销售,为您的 NetSuite 集成项目进行范围评估,或查看功能和客户案例。
制造企业对 SkyPlanner 的评价
2 h每周节省
“SkyPlanner 让我们的生产计划从依赖 Excel 表格转向实时生产优化。”
Kalle Kalliomäki,供应链专员
UTU · 配电盘及开关设备
生产计划工作每周节省 2 小时,新的任务队列几秒内即可下达到产线。
+90%生产效率提升
“生产效率提高了 90%。”
Abdul Rucyinga,IT 负责人
Laboratory & Allied · 药品制造
生产效率提高了 90%,为所有工作中心制定覆盖三个月的优化计划,用时不到 30 分钟。
99.2%准时交付率
“SkyPlanner 让生产瓶颈清晰可见,也让生产管理更加清晰。”
Toni Tuori,生产经理
Piristeel · 屋顶安全设施及雨水系统
今年的准时交付率达到了 99.2%,排程工作每天最多可节省四小时。
6 个月内的可用产能,销售人员一目了然
“SkyPlanner 为所有生产计划工作奠定了基础,提供了可靠保障。”
Anu Järvinen,生产经理
Fredman Operations · 食品安全包装纸
销售人员可以提前看到未来六个月的可用产能。过去需要一小时或更久才能答复的排程变更请求,现在几秒内就能得到答复。
常见问题
SkyPlanner APS 如何连接 NetSuite?
通过 NetSuite REST 记录 API、SuiteQL 以及按需使用的 RESTlets 进行双向集成。通过 PATCH 操作向 manufacturingOperationTask 写入工序日期。人工工时和产出通过 workOrderCompletion 或 assemblyBuild 转换操作过账。SkyPlanner 团队在上线实施期间完成配置,并在上线后提供支持。您的 NetSuite 合作伙伴或内部开发人员也可以基于有文档说明的 REST API 进行开发。
使用 SkyPlanner 是否需要 Advanced Manufacturing SuiteApp?
不需要。SkyPlanner 可基于标准的 Work Orders、Manufacturing Routings 和 Work Centers,自行按实际产能约束完成生产排程。如果账户中还运行了 Advanced Manufacturing,则会在范围评估时确定由哪个系统设置工序日期。
如果同一事件发送两次,如何避免重复过账?
每条 Work Order Completion 都将 SkyPlanner 的 timelog ID 用作外部 ID。NetSuite 要求同一记录类型下的外部 ID 唯一,因此会拒绝重复发送的事件,不会再次对数量和成本过账。写入失败的操作会进入队列重试,并记录日志。
能否使用 TBA 或 SOAP,代替 REST 和 OAuth 2.0?
新集成应采用 REST 和 OAuth 2.0。Oracle 将从 2027.1 起停止允许新建 TBA 和 SOAP 集成,并在 2028.2 中禁用所有 SOAP 端点。基于 REST 和 OAuth 2.0 构建的 SkyPlanner 集成在这两个版本之后仍可继续运行。
SkyPlanner 如何获知 NetSuite 中的新增工单?
NetSuite 的文档中未记载标准出站 webhook。Work Order 上的 User Event 脚本会在保存时将通知加入队列。定时运行的 SuiteQL 轮询会捕获脚本遗漏的变更,例如 CSV 导入和批量更新。
能否在构建集成之前,用 NetSuite 数据测试 SkyPlanner?
可以。将工作中心、工艺路线和尚未结案的工单导出为 CSV,在 30 天试用期内导入 SkyPlanner,即可将按实际产能约束生成的生产排程与当前计划进行比较。开始免费试用或预约演示。
NetSuite 集成项目需要多长时间?
实施通常在启动上线准备后的数周内完成,大型企业也不例外。试用期间即可使用 CSV 数据进行排程。UTU 目前已将 SkyPlanner 与 NetSuite 配合使用(UTU 客户评价)。