原文地址:https://www.lujun9972.win/blog/2022/05/27/使用-org-depend-自动化任务流程/index.html

目录

  • org-depend 使用方法简介

    • BLOCKER 检查任务是否允许开始
    • TRIGGER 自动开始任务
  • 定义自己的规则
  • 参考文档

当项目涉及多项任务时,任务之间往往有先后的依赖关系,例如一个信息系统建设可能需要经过 可行性分析 后才能进入 立项申请 阶段,再然后才是 项目启动, 需求, 设计, 开发, 测试, 上线. 下一个步骤的开始依赖于上一个步骤的结束。

这就产生了两个需求:

  1. 如何在上一个步骤未完成的时候,禁止下一个步骤开始
  2. 上一个步骤完成后,自动开始下一个步骤

Karl Voit 给出的解决方法是 org-depend,原理其实非常简单,通过 org-blocker-hook 可以检查是否允许进行状态变化,而 org-trigger-hook 可以指定状态变化时要触发的函数。

org-depend 使用方法简介

org-depend 通过 BLOCKER 属性来指定当前任务开始所依赖的任务,使用 TRIGGER 属性来设置当前任务结束后自动开始的任务

BLOCKER 检查任务是否允许开始

BLOCKER 属性是一些 空格 分隔的任务ID列表,这些ID所代表的任务存在未完成的,则该任务不能开始(不过由于org-mode 的状态不能区分待开始和进行中,因此实际上只能约束其不允许结束)

考虑到很多时候上下游任务本身会按照兄弟关系从上倒下进行排列的,因此 org-depend 提供了一个关键字 previous-sibling 来表示上一个同级的任务。例如

* 项目
** TODO 可行性分析
** 立项申请
:PROPERTIES:
:BLOCKER:  previous-sibling
:END:** 项目启动
** 需求
** 设计
** 开发
** 测试
** 上线

TRIGGER 自动开始任务

TRIGGER 属性稍微复杂一些,是一些 空格 分隔的 任务ID(状态) 列表。当本任务完成后,则会将这些ID所代表的任务设置为括号能的状态。

类似的, org-depend 也提供了一个关键字 chain-siblings 来表示下一个同级的任务。例如

* 项目
** TODO 可行性分析
:PROPERTIES:
:TRIGGER:  chain-siblings(TODAY)
:END:
** 立项申请** 项目启动
** 需求
** 设计
** 开发
** 测试
** 上线

事实上关于 TRIGGER 的语法支持多种形式,比如 chain-siblings-scheduled 可以传递计划时间, chain-find-next(状态[,选项]) 可以灵活定义下一个任务的搜索方式。 详情可以参见 org-depend.el 中的注释部分。

定义自己的规则

前面说的由于 org-mode 的状态关键字不能区分 待开始进行中 这两种状态,因此 org-depend 只能限制依赖任务在被依赖任务未完成之前无法切换到完成状态。不过只要指导了原理,我们也可以实现自己的检查条件:

例如,假设我们以 PROG 状态来表示 进行中, 那么以下设置可以实现当 task 属性中包含 :DEPEND_ID 时,表示该属性值对应的 task 必须先完成,否则不能进入PROG状态。

