零代码新思路,基于LogicFlow的页面逻辑编排

news2025/1/17 18:00:30

在滴滴客服业务里,通过零代码的方式来配置页面已有丰富的落地经验,大大提高了服务用户的效率和质量。但是传统零代码在页面逻辑配置上表现并不好,很难做到灵活扩展。因此,滴滴客服技术团队探索出一种新思路,用流程编排的方式来编排页面的逻辑,解决零代码的难扩展问题。本文将从复杂交互的难配置困境入手,介绍解决思路和方案,并详细展开如何利用客服技术团队已开源的流程图编辑框架LogicFlow,实现与研发过程中开发、运行、调试三个阶段相对应的编排器、执行器、调试器。

背景

客服业务是链接用户与公司各事业部的桥梁,为了快速响应事业部业务迭代、持续改进给到用户的服务体验,技术团队需要把客服业务中的多个系统建设成运营人员可配置,才能保障整个客服团队有很高的效率。

那么,要达成运营人员可配,零代码平台的拖拉拽式交互非常适用。运营所见即所得,客服业务中也有非常多的可落地场景,现在有多个系统已经做到可以让运营团队通过发布配置即可改变线上逻辑,给用户提供更便捷的智能客服,或者让人工客服按照运营人员制定的流程来解决、记录用户问题。

目前,滴滴客服内的多个系统在4年内已经配置超过12900个PC端页面和7900个H5页面,在整个服务链路中,通过多种方式,来解决用户的问题。

困境:零代码的不足

虽然滴滴客服内部的平台目前已经利用零代码配置了很多的页面,但随着业务的发展,我们感受到零代码的不足。假设有个表格修改操作需求,需要在点击表格某一列的修改时,先请求接口判断用户的权限,然后根据返回的权限,显示不同的编辑弹窗。如下表格修改示意图:

1244458d083bd32bc1ba2ec69b485d63.gif

面对这种情况,如果使用以前的零代码方案,需要在表格组件的属性面板中增加请求和弹框相关的逻辑。这种在组件属性面板增加功能的迭代方式只会导致配置内容膨胀、配置难度增加、开发成本提高,最后反而不如写代码方便。

由于零代码配置页面在客服内部广泛应用,客服技术团队也期望找到一种更好的方式来解决零代码中无法灵活控制页面逻辑和复杂交互的问题,让不会编程的同学也能做出复杂交互的页面。

思路:页面逻辑编排

对于前面提到的表格编辑需求,如果通过写 JS 代码的方式实现,一般都是监听事件 -> 收集数据 -> 发起请求 -> 判断返回结果 -> 修改页面组件内容。那么我们是否可以将写代码的过程抽象为一个个简单的逻辑,然后利用流程串联起来,达到同样的效果?

利用这个思路,将前面的需求拆分为“表格触发编辑事件”、“请求获取权限”、“显示普通管理员编辑弹框”、“显示高级管理员弹框”这4个简单逻辑,然后在流程图上画出来,如下示意图:

a20b355fae80e826cca3019ab250027a.gif

上图为我们内部的零代码配置页面的系统配置一个基础表格的截图。其中左侧和大多数零代码平台一样,通过拖拽配置的页面。而右侧就是通过流程配置的方式,实现页面内复杂逻辑的串联。

采用流程编排页面逻辑这种方式,我们可以通过自由组合节点实现页面逻辑的灵活配置。例如当请求接口返回比较慢时,在请求节点之前增加表格 loading 节点。

bc2db066adb730c3853cc32205897f2a.png

也可以通过组合来实现组件显隐,例如当单选框A选择a1时,显示组件B,隐藏组件C;当单选框A选择a2时,显示组件C,隐藏组件B。就可以拆分为“单选框值改变事件”、“显示组件B”、“显示组件C”、“隐藏组件B”、“隐藏组件C”5个节点,然后都在连线上分别增加条件“选框A选择a1”和“单选框A选择a2”

81ff476a8e037d0c3a416538e1be91c5.png

通过上面的介绍可以看到,将复杂交互中每个组件的变化都抽象为一个单元逻辑,然后在流程图中用节点的编排体现,可以更好的解决零代码中难扩展的问题。接下来我们将给大家介绍页面逻辑编排的核心能力,并演示如何进行页面逻辑编排的开发、运行和调试。

