如何替换SFCC中ExportCustomerGroups的Pipelet以消除废弃API使用
SFCC 废弃 ExportCustomerGroups Pipelet 替代方案
由于官方没有提供对等的脚本API直接替代该Pipelet,可通过自定义作业步骤+脚本调度作业的方案完成替换,具体实现如下:
实现步骤
- 第一步:在BM(业务管理器)中创建自定义作业
- 新建自定义作业,添加
ExportCustomerGroups标准作业步骤,该步骤的参数逻辑和原Pipelet完全兼容 - 将步骤的三个参数
CustomerGroups、ExportFile、OverwriteExportFile设置为允许执行时动态传入
- 新建自定义作业,添加
- 第二步:替换原业务代码中的Pipelet调用逻辑
用SFCC标准作业调度API替代原Pipelet调用,修改后的代码示例如下:
var Site = require('dw/system/Site'); var utils= require('app_nars/cartridge/scripts/util/utils.js'); var JobExecution = require('dw/system/JobExecution'); var JobMgr = require('dw/system/JobMgr'); var Thread = require('dw/system/Thread'); var mySite : String = (Site.getCurrent().getID() == "a") ? "" : "-" + Site.getCurrent().getID(); var customerGroupName : String ; if (mySite == "A") { customerGroupName = "A"; } else { customerGroupName = "B"; } var grpNam= utils.getGroup(customerGroupName); var grpFileName = 'test'; // 替换原Pipelet调用逻辑 var customExportJob = JobMgr.getJob('你在BM中配置的客户组导出作业ID'); if (customExportJob && customExportJob.isEnabled()) { var jobExecParams = { CustomerGroups: grpNam.iterator(), ExportFile : grpFileName, OverwriteExportFile:true }; // 触发作业执行 var jobExecution = customExportJob.execute(jobExecParams); // 若业务需要同步等待执行结果,可添加如下轮询逻辑,注意设置超时阈值避免请求超时 var waitCount = 0; while (jobExecution.isRunning() && waitCount < 30) { // 最多等待30秒 Thread.sleep(1000); waitCount++; } if (jobExecution.getStatus() === JobExecution.STATUS_OK) { // 导出成功后的业务逻辑 } else { // 导出失败后的异常处理逻辑 } } app.getView().render('path/templateName');
注意事项
- 如果是前端触发的导出需求,建议不要同步等待作业结果,可返回「导出中」提示,前端轮询作业状态完成后再提供下载链接,避免请求线程占用过长触发网关超时
- 导出的文件如果需要前端可访问,需要将导出路径配置到站点公开可访问的Impex目录下
- 提前配置作业执行权限,确保当前站点上下文有权限触发自定义作业
内容的提问来源于stack exchange,提问作者Vysakh
相关产品推荐
相关产品推荐

