在审视自己的脚本库时,同一模型的频繁出现并非偶然。其中包括一个通过SFTP上传的Suitelet,一个将搜索结果导出为CSV并存储的工具,以及用于处理多文件上传的模块,还有在CSV导入时进行账目验证的脚本,还有一些ACH付款文件模板。钱的流动依然通过文件进行,而ACH文件则为定长的ASCII文本格式。每条记录长度为94个字符,十条记录组成一个数据块,首个字符标记记录类型,包括文件头、批次开始及结束、付款条目等,其中最后两个字符用于校验接收方的数据有效性。而我们通常使用的CSV文件缺少这些检测信息。
ACH、ISO 20022及SEPA的付款文件样本都在公开库中提供,虽然格式各异,但基本思想一致:支付指令以文件格式传递,而形式也与一次API调用截然不同。NetSuite并不支持SFTP服务器的功能,尽管SuiteScript 2.0包含单向SFTP库,NetSuite无法主动接收文件,必须由外部系统上传后再由NetSuite下载。因此,当合作方表示“我会上传文件”,实际上那个文件存放在另一台服务器上,NetSuite必须去提取。这需要一个定时脚本,连接服务器列出目录,下载相应文件处理完成后再移动。这里的N/sftp连接对象提供了列出、下载、移动和删除文件的全部功能,集成过程简化为一个外部文件夹和一个定时脚本。
文件夹的优势在于它的可靠性。即便接收方系统宕机,文件仍会保留到恢复后的第二天,方便随时查看。用户可以简单地打开并阅读文件,而不必关心对方系统的具体技术实现。然而,文件传递的失败往往是悄然无声的,因此没人会在失败时被提醒。NetSuite的CSV导入可能会部分成功,这样的情况下,任务仍然标记为完成,而遗漏的记录却被放置在一个results.csv文件中。
甚至更复杂的是,Oracle也指出,用户事件脚本在导入后失败时,记录已被创建或更新,需重新运行动作脚本,而不是整份文件。如果使用Add模式重新导入,可能导致记录重复创建。
可以将文件夹视作API来管理,规则相通,但文件夹不会主动执行,建议在文件末尾添加记录数和总金额做核对,以确保完整性。同时,应确保文件在完全上传后重命名,避免处理不完整的数据。记录所有处理过的文件,防止同一文件重复入账,并将原始文件归档。利用N/sftp的move功能,设置归档文件夹和错误文件夹的成本微乎其微。另外,务必将失败的任务显示出来并及时通知相关人员,同时对于未出现的文件也要设立警报。尽管在架构图中不会出现CSV文件夹,但旧系统的固有特点、随时变化的需求以及用户对传输流程理解的不足,往往导致这些现象的持续存在。
发表评论