方案:页面逻辑编排的三大核心能力

为了让流程编排替代写代码,我们实现了与研发过程相对应的编排器、执行器和调试器,以便进行开发、运行和调试。

227fa8828daacb9c2057a505a83f0a3f.png

由于整个过程都是围绕着流程图来实现,对于流程图的功能有很多特殊的要求。正好我们团队在流程图编辑上有很多沉淀,并且开源了流程图编辑框架 LogicFlow,借助 LogicFlow 强大的自定义能力,我们可以快速的实现页面逻辑编排中各种核心能力。

LogicFlow 整体架构图如下,核心包 @logicflow/core 提供了流程图编辑器基础的能力,右边的 @logicflow/extension 是基于 @logicflow/core 的拓展性开发的插件。

34d1e9186d47b25b1d6098981925dc6a.jpeg

编排器

在传统的开发模式,开发的产物是 JS 代码,现在改用流程编排来作为可视化开发,开发产物就变成描述流程图的 JSON 数据。由于流程图主要是通过节点和连线组成,所以在编排器中也是通过自定义节点和边来实现页面逻辑编排功能。

自定义节点

在编排器的流程图上,支持配置多种类型的节点,包括事件节点、数据节点、行为节点、跳转节点等。每一个节点代表着一个最基础的页面逻辑单元,例如:

  • 事件节点可以看做 JS 事件监听。

  • 数据节点可以看做 ajax 请求。

  • 行为节点可以看做修改页面组件属性。

  • 跳转节点可以看做浏览器的跳转新页面。

32be078126a4db571a2a81f26d32e42d.png

对于不同功能的节点,都可以使用 LogicFlow 的自定义 html 节点实现所需的效果。在编排器中,需要高亮、悬浮按钮、hover 提示等小组件来提供丝滑的“开发”体验,利用 LogicFlow 的自定义 html 节点就可以完美支持。

f12f1dc8e38b0bd472bf945438ba3986.gif

在自定义 html 节点时,可以通过重写 html 节点的 setHtml 方法,通过挂载 vue 或者 react 组件的方式,实现自定义 html 内容。代码示例如下:

87f2d69ef5f11673b4080c95a98720c8.png

节点的具体内容在 vue 中写,写法也不变,还可以直接用 UI 组件库,示例代码如下:

afae34c2c70f02bdeda3bbed3b9bc104.png

自定义连线

在编排器中,连线控制着节点的执行顺序,默认情况下连线表示上一个节点执行完成后,继续执行下一个节点。可以通过在连线上配置条件,中断流程的执行,实现类似 JS 代码中的逻辑判断功能。

188b8e37d5a07a4a3f0f151b4d3827ea.png

如何实现在连线上显示条件小图标?

使用 LogicFlow 在编排器实现连线会稍微复杂一点,由于连线不需要显示文字,而是用一个带有 popover 功能的图标代替。所以需要利用 LogicFlow 的自定义连线机制,重写默认文本逻辑,将文本替换为图标。

01eb83c9fe0daa92c00db77f0164ed5f.png

默认情况下,LogicFlow 的文本是 svg 元素,所以当我们需要在这上面提供更多的 html 内容是,可以利用 LogicFlow 的基于继承重写的自定义机制,重新实现文本。上面的代码示例就是通过重写 getText 方法,利用在 svg 中插入 foreignObject 的方式,实现 svg 内部嵌套 html 内容。

执行器

页面逻辑编排功能是基于配置流程图实现的,要让流程图按照编排的逻辑运行,最常见的方法是使用流程引擎。但是,市面上的流程引擎大多运行在服务端,如 activiti、flowable、Turbo 等,不适合在浏览器环境的逻辑执行。因此,我们选择实现一款在 JS 环境能运行的流程引擎 LogicFlow Engine,然后在这个流程引擎的基础上实现执行器

469c20ca695b9b60a19e146716041cf2.png

下面我们一起来看 LogicFlow Engine 能力是如何支持执行器功能。

能力一:支持多种类型节点

执行器拥有事件节点、行为节点、数据节点、转换节点、页面跳转节点等节点,每一个节点都有独特的功能。

c01b667f213ec732f8e8cb78a5bc7b7b.png

