当前位置: 首页 > news >正文

IBM BAW(原BPM升级版)使用教程第十四讲

续前篇! 

一、流程设计中的编程

IBM Business Automation Workflow (BAW) 中,编程部分涵盖了多种技术、工具和策略,帮助用户定制和扩展流程。BAW 主要通过脚本、集成、服务和自定义代码来实现流程的灵活性和定制化。下面将详细讲解 BAW 中的编程部分,包括:

1. BAW 编程的关键组成部分

BAW 中的编程部分主要包括以下几个方面:

  1. 脚本编程:包括 JavaScript 和 Jython 脚本,用于实现任务的自动化、数据操作、流程控制等。

  2. 自定义服务:用于创建自定义业务逻辑,通过 Web ServicesREST API 与外部系统集成。

  3. 集成与服务调用:BAW 可以与外部应用程序(如 CRM、ERP 等)进行集成,调用外部服务。

  4. 流程规则与条件:用于控制流程执行的条件、事件和决策逻辑。

2. 脚本编程

在 BAW 中,脚本是实现自定义逻辑的常见方式。BAW 提供了两种主要的脚本语言:

  • JavaScript:一种广泛使用的脚本语言,适合客户端和服务端的操作。

  • Jython:一种基于 Python 语言的脚本语言,适用于服务端的逻辑处理。

常见的脚本应用场景:
  1. 表单脚本

    • 表单脚本通常在表单字段变化时触发,用于动态更新表单或执行某些计算。

    • 例如,当用户填写表单时,脚本可以根据输入的值自动计算其他字段的值。

    // 计算总价
    var unitPrice = getField("unitPrice");
    var quantity = getField("quantity");
    var totalPrice = unitPrice * quantity;
    setField("totalPrice", totalPrice);
    
  2. 任务脚本

    • 在任务步骤中,使用脚本来控制任务的执行逻辑,自动填充任务字段或执行某些操作。

    • 比如,可以用脚本动态分配任务、设置任务状态,或在任务完成时执行特定的操作。

    // 分配任务给特定用户
    var task = getTask("TaskID");
    task.assign("user1@example.com");
    task.complete();
    
  3. 业务逻辑脚本

    • 在流程的不同阶段使用脚本进行复杂的业务逻辑处理,例如:计算、判断、条件分支、数据处理等。

    • 比如,根据某个变量的值判断流程是否继续,或是否触发某个子流程。

    var totalAmount = getField("totalAmount");
    if (totalAmount > 10000) {// 触发高级审批流程triggerSubprocess("HighApproval");
    } else {// 直接完成任务completeTask();
    }
    
如何在 BAW 中编写脚本:
  1. 表单脚本

    • Process Designer 中的 Form 设计器里,你可以为每个表单字段添加脚本。在每个字段的 Events 中,你可以选择相应的触发事件(如 onChange)并编写 JavaScript 或 Jython 代码。

  2. 任务脚本

    • Process Designer 中的 TaskUser Task 配置中,你可以为任务添加 Pre-ExecutionPost-Execution 脚本。这些脚本会在任务开始前或完成后自动执行。

  3. 业务流程脚本

    • Process Designer 中,流程中的各种节点可以使用 Script Task 来编写业务逻辑。在每个节点的设置中,可以编写 JavaScript 或 Jython 脚本来处理复杂的业务逻辑。

3. 自定义服务

自定义服务 使你能够创建自己的业务逻辑,并将其集成到 BAW 流程中。自定义服务通常通过 Web ServicesREST API 实现,允许你与外部系统进行通信或实现特定的功能。

自定义服务的常见场景:
  1. 集成外部系统

    • BAW 可以与外部系统(如 CRM、ERP、HR 系统等)集成,使用自定义服务来访问这些系统的数据。例如,可以通过 RESTful API 调用外部服务来获取客户信息,或通过 SOAP Web 服务获取库存数据。

    // 通过 REST API 调用外部系统
    var url = "https://api.example.com/getCustomerData";
    var response = sendRESTRequest(url, "GET");
    
  2. 业务逻辑处理

    • 你可以创建自定义的 Java 服务类来处理复杂的业务逻辑。比如,实现一个计算利息的服务,根据不同的条件进行计算,然后返回结果给流程。

    public class InterestCalculationService {public double calculateInterest(double amount, double rate, int period) {return amount * rate * period / 100;}
    }
    
  3. 触发外部操作

    • 在流程中触发外部系统的操作,如发送邮件、通知用户、创建或更新外部系统中的记录等。

