Sabre Scribe脚本循环及continue技巧咨询:批量处理队列PNR
Sabre Scribe循环与continue使用技巧及批量PNR备注处理方案
一、循环(Looping)核心用法
Sabre Scribe支持两种主流循环结构,适配不同批量处理场景:
1. FOR循环(固定次数迭代)
适合已知明确处理数量的场景(比如你提到的2500条PNR):
FOR i FROM 1 TO QUEUE:COUNT() ; 取出队列中的PNR SET pnrRef = QUEUE:NEXT() ; 执行后续处理逻辑 ENDFOR
2. WHILE循环(动态条件迭代)
更适合队列实时变化的场景,直到队列为空自动停止,比固定次数更灵活:
WHILE QUEUE:COUNT() > 0 ; 核心处理逻辑 ENDWHILE
二、continue语句使用技巧
CONTINUE的作用是跳过当前循环迭代的剩余代码,直接进入下一次循环,常用于异常处理或条件过滤:
- 异常跳过:处理单个PNR时遇到错误(如锁定失败、PNR已失效),用
CONTINUE避免整个批量任务中断 - 条件过滤:只处理符合特定规则的PNR,不符合的直接跳过
示例:
WHILE QUEUE:COUNT() > 0 SET pnrRef = QUEUE:NEXT() ; 尝试锁定PNR,失败则跳过 IF NOT LOCK(pnrRef) THEN CONTINUE ENDIF ; 仅处理国内航班PNR,否则跳过 IF PNR:GET("ITINERARY:TYPE") != "DOMESTIC" THEN UNLOCK(pnrRef) CONTINUE ENDIF ; 执行备注添加逻辑 UNLOCK(pnrRef) ENDWHILE
三、批量PNR添加备注的完整脚本实现
针对你的需求,以下是可直接复用的核心脚本片段,实现自动遍历队列、添加备注、处理下一条PNR:
; 初始化错误状态 ERROR:CLEAR() WHILE QUEUE:COUNT() > 0 ; 1. 取出队列中的下一条PNR SET currentPNR = QUEUE:NEXT() ; 2. 锁定PNR防止并发修改 IF NOT LOCK(currentPNR) THEN WRITELOG "无法锁定PNR: " + currentPNR + ",跳过" CONTINUE ENDIF ; 3. 切换到当前PNR SEND "RT " + currentPNR ; 4. 添加备注(替换为你的自定义备注内容) SEND "*REM/批量添加的统一备注" ; 5. 保存PNR变更 SEND "ER" ; 6. 检查操作是否出错 IF ERROR:CHECK() THEN WRITELOG "处理PNR " + currentPNR + " 出错,跳过" ERROR:CLEAR() UNLOCK(currentPNR) CONTINUE ENDIF ; 7. 解锁PNR UNLOCK(currentPNR) ; 可选:添加短延时,避免触发Sabre频率限制 DELAY 500 ENDWHILE WRITELOG "所有PNR处理完成"
关键注意事项
- 锁定机制:必须使用
LOCK/UNLOCK,防止多个进程同时修改同一PNR导致数据冲突 - 错误日志:用
WRITELOG记录异常PNR,方便后续排查 - 频率控制:添加
DELAY指令避免操作过快触发Sabre的API限制 - 队列配置:确保队列设置为"处理后自动移除",或在脚本中手动移除已处理的PNR
内容的提问来源于stack exchange,提问作者Kevin Pulido
相关产品推荐
相关产品推荐