LogicFlow Engine 虽然只内置开始节点和任务节点,但在使用时可以继承这些节点实现定制的业务逻辑。以实现执行器请求数据节点为例,通过重写任务节点的 action 方法,在方法内容实现请求数据的逻辑即可。

b1fb2cb4c19647be21f1c103b2238105.png

能力二:支持并发执行

在编排逻辑时,常常会出现一个事件后要同时做多个事情的情况。例如当点击一个按钮后,既需要发起请求然后更新数据,又需要更新页面的某个文案。采用分支这种配置方式更符合大多数人的“直觉”,那么执行器就需要支持这种“并发”执行。

f77449e8905fe8008fe21ff758c967ac.png

这个功能要求 LogicFlow Engine 默认为并行网关,当一个节点执行完成后,会以非阻塞的方式执行后面的所有节点,例如上图执行顺序为:搜索点击->请求数据和更新文案->更新数据。

93a27200ac7c36f1226b5357774e72c1.png

上面的代码是 LogicFlow Engine 内部默认支持并行网关的逻辑,如果想要实现排他网关,可以重写节点的 getOutgoing 方法即可。

能力三:支持多个开始节点

大多数情况下,一个页面会存在多个可以绑定事件的组件。所以在逻辑编排时,一个流程图上也会有多个事件节点。在执行器中事件节点是流程开始执行的起点,这就要求 LogicFlow Engine支持一个流程图存在多个开始节点。

2fb8c816d1a0857c3b3576bdfe129412.png

LogicFlow Engine 不止支持一个流程存在多个开始节点,还支持指定从流程中任意节点开始执行和从已执行的节点重新执行。例如在执行器中,当页面某个组件触发事件后,执行器会找到这个组件对应的节点,然后从这个节点开始执行。

1bb071eb8ac923fe8837f1ce2a5adbf3.png

能力四:流程重复执行

在表单里面经常会遇到选择不同的内容,显示不同组件的需求。例如单选框A选择 a1 时,设置组件B显示、组件C隐藏; 当选择单选框A的 a2 时,设置组件C显示、组件B隐藏。

0e869b830959452de5ef0814a5ba3058.png

为了满足用户不停的切换单选框选项,需要流程引擎能反复执行。

741436b63a42657dcfd59c524aff897d.gif

LogicFlow Engine 支持同一个流程实例,调用多次执行。

d15566f12e9c6af30dd60ef445c1f05a.png

调试器

利用编排器和执行器,实现了页面逻辑的可视化编排与执行。但是,即使可视化“开发”降低了“代码”的难度,我们也难免会遇到错误。因此,我们还提供了“调试”功能,让我们在不修改代码的情况下直接运行和检查页面逻辑。

功能一:运行记录

每一个触发事件节点的操作都会生成一条运行记录,我们用流程图路径的方式显示运行记录,可以直观的看到每一次操作触发的流程节点。如下运行记录示意图:

183c3bf9af37468dc359752fe6fcfbf8.png

功能二:元素详情

可以通过点击运行记录中执行的节点,查看节点的运行时内容,包括元素数据、错误的原因等。如下元素详情示意图:

abb7bbb00186eb38a78e7d9f9428df8e.png

功能三:页面数据

当前运行环境下全局的数据,全局数据既包含当前页面运行是产生的动态数据(例如 API 请求返回的数据,组件的值等)也包含页面初始化时传入的数据(宿主系统传入的数据、URL 数据等)。通过页面数据,可能协助配置人员排查页面错误的原因。

总结

通过以上方式来实现页面逻辑的编排与执行,很大程度解决了传统零代码技术的难扩展问题,并且在这个架构设计之上,还可以继续封装一个更简易的编排器,让没那么复杂的运营场景既保障了可扩展性,还能降低系统本身的维护成本。

当然在零代码领域还有很多其它的难题需要解决,例如数据源、复杂的算法、数据转换等,在我们内部的零代码平台中都有很多不错的实践,也在基于实际使用不断的打磨和完善,争取在合适的时机将整个零代码平台开源出来,这里就不继续介绍了。

另外,我们已经将 LogicFlow Engine 作为 LogicFlow 的一个模块开源到官方代码仓库上,等不及的小伙伴可以尝试用它来实现自己的页面逻辑编排与执行。有任何使用上的问题都可以通过issue 反馈给我们,LogicFlow Engine 可以应用的场景远不止页面逻辑执行。同时也欢迎大家通过 LogicFlow 官方代码仓库给我们提 issue 和 PR。