如何创建自定义服务:
  1. Process Designer 中,创建一个新的 Service,并选择 Web ServiceJava Service

  2. 配置服务的输入和输出参数,以及实现业务逻辑或集成的代码。

  3. 将服务集成到你的 BPD 中,调用自定义服务来处理任务、决策等操作。

4. 集成与服务调用

BAW 提供了灵活的 集成方式,允许你调用外部应用程序、系统或服务。这些集成通常通过 REST APIWeb Services 完成。

常见的集成方式:
  1. 调用外部 REST API

    • BAW 支持通过 REST API 与外部系统进行集成。你可以使用 REST Services 来调用外部 API,获取数据或触发操作。

    var response = sendRESTRequest("https://api.example.com/getData", "GET");
    var jsonData = JSON.parse(response);
    
  2. Web 服务集成

    • 通过 Web Services,你可以访问 SOAP 或 REST 类型的 Web 服务,处理外部系统的数据或调用外部功能。

    // 调用 Web 服务获取用户信息
    UserInfoService service = new UserInfoService();
    UserInfo user = service.getUserInfo(userId);
    
  3. 数据库集成

    • BAW 可以通过 Database Integration 来访问数据库中的数据,执行查询、插入、更新等操作。这通常通过 SQL 或通过自定义的 JDBC 服务实现。

5. 流程规则与条件

BAW 提供了强大的 决策服务业务规则引擎,你可以在流程中使用条件、规则和决策来控制流程的执行。例如:

  • 条件判断:根据某些条件判断流程应该走哪个路径(如 IF/ELSESwitch)。

  • 业务规则:在流程中使用规则引擎来根据预设规则做出决策。

示例:条件判断与规则
var orderAmount = getField("orderAmount");if (orderAmount > 10000) {triggerApproval("highLevel");
} else {triggerApproval("normalLevel");
}

6. 总结

BAW 中的编程部分提供了非常强大的灵活性,允许开发人员通过脚本、自定义服务、集成与规则等方式,实现业务流程的定制化。主要包括:

  • 脚本编程:使用 JavaScript 或 Jython 进行业务逻辑、表单交互、任务控制等操作。

  • 自定义服务:通过 Web 服务、REST API 和 Java 服务创建自定义业务逻辑,集成外部系统。

  • 集成与服务调用:通过 REST API、Web Services 或数据库集成,与外部系统和数据源交互。

  • 决策与规则:使用条件判断和业务规则来控制流程的执行路径和决策。

通过这些编程技术,BAW 能够灵活适应复杂的业务需求,提供高度定制化的流程管理解决方案。

二、编程管理

这一部分涉及到的编程内容更加聚焦于流程设计、开发、部署和管理过程中所需的各种 API、脚本以及集成方法。具体来说,它主要包含了与 BAW 平台交互时所需要的开发技术、工具和策略。

1. BAW 编程管理的主要组成部分

在 BAW 中的编程管理,涉及多个方面的开发工作,如服务创建、脚本编写、任务和事件的管理、集成外部应用等。主要组成部分包括:

  • API 访问和使用:包括流程管理 API、任务 API、服务 API、数据访问 API 等。

  • Web 服务和集成:用于外部系统的集成(通过 REST、SOAP 等)。

  • 脚本编程:使用 JavaScript、Jython 等脚本语言来定义业务逻辑、控制任务流和交互等。

  • 流程实例与任务管理:包括如何通过编程来管理流程实例、执行任务、分配任务等。

  • 定制化与扩展:如何通过自定义服务、规则、事件等来扩展 BAW 的默认功能。

2. 编程部分的核心技术

BAW 的编程管理涉及一系列技术,用于定制和扩展业务流程。常见的技术包括:

