[爱偷懒的程序员系列]-Section 2. 从改变钉钉审批开始

本文针对钉钉审批流程中常见的填写错误问题,提出了一种预审批机制,通过逻辑性审批和模版验证等手段减少审批过程中的错误和重复工作。

公司最早的钉钉流程的表单设定,流程设定因为最早是由IT部门进行的创建。我们经常会遇到的一个问题是,有的申请人在流程审批表单当中填写错误或者审批人发现申请人填写错误后。其往往不会从自己身上找填写的原因,往往会直接把问题提交到IT部门。而IT部门的同事往往会根据用户的描述,在钉钉后台当中去检查填写的内容是否正确,并再给双方进行反馈。
这里,整理了几个常见的问题。
• “为什么表单填写的内容都不正确就提交了呢?”
• “为什们审批人没有通过我的申请呢?是我的模版表格使用的不正确么?(通常经过我们检查后发现确实有模版乱使用的情况)?正确的模版是哪一个呀?”
• “我用的模版是XXX提供给我的,我不知道是错误的?”
• “为什么之前的审批人都没有发现问题?”
由于这样的问题层出不穷,并且随着业务不断的扩展,不同的表单陆续被上线,这类似的问题越来越多。IT部门的大部分时间被占用在“来找茬”方面。
面对这个问题,冷静下来分析,造成这种情况无非是在整体流程中有太多的“人”这样的变量加入到了流程当中。而人的因素也是不稳定的,所以,有没有什么办法能够彻底解决这个问题呢?
按图索骥,我们对这种情况再次进行了分析,发现只要解决下面的问题基本就能把这个issues解决掉。

  1. 如果流程填写的问题,尽量在审批人之前进行告知和反馈是最好的。因为申请人自己填写错误的话,他是愿意进行修改,且不被审批人知道是最好的。
  2. 针对通用附件模版的版本管理,这个在很多公司不太好处理。从最初版本的模版被不同的人填写后,按照国内用户的习惯。要找模版大概率是去问同事,而不是去标准模版库下载最新模版。提供一个模版内容检测的功能,且能和申请人进行交互。
  3. 在流程当中,审批人的在业务核心上进行审批的大概率是“这个申请要不要通过,是否符合业务逻辑”(概念性审批),而申请表单上的标准一定都会有一个固定的逻辑标准来进行验证(逻辑性审批)。那我们可以帮审批人进行逻辑标准审批,审批人仅进行概念性审批。通俗的讲就是我们通过一种方式将需要套逻辑公式的逻辑性审批进行一次,并将审批结果呈现给审批人。由审批人根据这个参考再进行概念性审批。
    改进之前,一个标准的常见流程如下:

大部分的流程通常会在一级审批人处陷入流程死循环,即,一级审批人作为审批流程的开始,通常会负责源头把关的作用。如果发现填写错误,往往都是直接附上简单的驳回原因后就对流程进行打回。而申请人有时候根本无法理解具体哪里错了。所以在这个阶段往往会重复很多次。
结合在之前我们想到的解决方案,我们对流程图进行小小的改进。

在改进流程当中,我们套入了1个预审批节点,并让预审批节点去载入3个广义范围的判断条件集和。

  1. 是否满足逻辑性审批条件
  2. 是否满足标准模版性条件
  3. 预警提示映射条件
    其中,是否满足逻辑性审批条件是指:
    在表单当中,必要的必须遵照逻辑规则的条件,可以是与其他业务系统进行数据关联后的逻辑验证。如,是否超出信用值申请;所填写的地址是否能够被其他系统解析(如填写的客户名称是否是收录在库的)。这类条件有明确的YES/NO标准,通过这类条件,如果申请人填写的是有错误,则能够直接明确的告诉申请人具体的错误信息。(如客户并不在客户池当中)
    是否满足标准模版性条件是指:
    若流程涉及到复杂的EXCEL附件表单,表单的sheet是否完整;sheet当中的列有没有被改变(通常列数和列的名字被改动后均认为该模版已经被篡改);每行当中需要填写如数字的地方是否填写成了字符。(如某些列必须填写成X位的编码)
    若该条件发生拒绝,机器人也能直接在驳回附言当中明确告诉申请人具体哪一行填写错误,若附件模版使用错误,应该在哪里去获取最新的模版。
    预警提示条件是指:
    若满足了这类条件,不一定需要驳回请求,但是需要让后续审批人知晓该情况。 如以品牌方的发样申请当中,一个EXCEL附件当中可能会包含上百个地址。某些地址是无法发快递的,审批人也不可能对这么多地址进行检查。所以我的预警条件将会根据不发快递的条件去遍历每一行,并在通过附言当中提示“该请求总共XXX个地址,其中风险地址XXX个”。再或者需要给审批人提示申请人自身或该部门已经在特定时间周期内,申请了多少次。
    回头一看,上面的设计应该可以支撑困扰我们多时是问题。下一步就是需要如何去完成这件看起来“有点自动”的事情了。