也可添加LogicFlow官方微信号:logic-flow,该号会邀请你进微信用户群;或者扫描下方二维码进入LogicFlow的QQ用户群。

9e49a9243728098222a397b98091932e.png

E

N

D

招聘信息

团队前端、后端需求招聘中,欢迎有兴趣的小伙伴加入,可以扫描下方二维码简历直投,也可添加LogicFlow官方微信号:logic-flow,了解更多招聘细节。

前端工程师

岗位描述:

  • 打磨C端产品(如客服中心、聊天IM、智能机器人等),为用户带来良好的客户服务体验;

  • 构建B端系统(如客服工作台、可视化流程平台等),保障坐席工作效率、降低业务迭代成本、提高运营能力;

  • 搭建体验相关系统,赋能业务为滴滴的所有用户提供能找到、能解决、感受好的服务;

  • 参与可视化技术开源和迭代,对外输出技术影响力。

580e1a9b2d5fe006f7a00417faa8bc15.png

后端工程师

岗位描述:

  • 参与流程引擎、API资源引擎、表单引擎等低代码能力底层核心引擎生态的设计与开发;

  • 参与打造高稳定性、线上化、自助化的客服工作台、开放平台的设计与开发;

  • 有机会以核心贡献者的身份参与到开源社区,持续建设上述开源引擎生态系统;

  • 有能力、信心、机会建设行业一流的客户服务体系。

1e9b32b82e790f1d670a6d9d8f578977.png

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20W IP网络吸顶喇叭 POE供电吸顶喇叭

SV-29852T 20W IP网络吸顶喇叭产品简介 产品用途: ◆室内豪华型吸顶喇叭一体化网络音频解码扬声器,用于广播分区音频解码、声音还原作用 ◆应用场地如火车站、地铁、教堂、工厂、仓库、公园停车场等;室内使用效果均佳。 产品特点&#xff…

多传感器外参标定