1) REST API 和 SOAP Web 服务
  • REST API:BAW 提供了多种 RESTful API 用于与其他系统和应用集成。这些 API 可用于获取流程实例、任务、表单数据、用户信息等。

    • 获取任务列表

      GET /v1/workflow/tasks
      
    • 获取流程实例

      GET /v1/workflow/processes/{processInstanceId}
      
  • SOAP Web 服务:BAW 也支持 SOAP Web 服务,允许外部系统通过传统的 SOAP 协议与 BAW 平台进行通信。

2) 脚本编程(JavaScript / Jython)

在 BAW 中,你可以使用 JavaScriptJython 脚本来:

  • 动态计算表单字段的值。

  • 在任务或流程执行时插入自定义逻辑。

  • 通过脚本控制流程的路径、事件触发、任务分配等。

例如,使用 JavaScript 动态分配任务:

// 获取任务并分配给特定用户
var task = getTask("TaskID");
task.assign("user@example.com");
task.complete();
3) 业务规则与条件

BAW 提供了 决策服务业务规则引擎(如 ODM),让你可以在流程中嵌入复杂的业务规则。通过规则,你可以根据数据动态决策流程走向。例如:

var totalAmount = getField("totalAmount");if (totalAmount > 10000) {triggerSubprocess("HighLevelApproval");
} else {triggerSubprocess("LowLevelApproval");
}
4) 自定义服务
  • Java 服务:通过创建 Java 服务,你可以实现自定义的业务逻辑或与外部系统进行交互。Java 服务允许你更灵活地处理流程中的业务逻辑。

    示例:创建一个简单的 Java 服务来计算利息:

    public class InterestCalculationService {public double calculateInterest(double amount, double rate, int period) {return amount * rate * period / 100;}
    }
    
  • 集成外部服务:BAW 可以通过 REST API 或 SOAP Web 服务与外部系统集成,实现系统间的数据交换和功能调用。例如,调用外部 CRM 系统的 API 获取客户信息,或者通过外部 ERP 系统来更新库存。

5) 事件与任务管理

BAW 允许开发者通过编程方式控制流程实例的任务和事件。例如,你可以创建 事件监听器 来监控特定的事件,或通过 API 来管理任务的分配、完成等。

  • 任务分配
    通过 API 或脚本,开发者可以在流程执行过程中动态分配任务给特定用户。

    var task = getTask("TaskID");
    task.assign("user@example.com");
    
  • 任务操作:任务的 开始完成暂停 等状态管理,可以通过 BAW 提供的任务 API 来控制。

6) 调度和定时任务

BAW 中的调度功能可以让你通过编程的方式,控制定时任务或事件的触发。你可以配置 定时器延时 事件,并且通过脚本来触发这些事件。

例如,设置一个延时任务:

var task = getTask("TaskID");
task.scheduleTimer("timerName", 3600); // 1小时后触发

3. 编程管理的最佳实践

在使用 BAW 进行编程时,有一些最佳实践可以帮助你提高效率并确保程序的可维护性和可扩展性:

1) 清晰的流程设计

在进行编程之前,首先确保流程设计的清晰和合理。流程设计应该具备良好的可读性和可维护性,避免过于复杂或交错的任务路径。

2) 模块化与重用
  • 重用代码:将常用的业务逻辑、服务和脚本封装成模块,避免重复编写相似的代码。

  • 利用 API:BAW 提供了大量的 API,你可以根据需要集成外部系统或自定义服务,而无需重复实现复杂的功能。

3) 错误处理与日志
  • 进行 错误捕捉和日志记录,确保能够及时发现和排除代码中的问题。

  • 使用 调试模式 来逐步排查流程中的潜在问题。

4) 测试与验证

在开发过程中,定期运行测试,确保流程和脚本的正确性。使用 流程模拟单元测试 来验证代码的执行情况。

4. 总结

BAW 的编程部分非常灵活,可以通过 REST APISOAP Web 服务Java 服务脚本编程(JavaScript、Jython)等方式进行深度定制。您可以通过编程来实现:

  • 外部系统的集成。

  • 自定义业务逻辑。

  • 动态决策和流程控制。

  • 任务分配、调度与定时操作。

通过这些编程功能,BAW 提供了强大的支持来实现复杂的业务流程自动化,帮助企业实现数字化转型,提高效率和灵活性。

三、API

