PDF噩梦与工作流任务范围数据模式

2023-10-13 21:18

本文主要是介绍PDF噩梦与工作流任务范围数据模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PDF噩梦

在之前的一段时间里,只要一提起PDF,我就会头晕,然后是头疼,最后是头大,总之是和头相关。需求很简单:为所有报表提供在线生成PDF版本的功能,这样网站用户在浏览报表时就可以下载离线浏览。对不住了,开源软件,我不得不说,慎用开源软件,慎用!痛苦的查找论坛、痛苦的翻看源码,最后,在支付了200欧后,痛苦消失了,我们购买了商业软件,200欧兼容了更多的网页结构,200欧具有更快的速度,200欧带有一年的技术支持,最最重要的是,200欧,客户出的。

 

这不是这里的关键,问题是,200欧后,我遇上了新麻烦:报表的PDF版本样式不正确,不正确的原因是图片下方的文字将图片的排列样式弄乱了(图片大小不规则,字数不规则)。在网页中,DOM渲染完毕后,我们使用JavaScript来进行图片与文字高度的重计算,但在PDF中,我们束手无策。

 

我问BA,可以容忍部分图片排列不整齐否?不出所料。

 

怀有侥幸,我继续问BA,可以容忍部分文字丢失否?BA说,不可以。意料之中。于是找到徐昊。

 

徐昊问BA,这些说明文字对客户如此重要吗?

 

BA说,是的。

 

徐昊说,为什么?它主要有哪些内容?

 

BA说,有标题,简单说明以及图片的版权信息,最重要的就是版权信息,一定不能丢失。

 

徐昊说,能不能这么说,其实对客户最关心的是版权信息。

 

BA说,是的。

 

于是问题解决。解决方案是:我们给文字定高,同时将文字缩小以容纳最可能多的字数,这样网站用户在PDF里看到的图片重新恢复了整齐,尽管看不太清图片说明文字,但是用户真正关心的是图片,谁关心哪些无处不在的版权信息呢?你可能会说了,看不清版权信息怎么行?幸好,你问的不是,版权信息有那么重要吗。回答是,这里是PDF,移动你的鼠标到Zoom,点击下拉框,点击150%以上的选项,然后,你会惊讶的发现,那些该死的版权信息到处都是。

 

BA的职责是帮客户发现的问题,开发人员的职责是解决问题,QA的职责是校验最终的实现是否能够解决客户的问题。具体到一个用户故事上,就是BA编写用户故事,DEV编码开发,QA验收用户故事,这是三个任务,很明显,这三个任务有一个非常重要的共享信息,这个信息就是用户故事所要实现的客户价值(即帮客户解决的问题)。围绕着客户价值,每次迭代开始前,团队都会进行迭代计划会议,所有成员会跟随BA逐一审核各个用户故事;围绕着客户价值,开发人员开发中随时可以和BA进行沟通,就设计问题进行讨论;围绕着客户价值,开发人员每开发完成一个故事,BA、开发人员和QA就会在一起进行一个微型 ShowCase,在期间讨论用户故事的实现是否实现了客户价值,大家对用户故事的理解是否一致。

 

那么,在相关的任务之间需要能够定义变量,这些变量数据能够在这些任务间共享。

 

描述

一定的任务范围能够定义变量,在一个流程实例里,该范围所包含的任务实例能够使用该变量。

 

图 6-4任务范围级别的数据可见性

如图6-4所示,我们划定了一个任务范围,该范围包含了任务A、任务B和任务C,同时,我们在该任务范围内定义了一个变量M,那么,在一个流程实例里,只有任务A、B和C的实例在运行期能够使用该变量,任务D和E的实例都不能访问,不可见。

 

可以看到任务范围和块任务在概念上比较相似,都是包含一系列的子任务,它们之间的差别在于:块任务一般具有比较独立的执行上下文和业务语义,而任务范围则是对具有相同执行上下文的任务的一种分组。

 

在工作流系统里,对流程任务进行分组的好处在于:可以为特定的一组任务绑定数变量、异常处理器和补偿动作。例如在图6-4中,如果任务A、B和C中的任一实例执行失败,那么我们就认为整个任务区域执行失败,将统一执行一个业务补偿行为,同时,这些任务共享一个异常处理器。

 

实现

在jBPM4里,流程定义模型相比jBPM3最大的变化即是引入了任务嵌套的概念,一个任务能够包含多个其他任务,这里的父任务即可充当任务范围的定义。jBPM4针对这种嵌套的任务建立了一套处理机制,总的来说就是建立任务运行期的嵌套关系,查找变量时首先会在任务级别进行查找,如果找不到,则会依次向上查找父任务实例,直至流程实例级别变量,同时,父任务可以统一绑定异常处理器和事件动作。在后续jBPM4的章节,我们将会详细分析该机制的实现细节。

这篇关于PDF噩梦与工作流任务范围数据模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/205927

相关文章

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文