You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:10:50