IBM Business Automation Workflow (BAW) 中,REST API 是与系统外部或不同服务进行交互的核心技术之一。BAW 提供了多个不同类别的 REST API,其中 REST API 检测操作 REST API流程 API 是最常见的几种类型。以下是这些 API 的详细讲解。

1. REST API 检测(REST API Diagnostics)

REST API 检测 是用于检查和验证 BAW 系统中 REST API 是否能够正常工作的工具或功能。它有助于开发人员在实际开发或集成过程中,快速识别和解决 API 调用问题。

功能
  • API 测试:通过 REST API 检测,你可以测试 API 是否能够成功响应,确保系统与外部应用程序的通信正常。

  • 验证 API 端点:确保通过正确的 URL 请求访问 BAW 系统的 API。

  • 状态监控:查看 BAW 系统中的 REST API 服务的状态,确保其健康和可用。

应用场景
  • 在开发过程中,开发人员可以使用 REST API 检测 来验证 API 调用是否正常响应,帮助快速排除问题。

  • 在集成时,检测 API 是否返回预期的结果,检查请求与响应格式的正确性。

常见操作
  • 使用 Postman 等工具发送 API 请求并查看响应。

  • 访问 BAW 提供的 REST API 端点,如 /v1/workflow/tasks 来查看任务相关数据。

2. 操作 REST API(Operating REST APIs)

操作 REST API 允许你通过 HTTP 请求(如 GET、POST、PUT、DELETE 等)来与 IBM BAW 系统进行交互,执行常见的操作,例如获取流程实例、任务、表单数据,或者修改这些数据。操作 REST API 是 BAW 系统与外部应用或服务交互的主要方式。

功能
  • 获取流程实例:可以查询流程实例的状态、历史、属性等信息。

  • 任务操作:获取任务、更新任务状态、分配任务、完成任务等操作。

  • 用户管理:操作用户和组信息,获取用户的任务列表,查看任务分配情况。

  • 表单操作:处理流程中表单的数据,包括获取表单内容、更新表单字段、提交表单等。

常见操作
  1. 获取任务列表(GET)

    GET /v1/workflow/tasks
    
    • 获取系统中的所有任务,包括任务的当前状态、分配情况、优先级等信息。

  2. 获取特定任务详情(GET)

    GET /v1/workflow/tasks/{taskId}
    
    • 获取特定任务的详细信息,包含任务的输入、输出、当前状态、表单等内容。

  3. 创建流程实例(POST)

    POST /v1/workflow/processes
    
    • 创建新的流程实例,并传递必要的参数和数据。

  4. 更新任务状态(PUT)

    PUT /v1/workflow/tasks/{taskId}/status
    
    • 更新指定任务的状态,如将任务标记为完成、暂停、转交等。

  5. 提交表单(POST)

    POST /v1/workflow/forms/{formId}/submit
    
    • 提交表单数据,用于流程中的任务。

常见的 REST API 请求类型
  • GET:用于获取数据,如获取流程实例、任务、表单等。

  • POST:用于创建新数据,如启动流程、创建任务等。

  • PUT:用于更新数据,如更新任务状态、修改表单字段值等。

  • DELETE:用于删除数据,如删除任务、取消流程实例等。

3. 流程 API(Process APIs)

流程 API 是 BAW 中特定于流程管理的 API,旨在处理与流程实例、流程活动、任务和决策等相关的操作。这些 API 是用来控制和操作流程的核心接口。流程 API 能够让你从外部应用中启动流程、获取流程实例信息、获取任务等,帮助集成和自动化业务流程。

功能
  • 启动流程实例:允许外部系统启动一个新的流程实例,并传递必要的参数。

  • 管理流程实例:查询流程实例的状态、获取任务、更新流程的状态等。

  • 执行任务:通过 API 执行任务操作,如任务的分配、完成、暂停等。

  • 获取流程历史:查询特定流程实例的历史记录,例如流程的状态变化、任务完成情况等。

  • 流程事件触发:根据事件触发特定的操作,例如启动子流程、触发提醒等。

