用Shopify GraphQL Admin API实现对账

问题 Shopify在实行GraphQL API之后没有之前的REST API的类似payout_id查询这笔到账对应哪些订单的功能,把问题抛给GPT得到了如下结论 这个方案会导致无法确定balance transaction的范围究竟有多大,需要调取多少才能收集完所有属于指定payout的数据 解决方案 根据文档显示,可以在query中添加payout_date和payout_status作为条件,形成如下的请求 此处query内容为显示payout date是2025-08-04的balanceTransaction,且payout状态是PAID。注意如果条件输错,请求过程中会忽视query的条件,直接显示所有结果。你也可以根据自己的需求调整nodes中显示哪些字段。 因为NetSuite的SuiteScript是不支持GQL的,我们需要把请求转换成http post请求,转换之后请求的body如下。请注意还需要设置X-Shopify-Access-Token和Content-Type=application/json。 请求的结果请参考文档。

macOS通过SMB访问群晖NAS提示密码错误

症状 macOS通过Go to server访问本地群晖NAS提示密码错误,SMB的版本设置最高版本SMB3,最低版本SMB2。重置用户名和密码无效。在Windows下访问正常。 解决方法 用户名改为全大写,问题解除。

SuiteScript开发中辨别环境

问题 如何设计程序可以在正式环境刷新沙盒后不会导致涉及接口的逻辑出现两个环境的混乱 解决方案 在开发时使用runtime.accountId进行逻辑判断,如果是正式环境则runtime.accountId是1234567这样的account ID,如果是测试环境则会包含沙盒的编号比如1234567_SB1。 对于向外发送请求的情况,可以针对环境不同设置不同的URL,这样正式环境的代码刷新到沙盒也不会导致沙盒请求外部系统的正式环境。

Record.removeCurrentSublistSubrecord()是Dynamic模式下修改inventorydetail的良药吗

故障 更改Item Receipt的时候需要涉及quantity更新的情况,此时Inventory Detail和Quantity两个字段互相羁绊,先改哪个都会导致另一个字段验证错误。其他土办法比如itemreceive=false,或者置空location字段都在UI上可以实现效果,但是在脚本中都会造成inventory detail quantity错误。 问题 以下哪一个办法是良药: 结论 Record.removeCurrentSublistSubrecord()不会引发inventory detail quantity must be x的错误,但是会导致unexpected error。 这种情况是由于isDynamic: true造成的,使用dynamic mode则会永无天日,使用standard mode你会平安落地。

用N/cache保存token用于发送http请求的MapReduce/Scheduled脚本

前情提要 某些NetSuite向外部系统推送数据的场景可能需要用到MapReduce的场景,此种情况如果涉及token是比较多变的。如果放在getInputData阶段取得token然后用参数带给map阶段使用,则可能随时遇到token过时的情况,可能还需要重新获得token;如果是每一步都重新获得token则可能消耗目标系统太多资源。中国很多集成实际上是采用了IP黑白名单制度,然而这种方式并不适合NetSuite这样的云平台。因此使用OAuth2.0这样token机制是必要的而用N/cache更使这样的情况变得便捷。 代码设计 使用N/cache构建如下的代码,可以实现向目标主机获取cookie然后使用cookie内容发送请求的目的。 其中getCookieToCache的方法如下。注意Cache.get()的loader返回值如果是json则系统会帮你stringify。 之后使用时,直接调取cacheObj.get()就好,如果cache因为过期、系统自动抛弃等原因不存在,系统会自动按照loader去获取。 延伸阅读