(defun my-check-depend-task-state (args)"检查依赖任务是否完成"(message "%s" args)(let* ((to (plist-get args :to))(depend-id (org-element-property :DEPEND_ID (org-element-at-point)))(depend-task-state (when (and depend-id(not (string= depend-id "")))(save-excursion(goto-char (org-find-entry-with-id depend-id))(nth 2 (org-heading-components))))))(or (not (member to '("PROG")))(not depend-task-state)(member depend-task-state org-done-keywords))))(add-hook 'org-blocker-hook #'my-check-depend-task-state)

参考文档

  • https://karl-voit.at/2016/12/18/org-depend/

使用 org-depend 自动化任务流程相关推荐

  1. 自动化决策流程实现资产组合利润最大化

    关注 "番茄风控大数据",获取更多数据分析与风控大数据的实用干货 各位读者大家好,今天已经是3月底,所谓一年之际在于春,不知道新一年你的目标和计划都定好了吗? 今天看到一句话觉得还 ...

  2. 自动化立体仓库使用流程!海格里斯自动化立体库流程:入库——出库——拣选

    随着现代物流行业的不断进步,我们可以发现自动化立体仓库已成为现代物流系统中重要的一个组成部分,它不但可以减轻人工劳动强度,还可以节省地面面积,可以很轻松的避免一些不必要的故障出现,同时还可以提高仓库的 ...

  3. 发展人脑连接组计划中(dHCP)婴儿扩散 MRI 的自动化处理流程

    发展人脑连接组计划(developing Human Connectome Project, dHCP)旨在为科学界创建并提供胎龄为 20 至 44 周的婴儿大脑功能和结构连接的四维图像,以探索遗传和 ...

  4. 自动化软件测试流程的七个步骤包括哪些内容

    自动化测试一般是指软件测试的自动化技术,自动化软件测试流程是把以人为驱动的测试行为转化为机器语言执行的一种过程.通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试, ...

  5. 自动化软件测试流程的七个步骤和内容

    前言 自动化测试一般是指软件测试的自动化技术,自动化 软件测试流程 是把以人为驱动的测试行为转化为机器语言执行的一种过程.通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步 ...

  6. 自动化 HR 流程,实现人力资源部门无纸化

    自动化 HR 流程,实现人力资源部门无纸化 如果公司使用手动流程,人力资源部门则可能是纸张最密集的部门之一.使用像Google Docs或Dropbox这样的免费文件共享应用程序可能会感觉比使用纸张更 ...

  7. Jenkins + Generic Webhook Trigger + GitLab自动化部署流程配置

    Jenkins 插件安装与配置 登录Jenkis 进入插件管理并下载插件Generic Webhook Trigger jenkins系统配置中给GitLab授权 进入系统配置 找到并启用gitlab ...

  8. 怎么用python自动注册_python selenium自动化(二)自动化注册流程

    需求:使用python selenium来自动测试一个网站注册的流程. 假设这个网站的注册流程分为三步,需要提供比较多的信息: 在这个流程里面,需要用户填入信息.在下拉菜单中选择.选择单选的radio ...

  9. 企业如何用CRM软件客户管理自动化优化流程?

    假如企业需要利用CRM软件来对自己的客户实施一系列的管理维护流程,那么客户服务自动化是个必选的功能流程,如果没有服务自动化流程,那么CRM软件就成了一个普通客户资料信息管理工具,只能被用于储存调用客户 ...

  10. 用python实现流程自动化_Python自动化开发 - 流程控制

    一.拾遗主题 1.变量 理解变量在计算机内存中的表示 >>> a = "ABC" Python解释器干了两件事情: 在内存中创建了一个'ABC'的字符串: 在内存 ...

最新文章

  1. 初识boost之boost::share_ptr用法
  2. fs7宽容度_《如果蜗牛有爱情》,FS7拍出电影级质感!
  3. java获取mp3的时长和播放mp3文件
  4. openjpa_以编程方式向OpenJPA注册实体类型
  5. C 与 C 的真正区别在哪里?
  6. STM32F1笔记(十)PWM
  7. Objective-C马路成魔【14-关键C语言功能】
  8. 什么是压缩感知?[简单概括]
  9. 记录excel翻车现场
  10. Mac电脑如何添加管理员账户?
  11. Git SSL公钥密钥生成
  12. ppt计算机实验报告册,PPT实验报告模板
  13. 轻松禁止自动更新FLASH插件有绝招
  14. 腾讯求职经历(后附大量面试题)
  15. Python3爬取新浪微博头条
  16. JSP 返回上一页的几种方法
  17. 5g网速究竟有多快?比4g快多少?
  18. CSDN VIP年卡大放送!中国大数据技术大会超值福利,等你来拿!
  19. Ubuntu之必装软件
  20. 中华英才网三千员工全部裁员引争议

热门文章

  1. Angular学习笔记88:Angular12中使用crypto-js运行提示Warning
  2. 通过statCounter计算给定的RDD[Double]的统计信息的方法
  3. QQ的个人中心模块测试用例
  4. 家用服务器的终极主页Dashy
  5. 乌班图16.04配置sdk
  6. 20170928-2 单元测试
  7. 庞涓VS孙膑——一个很难的数学问题
  8. conan使用(二)--conan环境搭建
  9. Python/numpy之ravel()多维数据展平函数
  10. SpringBoot入门教程(转)