<think> 我们正在讨论的是H5+ App(HTML5 Plus App)中如何导入第三方JAR包(如jackson-core-2.13.0.jar)的问题。H5+ App通常使用HTML、CSS、JavaScript等前端技术开发,但通过原生引擎(如DCloud的5+引擎)可以调用原生能力。然而,直接导入JAR包通常用于原生开发(如Android),在H5+ App中,我们通常通过以下方式处理: 1. 如果是在前端JavaScript环境中使用,我们不能直接导入JAR包,因为JAR是Java的库,而前端运行的是JavaScript引擎。因此,我们需要通过原生插件的方式,将JAR包的功能封装成原生模块(如Android的Module),然后通过5+引擎的桥接机制(如JSBridge)让前端调用。 2. 另一种情况是,如果我们的H5+ App包含原生部分(例如使用DCloud的Native.js),那么我们可以编写原生代码(Android或iOS)来使用这个JAR包,然后通过Native.js调用。 但是,根据用户的问题,他可能是在H5+ App的前端部分使用,但Jackson是一个Java库,所以不能直接在前端使用。因此,我们需要明确: 用户的需求可能是:在H5+ App中调用Jackson库的功能(如JSON解析)?如果是这样,我们通常不需要导入JAR包到前端,因为前端有原生的JSON对象(内置在JavaScript中)可以处理JSON。如果用户有特殊需求(比如需要Jackson的某些高级特性),那么可能需要通过服务端(将JSON处理放在服务端)或者通过原生插件来实现。 然而,用户明确要求导入jackson-core-2.13.0.jar,这通常意味着他需要在原生Android部分使用这个库。 因此,我们假设用户是在开发一个Android原生插件(用于H5+ App)时需要使用这个JAR包。那么,我们需要提供在Android原生插件中引入JAR包的方法。 对于Android原生插件开发,我们可以使用以下方法引入JAR包: 方法1:手动导入(将JAR包放入libs目录,然后在build.gradle中配置) 方法2:使用Maven或Gradle自动下载依赖(推荐) 由于H5+ App的原生插件开发实际上是Android开发,所以我们可以按照Android的标准方式引入依赖。 具体步骤: 1. 在原生插件的Android项目中的libs目录下放入jackson-core-2.13.0.jar(如果没有则创建libs目录)。 2. 在该Module的build.gradle文件中添加依赖: dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) // 或者单独指定 implementation files('libs/jackson-core-2.13.0.jar') } 3. 或者,使用Maven仓库(推荐): dependencies { implementation 'com.fasterxml.jackson.core:jackson-core:2.13.0' } 注意:使用Maven仓库需要确保在项目的build.gradle中配置了mavenCentral()或jcenter()仓库。 4. 然后,在原生插件代码中就可以使用Jackson库了。 但是,如果用户不是在开发原生插件,而是希望在前端JavaScript中使用Jackson,那么这是不可能的。我们需要提醒用户:Jackson是一个Java库,不能在前端JavaScript中直接使用。前端处理JSON可以直接使用JSON.parse和JSON.stringify。 因此,我们需要根据用户的实际需求来给出建议: 情况一:用户需要在原生插件中使用Jackson(例如,在Android原生代码中处理JSON) - 按照上述方法将jar包导入到原生插件的Android项目中,或者使用Gradle依赖。 情况二:用户需要在前端使用Jackson的功能 - 解释无法直接使用,建议使用JavaScript内置的JSON对象,或者寻找类似功能的JavaScript库(如`jackson-js`,但注意这不是官方的)。 由于问题中明确提到“h5+ app导入jackson-core-2.13.0.jar”,我们倾向于认为用户需要的是原生插件中的集成方法。 因此,我们将重点放在原生插件中如何导入JAR包。 步骤详细说明(针对Android原生插件开发): 1. 创建或打开原生插件的Android项目(通常是一个Android Library Module)。 2. 将下载的jackson-core-2.13.0.jar文件复制到该Module的libs目录下(如果没有,则在Module根目录下创建libs文件夹)。 3. 在Module的build.gradle文件中,确保有以下配置: // 在dependencies块中添加 dependencies { implementation files('libs/jackson-core-2.13.0.jar') // 或者使用以下方式引入libs目录下所有jar // implementation fileTree(dir: 'libs', include: ['*.jar']) } 4. 重新构建项目(在Android Studio中点击Sync Now)。 5. 然后就可以在原生代码中使用了,例如: import com.fasterxml.jackson.core.JsonFactory; // 其他Jackson的类... 6. 如果使用Gradle的Maven依赖(推荐,因为可以自动处理传递依赖和版本管理),则在build.gradle中添加: dependencies { implementation 'com.fasterxml.jackson.core:jackson-core:2.13.0' } 同时,确保在项目根目录的build.gradle中配置了仓库: allprojects { repositories { google() jcenter() // 或者 mavenCentral() } } 7. 注意:如果开发的是5+原生插件,还需要将插件打包成jar或aar,并按照5+原生插件规范进行封装,以便H5+ App调用。 另外,如果用户使用的是HBuilderX开发H5+ App,并且需要自定义原生插件,可以参考DCloud官方文档关于原生插件的开发部分。 总结:在H5+ App中,前端部分无法直接使用JAR包,需要通过原生插件的方式将JAR包的功能封装成原生模块,然后通过JSBridge调用。因此,导入JAR包实际上是在原生插件开发环节进行的。 如果用户没有开发原生插件的经验,可能需要先了解DCloud的5+原生插件开发文档。 根据引用[1]中提到的依赖管理方式,我们推荐使用Gradle的Maven依赖,这样更便于版本管理和解决依赖冲突。 因此,我们给出以下步骤: **在Android原生插件中通过Gradle引入jackson-core-2.13.0.jar** 步骤1:在原生插件Module的build.gradle文件中,添加Maven仓库依赖(如果还没有的话) repositories { mavenCentral() // 或者jcenter() } 步骤2:在dependencies中添加 dependencies { implementation 'com.fasterxml.jackson.core:jackson-core:2.13.0' } 步骤3:同步项目,然后就可以在原生代码中使用Jackson了。 步骤4:编写原生代码,将Jackson的功能封装成原生插件方法,然后通过5+引擎的JSBridge暴露给前端。 步骤5:将原生插件打包,并在H5+ App中引用该插件。 注意:如果用户不需要使用原生插件,而只是需要处理JSON,那么建议在前端直接使用JavaScript的JSON对象。 由于问题中没有提供更多上下文,我们只能给出这样的解答。 相关问题: 1. 如何开发一个5+原生插件? 2. 在H5+ App中如何调用原生插件? 3. 如果在前端处理JSON数据? 4. 使用Jackson库和JavaScript内置JSON库有什么区别? 根据用户的问题,我们主要回答导入JAR包的方法,即上述原生插件中的集成方法。 但是,我们也要提醒用户:如果仅仅是为了处理JSON,前端无需使用Jackson,因为JavaScript内置的JSON对象已经足够强大。 最后,如果用户确实需要在原生插件中使用Jackson,那么按照上述Gradle方式引入是最佳实践。 </think>### H5+ App 导入 Jackson-core-2.13.0.jar 的方法 在 H5+ App 中导入第三方 JAR 包需要结合原生开发环境进行配置,以下是具体操作步骤: #### 方法一:手动导入(Android 平台) 1. **下载 JAR 文件** 从 [Maven 仓库](https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core/2.13.0) 下载 `jackson-core-2.13.0.jar` 2. **导入到 Android 项目** 将 JAR 文件复制到 Android 模块的 `libs` 目录: ``` your-project/ ├── assets/ ├── libs/ │ └── jackson-core-2.13.0.jar // 粘贴到此 └── src/ ``` 3. **修改 build.gradle** 在模块的 `build.gradle` 中添加依赖: ```groovy dependencies { implementation files('libs/jackson-core-2.13.0.jar') } ``` 4. **同步项目** 在 Android Studio 中点击 **Sync Now** 使配置生效 #### 方法二:Gradle 依赖(推荐) 1. **修改 build.gradle** 在模块的 `build.gradle` 中添加: ```groovy dependencies { implementation 'com.fasterxml.jackson.core:jackson-core:2.13.0' } ``` 2. **配置仓库** 确保根目录的 `build.gradle` 包含 Maven 仓库: ```groovy allprojects { repositories { google() mavenCentral() // 必需项 } } ``` #### 方法三:通过原生插件封装 若需在前端调用 Jackson 功能: 1. **创建原生插件** 编写 Android 模块处理 JSON 逻辑: ```java // JacksonPlugin.java import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.dcloud.common.DHInterface.IWebview; import io.dcloud.feature.internal.sdk.SDK; public class JacksonPlugin { public static String parseJson(String jsonStr) { ObjectMapper mapper = new ObjectMapper(); try { return mapper.readTree(jsonStr).toString(); } catch (JsonProcessingException e) { return "{\"error\":\"解析失败\"}"; } } } ``` 2. **JS 桥接调用** 前端通过 `plus.android` 调用: ```javascript const result = plus.android.invokeStaticMethod( "com.example.JacksonPlugin", "parseJson", '{"name":"test"}' ); console.log("JSON解析结果:", result); ``` #### 注意事项 1. **版本冲突** 若同时使用其他 Jackson 组件(如 `jackson-databind`),需保持版本一致: ```groovy implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.0' ``` 2. **混淆规则** 在 `proguard-rules.pro` 中添加: ``` -keep class com.fasterxml.jackson.** { *; } ``` 3. **H5+ 限制** 直接在前端 JS 中无法调用 JAR 包,必须通过原生插件桥接实现[^1]。 > **最佳实践建议**:优先使用 Gradle 依赖(方法二),可自动解决传递依赖问题。若需热更新能力,需将 JSON 处理逻辑放在服务端,通过 API 调用(参考引用[2]的 HTTP 请求模式)[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炒陈饭老司机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值