常见操作
  1. 启动流程实例(POST)

    POST /v1/workflow/processes
    
    • 用于启动一个新的流程实例。你可以通过 POST 请求来创建并启动流程实例,并传递必要的输入数据。

    示例:

    {"processId": "myProcess","variables": {"orderAmount": 5000,"customerId": 1234}
    }
    
  2. 查询流程实例(GET)

    GET /v1/workflow/processes/{processInstanceId}
    
    • 获取特定流程实例的详细信息,包括其当前状态、执行历史、任务状态等。

  3. 获取流程任务(GET)

    GET /v1/workflow/tasks/{taskId}
    
    • 获取指定任务的详细信息,任务的输入数据、表单内容、分配用户等。

  4. 更新流程变量(PUT)

    PUT /v1/workflow/processes/{processInstanceId}/variables
    
    • 更新流程实例的变量值。可以在流程的任意阶段更新流程变量,进而影响流程的执行路径或业务逻辑。

  5. 获取流程历史(GET)

    GET /v1/workflow/processes/{processInstanceId}/history
    
    • 获取流程实例的执行历史,包括任务完成时间、状态变更、流程进度等。

流程 API 的应用场景
  • 流程启动:当一个外部系统需要启动一个新的工作流时,可以通过 流程 API 启动一个新的流程实例。

  • 任务操作:当需要从外部应用中处理任务(如分配、完成、暂停等),可以调用相应的 API 来控制任务。

  • 流程监控:通过 流程 API 监控和查询流程的执行状态,确保流程的每个环节都正常运作。

  • 自动化操作:在某些自动化场景中,可以通过 流程 API 自动更新流程变量、触发任务、以及根据需要触发不同的决策。

总结:REST API 检测、操作 REST API 和 流程 API 的区别

特性REST API 检测操作 REST API流程 API
用途检查和验证 BAW 系统中 REST API 是否正常工作与 BAW 系统交互执行常规任务操作管理和控制流程实例,任务和流程历史等
功能测试 API 端点、验证响应、检查系统健康状态获取流程实例、任务操作、表单提交等启动流程实例、更新流程变量、获取流程历史
典型操作测试 REST API 是否正常响应查询任务、流程实例,更新任务、提交表单启动流程、获取任务、更新流程变量、查看流程历史
主要应用场景开发阶段的 API 调试和检测与 BAW 系统进行集成,执行常规操作流程管理、任务操作、决策和自动化任务控制

通过这些 REST API,开发人员能够在 IBM BAW 平台上实现高效的业务流程自动化和外部系统集成。

结语:到这里为止,关于IBM BAW的整体功能、框架已经介绍完毕。再次重申,如果您要具体的流程开发实例,请到第一讲中的地址下载虚拟机,里面有详细的实例教程。 

相关文章:

  • 大语言模型RLHF训练框架全景解析:OpenRLHF、verl、LLaMA-Factory与SWIFT深度对比
  • 网络层试题
  • CD3MN 双相钢 2205 材质保温 V 型球阀:恒温工况下复杂介质控制的高性能之选-耀圣
  • 大模型分布式光伏功率预测实现详解
  • Qt进阶开发:QTcpSocket的详解
  • Three.js模型材质调整与性能优化实战
  • 通义灵码2.5版本全新体验
  • 使用交互式半自动化标注工具制作语义分割数据集
  • Java Spring 事件驱动机制
  • KT148A语音芯片发码很难播放_将4脚对地一下再发正常,什么原因?
  • git Authentication failed for 的解决办法
  • vim,gcc/g++,makefile,cmake
  • 适应性神经树:当深度学习遇上决策树的“生长法则”
  • VSCode中Node.js 使用教程
  • 深度学习计算
  • IP代理池环境配置
  • React面试常问问题详解
  • 《ffplay 读线程与解码线程分析:从初始化到 seek 操作,对比视频与音频解码的差异》
  • ElasticSearch父子关系数据建模
  • 多线程代码案例-1 单例模式
  • 陈吉宁龚正黄莉新胡文容等在警示教育基地参观学习,出席深入贯彻中央八项规定精神学习教育交流会
  • 陕西宁强县委书记李宽任汉中市副市长
  • 车载抬头显示爆发在即?业内:凭借市场和产业链优势,国内供应商实现反超
  • “异常”只停留在医院里,用艺术为“泡泡宝贝”加油
  • 广东早熟荔枝“抢滩”上海,向长三角消费者喊话:包甜,管够
  • 今天北京白天气温超30℃,晚间为何下冰雹?