尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

【金蝶苍穹实战】ISV开发伙伴带你从零掌握二次开发与系统对接

【金蝶苍穹实战】ISV开发伙伴带你从零掌握二次开发与系统对接 一、为什么需要二次开发很多企业买了金蝶星辰或星空之后发现标准功能能覆盖80%的需求但剩下20%的个性化需求怎么办标准审批流跟公司实际流程对不上需要一张特殊格式的管理报表标准系统里没有金蝶跟公司现有的OA、CRM、MES系统数据不通有些行业特殊业务场景标准ERP覆盖不了这些痛点如果你只找了一个普通渠道买软件基本无解。但如果你的代理商同时是ISV开发伙伴就可以基于苍穹平台做二次开发。二、苍穹平台开发环境搭建苍穹是金蝶的云原生低代码开发平台ISV开发伙伴基于此平台进行二次开发。环境准备申请苍穹开发者账号需通过ISV认证下载苍穹开发工具基于Eclipse的定制IDE配置开发环境连接到测试租户项目创建hljs java// 创建苍穹开发项目 // 1. 新建Dynamic Web Project // 2. 选择苍穹SDK版本 // 3. 配置云注册中心连接 // 项目结构示例 // my-cosmic-app/ // ├── src/ // │ ├── main/ // │ │ ├── java/ // │ │ │ └── com/ // │ │ │ └── mycompany/ // │ │ │ ├── form/ // 表单插件 // │ │ │ ├── workflow/ // 审批流插件 // │ │ │ ├── report/ // 自定义报表 // │ │ │ └── api/ // 接口对接 // │ │ └── resources/ // │ │ └── META-INF/ // │ │ └── cosmic.json // 苍穹配置文件三、实战1自定义审批流插件场景企业需要多级会签审批标准审批流不满足。hljs javapackage com.mycompany.workflow; import kd.bos.entity.plugin.PreparePropertysEventArgs; import kd.bos.workflow.plugin.AbstractWorkflowPlugin; /** * 自定义审批流插件 - 多级会签 * 作者金蝶铂金代理商ISV开发伙伴 */ public class MultiSignWorkflowPlugin extends AbstractWorkflowPlugin { Override public void preparePropertys(PreparePropertysEventArgs e) { super.preparePropertys(e); // 注册需要用到的字段 e.getFieldKeys().add(billno); e.getFieldKeys().add(amount); e.getFieldKeys().add(department); } /** * 审批节点前置处理 * 根据金额和部门动态决定审批人 */ Override public void onNodeEnter(NodeEnterEvent e) { DynamicObject bill e.getDataEntity(); BigDecimal amount bill.getBigDecimal(amount); String dept bill.getString(department); // 金额10万 且 采购部 → 需要总经理会签 if (amount.compareTo(new BigDecimal(100000)) 0 采购部.equals(dept)) { // 动态设置下一节点为总经理会签 e.setNextNodeIds(manager_sign_node); } // 金额50万 → 需要董事长加签 if (amount.compareTo(new BigDecimal(500000)) 0) { e.addNextNodeIds(chairman_sign_node); } } }要点继承AbstractWorkflowPlugin重写节点事件通过DynamicObject获取单据数据动态设置审批节点不影响标准流程插件注册到苍穹后台热部署生效四、实战2自定义报表开发场景老板需要一张客户回款分析报表标准报表没有。hljs javapackage com.mycompany.report; import kd.bos.algo.DataSet; import kd.bos.algo.RowMeta; import kd.bos.entity.report.ReportQueryParam; import kd.bos.report.plugin.AbstractReportListDataPlugin; /** * 客户回款分析报表 * 维度客户、月份 * 指标合同金额、已回款金额、未回款金额、回款率 */ public class CustomerPaymentReport extends AbstractReportListDataPlugin { Override public DataSet query(ReportQueryParam queryParam, Object selectedRowsData) { // 构建SQL查询 String sql SELECT t1.customer_name AS customer, DATE_FORMAT(t1.bill_date, %Y-%m) AS month, SUM(t1.contract_amount) AS contract_amount, SUM(t2.paid_amount) AS paid_amount, SUM(t1.contract_amount - t2.paid_amount) AS unpaid_amount, ROUND(SUM(t2.paid_amount) / SUM(t1.contract_amount) * 100, 2) AS payment_rate FROM t_contract t1 LEFT JOIN t_payment t2 ON t1.id t2.contract_id WHERE t1.bill_date BETWEEN ? AND ? GROUP BY t1.customer_name, DATE_FORMAT(t1.bill_date, %Y-%m) ORDER BY unpaid_amount DESC; // 执行查询 DataSet dataSet DB.query(sql, queryParam.getFilter(startDate), queryParam.getFilter(endDate) ); return dataSet; } }要点继承AbstractReportListDataPlugin实现query方法支持参数化查询用户可选日期范围结果直接渲染到苍穹报表前端支持导出Excel开发效率高一个报表2-3小时搞定五、实战3系统对接 — 金蝶与OA审批同步场景金蝶的采购订单审批完成后自动同步到OA系统触发流程。hljs javapackage com.mycompany.api; import kd.bos.entity.plugin.Args; import kd.bos.entity.plugin.PostCreateNewDataEvent; import kd.bos.entity.plugin.PreparePropertysEventArgs; import kd.bos.extension.eventhandler.PostCreateNewDataEventHandler; import kd.bos.servicehelper.BizDataService; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import com.google.gson.Gson; /** * 采购订单审批通过后 → 同步到OA系统 * 通过HTTP接口推送数据 */ public class PurchaseOrderToOAHandler implements PostCreateNewDataEventHandler { // OA系统接口地址 private static final String OA_API_URL https://oa.company.com/api/flow/create; Override public void postCreateNewData(PostCreateNewDataEvent e) { DynamicObject bill e.getDataEntity(); // 构建推送数据 OAPushData pushData new OAPushData(); pushData.setFlowCode(PURCHASE_APPROVAL); pushData.setBillNo(bill.getString(billno)); pushData.setAmount(bill.getBigDecimal(amount).toString()); pushData.setSupplier(bill.getString(supplier_name)); pushData.setApprover(bill.getString(approver)); // 推送到OA try (CloseableHttpClient client HttpClients.createDefault()) { HttpPost post new HttpPost(OA_API_URL); post.setHeader(Content-Type, application/json); post.setHeader(Authorization, Bearer getOAToken()); String json new Gson().toJson(pushData); post.setEntity(new StringEntity(json, UTF-8)); client.execute(post); System.out.println([OA同步成功] 单号: bill.getString(billno)); } catch (Exception ex) { // 记录日志触发重试机制 Log.error(OA同步失败, ex); RetryServiceHelper.schedule(this.getClass(), bill.getLong(id), 5); // 5分钟后重试 } } }要点监听苍穹的PostCreateNewDataEvent事件通过HTTP接口推送数据到OA系统失败自动重试保证数据一致性不修改标准代码通过插件机制扩展六、苍穹平台开发的优势维度苍穹低代码平台传统外包从零开发开发效率低代码可视化建模效率高纯代码开发周期长系统集成与金蝶标准产品无缝集成独立系统集成困难升级影响不改底层代码升级不受影响改动大升级可能冲突维护成本平台维护成本低需专人维护成本高一站式实施开发对接一站式只做开发不管实施
返回列表