文章目录 lidar和imu标定code: [https://gitcode.net/weixin_42990464/calib_lidar_imu](https://gitcode.net/weixin_42990464/calib_lidar_imu)code: [https://github.com/APRIL-ZJU/lidar_IMU_calib](https://github.com/APRIL-ZJU/lidar_IMU_calib) lidar和imu标定 code: …

WORD如何调整表格的宽度

目录 1. 调整表格宽度 1. 调整表格宽度 如下图,要求将文档中的表格宽度调整到2厘米。 点击选中要调整的表格,依次点击【布局】-【属性】选项。 如下图,通过上一个步骤的操作,系统弹出表格属性对话框。 在弹出的【表格属性】对话框…

尚硅谷MySQL笔记 3-9

我不会记录的特别详细 大体框架 基本的Select语句运算符排序与分页多表查询单行函数聚合函数子查询 第三章 基本的SELECT语句 SQL分类 这个分类有很多种,大致了解下即可 DDL(Data Definition Languages、数据定义语言),定义了…

DRF的限流组件(源码分析)

限流,限制用户访问频率,例如:用户1分钟最多访问100次 或者 短信验证码一天每天可以发送50次, 防止盗刷。 对于匿名用户,使用用户IP作为唯一标识。对于登录用户,使用用户ID或名称作为唯一标识。 缓存{用户…

图文结合丨带你轻松玩转MySQL Shell for GreatSQL

一、引言 1.1 什么是MySQL Shell ? MySQL Shell 是 MySQL 的一个高级客户端和代码编辑器,是第二代 MySQL 客户端。第一代 MySQL 客户端即我们常用的 MySQL 。除了提供类似于 MySQL 的 SQL 功能外,MySQL Shell 还提供 JavaScript 和 Python 脚本功能&a…

免费开源服务器资源监控系统grafana+prometheus+node_exporter

有项目做测试的时候需要查询服务器资源利用情况,自己又没写相应的模块,此时就需要一套好用的资源监控系统,,咨询了运维人员给推荐了一套,装完后真的很好用。 就是grafanaprometheusnode_exporter(linux&am…

Python项目实战:将3D灰度图像转换为3D彩色图像

文章目录 (3D-GRAY) to (3D-RGB):使用颜色映射的方式,将灰度值映射到彩色空间中的特定颜色。一、多维数组:10x12x14(1)channel重复:在RGB中,将【灰度图】分别赋值给【R/G/B图】,显示…

NPM与外部服务的集成(下)

目录 1、撤消访问令牌 2、在CI/CD工作流中使用私有包 2.1 创建新的访问令牌 持续整合 持续部署 交互式工作流 CIDR白名单 2.2 将令牌设置为CI/CD服务器上的环境变量 2.3 创建并签入特定于项目的.npmrc文件 2.4 令牌安全 3、Docker和私有模块 3.1 背景:运…

类加载器与反射

类加载器,反射 1.类加载器 1.1类加载器【理解】 作用 负责将.class文件(存储的物理文件)加载在到内存中 1.2类加载的过程【理解】 类加载时机 创建类的实例(对象)调用类的类方法访问类或者接口的类变量&#xff0…

如何做好项目进度管理,项目经理可以这样做

项目追踪是通过把控项目的进度、成员的任务完成情况,以及项目计划进展等方面来进行的。项目经理在进行项目进度跟踪时,主要从以下三个方面进行: 1、制定并完善项目计划 项目经理使用进度猫等工具制定项目计划,通过甘特图对项目…

将Excel表格复制到Word文档中

目录 方式1:粘贴 -> 保留源格式(CtrlV的默认行为)参考文献 方式1:粘贴 -> 保留源格式(CtrlV的默认行为) 保留源格式是Word在粘贴来自其他程序内容时的默认行为(直接CtrlV)。如…

解决右键打印html只能识别1页的问题

hello,大家好久不见,昨天在开发中遇到了一个问题,就是在自己开发的网页中右键-->打印,由于页面内容过多,打印出来的内容只被识别到一页。 针对这一问题,查阅了好多资料最终解决啦。 1.问题重现 大家可以看到这个是我们开发的页面,公司需要…

.netcore grpc的proto文件字段详解

一、.proto文件字段概述 grpc的接口传输参数都是根据.proto文件约定的字段格式进行传输的grpc提供了多种类型字段;主要包括标量值类型(基础类型)、日期时间、可为null类型、字节、列表、字典、Any类型(任意类型)、One…

Python文件操作与输入输出:从基础到高级应用

文章目录 🍀引言🍀文件操作基础🍀上下文管理器与文件自动关闭🍀文件的迭代与逐行读取🍀文件的其他常见操作🍀输入输出基础🍀 文件输入输出🍀格式化输出🍀高级文件操作&am…

6---列表

一、有序列表 在文本前面添加数字英文句点(.)空格可以构成有序列表。如下表,最终生成的列表前面的编号和前面的数字没有绝对关系,总是从第一个数字开始依次增加。(和C的枚举有一点点类似) 注意:…

解决keep-alive缓存失效问题【必看!!!】

最近正在使用Vue3TsPinia重构后台管理项目&#xff0c;在写到路由缓存时&#xff0c;发现怎么都缓存不了&#xff0c;后来才找到了原因&#xff1a; Vue3中的setup语法糖中的name命名无效 即&#xff1a;如果你是按如下写组件的name&#xff0c;是不起作用的 <script nam…

ARM-M0内核MCU,内置24bit ADC,采样率4KSPS,传感器、电子秤、体脂秤专用,国产IC

ARM-M0内核MCU 内置24bit ADC &#xff0c;采样率4KSPS flash 64KB&#xff0c;SRAM 32KB 适用于传感器&#xff0c;电子秤&#xff0c;体脂秤等等

报名开启 | 2023RflySim暑期学校 : 基于RflySim平台飞控底层算法开发专题培训(第二期)

飞思实验室“基于RflySim平台飞控底层算法开发”系列专题培训第二期开启报名了&#xff01;专题培训由戴训华副教授以及飞思实验室学生&工程师团队主讲&#xff0c;采用“线上线下”集中授课形式&#xff0c;培训时间为8月28日-9月3日&#xff1b;课程内容以RflySim平台介绍…

vite+vue3初始化项目

node环境 14.18&#xff0c;16。最好是16 初始化项目 执行 npm create vuelatest 就是基于vite的命令&#xff0c;执行后会出现以下选择&#xff1a; 目录结构介绍 基本和vue2一个意思 vite.config.js文件如同vue2中的vue.config.js文件&#xff0c;用于配置项目的 安装…