• 计划处理链的很多种情况


    要去跑一个处理链,有很多种情况。

    每天定点跑一次。
    每天不定点跑很多次。

    月初月末那几天每天不定点跑很多次。

    haha,感觉写下来怪怪的。这个处理链的小脾气还挺多的。
    一般是在开始进程里搞:
    开始进程有两大招:

    1. 自己跑,想怎么跑怎么跑:scheduled
    2. 别人通知了再跑: External start only (via API or metachain)
      在这里插入图片描述
      自己跑就是scheduled: 有好几种情况
      在这里插入图片描述
      当你设定了这个scheduled跑,那就会有个scheduled jobs:
      在这里插入图片描述
      后台会自动给你release一个job叫BI_PROCESS_TRIGGER,这个job是对应开始进程的。
      一般开始进程下都是DTP,那么这些DTP进程都会由这个BI_PROCESS_TRIGGER来触发其他的event job。

    如果你是用主链或者API来计划链,那就没有BI_PROCESS_TRIGGER这个job了。
    它作为子链可以按主链延递的顺序跑,或者是通过API(就是那个FM:RSPC_API_CHAIN_START)来跑。这就让我想到一个问题了,如果是用API来跑,那么后台也会有一个JOB,这个JOB里会给RSPROCESS这个program一个对应到处理链的变量,然后这个变量就可以用在自建的JOB里去启动这个处理链。没这么做过的还真不理解。

    回到这个自己跑的方式,假设我们想要这个处理链每月的1号跑:
    那就是Montnly.
    每两个月跑一次呢,就是other period-> 2 months.
    在这里插入图片描述
    假设这个链要每天跑两次,在不同时间段,早上7点,下午1点。
    那就先设置一个早上7点的daily的,激活链,schedule链。此时就有了scheduled jobs了,然后去干啥?
    去找这个schuduled job.
    在这里插入图片描述
    在这里插入图片描述
    然后去改一个另外的时间:
    在这里插入图片描述
    为什么这样可以?
    因为这个repeat就相当于一个复制了的job,而且这个job里面已经有了这个处理链的开始进程参数了。
    我们只是重复设置了一个时间让它这个job再去跑一遍这个处理链。去看这个变量的值,就是处理链开始进程。
    在这里插入图片描述
    那么这样之后,会有什么情况呢?你会发现这个处理链的开始进程变红了,这个意思就是它有很多个计划时间。有很多个released的job。
    你想一天执行好几遍这个链,那你就可以直接复制job。
    每个月的哪天执行好几遍,也可以这样复制job。

    或者还可以咋办?
    还有一个复杂点的方法。
    当你去执行一个链的时候,还有after job, after event 等等。
    那你可以去after event.

    event 是要在SM62里面去建的。
    然后去。SM36去建job,job里面简直跟process开始进程一样的:
    job 还能after job, after event呢。
    在这里插入图片描述
    job里面要干啥?
    我们定义处理链开始进程的job时候,是直接一个RSPROCESS的ABAP程序,变量都给我们自动填成了处理链开始进程,就是去触发它。

    如果说我们让处理链的开始进程是去after event的,那咋整?
    这个event也是要触发的,那就在job里面的step里去触发这个event,用program BTC_EVENT_RAISE,填你建好的event作为变量名。
    在这里插入图片描述
    在这里插入图片描述

    然后在你设定的job的运行时间里,这个job就会去触发event去了,触发完了event,处理链那个after event的,就会去跑了。
    你要一天跑3次的,就去建3个job。对应3个不同的开始时间。
    或者你自己去写一个程序,调用method cl_batch_event , event id就是你建的event。也就是用这个程序去raise event。
    在这里插入图片描述
    这个么,就是又多了一步。
    不过这思来想去,这从不同的job开始时间通过program去触发event,再调起一个after event的处理链,我觉得不是跟不同job开始时间直接去调用after job的处理链一个意思么,走这么一大圈去用program,去用event,不是脱裤子放屁么。

    就算我是要用job里面的日历,比如月初如果是节假日就不跑,那么我这不还是在job里面就定义好了,用那个event意义何在呢,我暂时还没想通。
    就比如说,只在每月的1-20号,月末的最后两天跑这个链。
    那我就是要用到日历factory calendar.
    在SCAL
    在这里插入图片描述
    创建工厂日历,就是哪些是工作日,哪些是周末,哪些是节假日。
    比如说血汗工厂一周7天都是工作日。。。

    要定义工厂日历,得把节假日单拎出来。
    就是还要建个holiday calendar.
    点change进去。新建。
    在这里插入图片描述
    要填ID和文本,确定可用时限,确定holiday日历编号,确定工作日是哪些天。
    在这里插入图片描述
    相关program:
    在这里插入图片描述

    那么对于我们上面这个要在每月前20日和后两日跑的呢?
    那就去把前20天和后两天当做工作日,其他日子都不是。
    最后去处理链开始进程,restriction里头,选中刚定义的工厂日历。然后不在节假日跑。
    在这里插入图片描述
    这个当然也可以就平时跑处理链不跑在周末和节假日的,用已经有的工厂日历。
    因为这个要跑的日子多,所以就去弄个日历一了百了。
    如果说只要每月前两天和后两天的,那还是直接去建好多个job吧。我觉得弄这个日历也挺麻烦的。

  • 相关阅读:
    linux环境下查看程序为什么被kill
    spring
    elasticsearch 7.x的 常用命令
    解决 npm install express 遇到的问题总结
    【开发】视频集中存储/直播点播平台EasyDSS点播文件分类功能优化
    07.适配器模式设计思想
    使用Docker部署Gitlab的记录
    错题汇总11 12
    JavaScript 数据类型
    如何模糊匹配药品
  • 原文地址:https://blog.csdn.net/weixin_45689053/article/details/126051990