服务配置
GriffinScript 使用配置文件,扩展了语言的能力,具备使用外部服务的能力。
目前可以使用四种服务:HTTP/HTTPS服务,HSF服务,TOP服务,系统服务。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><profile xmlns="http://cainiao-inc.com/iot/binding/v2"><property name="dabao_param">{"srcOrderType": "PICK_BOILL""itemType": "SKUU"},"standardVersion": "1.0.0","lang": "zh"}</property><property name="dabao_header">{"Content-Type":"application/json""Accept":"application/json"}</property><property name="labor_header">{"Content-Type":"application/json"}</property><service class="com.cainiao.loginx.edge.adapter.HttpAdapter" name="labourService" baseUrl="https://example.com"><function name="graySwitch" path="/api/labour/grayswitch" headers="${labor_header}" method="POST" defaultParams="${dabao_param}"/><function name="checkNumber" path="/api/labour/checknumber" headers="${labor_header}" method="POST" defaultParams="${dabao_param}"/><function name="beginWork" path="/api/labour/beginwork" headers="${labor_header}" method="POST" defaultParams="${dabao_param}"/><function name="endWork" path="/api/labour/endwork" headers="${labor_header}" method="POST" defaultParams="${dabao_param}"/></service><service class="com.cainiao.loginx.edge.adapter.HsfAdapter" name="loginService" hsfVersion="1.0.0" hsfTimeout="3000" hsfInterface="com.***.CnUserLoginService"><function name="refreshSession" hsfName="refreshSession" paramTypes="com.cainiao.iots.api.dataobject.login.CnUserRefreshSessionRequest"/><function name="login" hsfName="login" paramTypes="com.cainiao.iots.api.dataobject.login.CnUserLoginRequest"/></service><bean class="com.cainiao.loginx.edge.SystemService" name="sys"/><bean class="com.cainiao.digit.edge.driver.lemo.LaborService" name="laborService"/></profile>
入参辅助配置
HTTP/HTTPS服务,支持入参辅助配置。
把部分参数配置在jsonBinding中,GriffinScript中的json数据与jsonBinding数据合并,简化外部服务调用时的参数传递。
如应正常传递{"standardVersion": "1.0.0", "lang": "zh"},配置jsonBinding为{``"standardVersion": "1.0.0"},在调用时仅需要传{"lang": "zh"}即可。参数冲突时已GriffinScript的数据为准。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><profile xmlns="http://cainiao-inc.com/iot/binding/v2"><property name="dabao_param">{"srcOrderType": "PICK_BOILL""itemType": "SKUU"},"standardVersion": "1.0.0","lang": "zh"}</property><property name="dabao_header">{"Content-Type":"application/json""Accept":"application/json"}</property><property name="labor_header">{"Content-Type":"application/json"}</property></profile>
在GS中调用服务
var params = {};var header = {};var response = labourService.login(params, header);var param1 = "key1";var param2 = {key1: value1,key2: value2}var hsfResponse = loginService.login(param1, param2);sys.print(123, 345);
HTTP/HSF服务重试机制

// HTTP/HSF服务的执行结果作为入参function retryFunction(serviceResponse){// do somethingreturn true; // 重新执行服务调用// return false; // 不执行服务调用}// httpService 是在profile.xml中配置的HTTP服务httpService.setRetryHandler(retryFunction);
数据打印
可以在 LEMO STUDIO 的模拟器控制台查看数据
sys.print("hello gs");
时间日期
var now = new Date();now.setHours(0, 0, 0, 0); //hour, minute, seconds, millisecondsvar today = now.format("yyyy-MM-dd");var todayTime = now.format("yyyy-MM-dd HH:mm:ss");var yesterdayTime = new Date();yesterdayTime.setDate(yesterday.getDate()-1); //dayvar yesterday = yesterdayTime.format("yyyy-MM-dd");
加密算法
<bean class="com.cainiao.loginx.edge.ext.MessageDigest" defaultCharset="UTF-8" algorithm="MD5" name="MD5"/><bean class="com.cainiao.loginx.edge.ext.Base64" defaultCharset="UTF-8" name="Base64"/><bean class="com.cainiao.loginx.edge.ext.PublicKeyEncryption" algorithm="RSA"transformation="RSA/ECB/PKCS1Padding"keySpec="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8H6Gp7XP6UvEQzvUgGnt9nPX4exn1aNlmeyloMl6g2rEggeTNMp7I3iLPzQDbt6yedCru971fducKc2DgF/y2CcwAdqaKdxm0dSI2Zs4QLNYbKwWJ65wkgUh8+TJBnk+PGTgoxZ2wzvhJyRGjGhsFvLmZkUYPPxAPSNfjB3+/4wIDAQAB"name="RSA"/>
var base64 = Base64.encode("text");var text = Base64.decode(base64);let var1 = MD5.digest("some text data"); // return byte arraylet var2 = MD5.digest("some other text", "GBK"); // return byte arraylet var3 = MD5.digestHex("some text data"); // return hex stringRSA.encrypt("data"); // returns BASE64 encoded data
获取应用列表(登陆流程)
<bean name="appService" interface="com.cainiao.digit.edge.driver.lemo.LemoAppListService"/>
var res = labor.launch(apps, "测试用户", optionMap);
国际化文案
提供一个tr方法,脚本按如下方式使用
var locale = 'zh_CN'; // 从设备或者物流节点信息获取localesys.setLocale(locale); // 在当前context设置localevar desc1 = sys.tr("这是一个需要在界面上展示的中文描述");var desc2 = sys.tr("这是另一个需要界面上展示的中文描述");var desc3 = sys.tr("Title:集包:拣选");var desc4 = sys.tr("这是一个{}模版", name); // 这是一个占位符模版var desc5 = sys.tr("{1}本书一共{0,number,currency}。", money, number);// var desc5 = tr("这是一个" + name + "模版"); // 这种写法不支持// var desc = tr("这是一个") + name + tr("模版"); // 此写法会影响翻译,不建议使用// var desc4 = tr(`这是一个${a + b}模版`); // 此占位符方式Griffin Script暂不支持

- 应用名称的国际化,系统会自动生成一条应用名的默认文案,直接修改即可。
- 国际化配置修改后需要重新部署,包括应用名称文案的配置。
