优维低代码实践:编排优化Plus

企业级低代码服务编排库 - Commander 服务编排是对基础的业务服务按照一定的业务规则进行逻辑组合,提供一个封装后的组合服务接口给前端的过程。 Commander 是一个Orchestration模式的服务编排框架库。 阅读详情

 优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。

优维低代码实践连载第⑤期

《编排优化Plus》

▽

在上一章节中,我们编排完成了任务列表的查询,以及新增任务实例这两功能,在本章节中,我们将对其进行功能的完善,包括:任务修改,任务删除,点击任务跳转至任务详情页面,搜索查询能力完善等,那么下面让我们开始学习吧!

一、任务修改

 

在上一章节的最后一点我们完成了任务实例的新增,接下来我们要用对任务进行修改,需要我们在编排开辟新的入口(Tabel增加操作列),并调用相关的Proivder接口进行修改,下面跟着我的编排快速过下吧~

Table属性参数修改

属性面板-属性:
# ...
  columns:
    - dataIndex: name
      key: name
      title: 任务名称
    - dataIndex: state
      key: state
      title: 状态
    - dataIndex: assignee
      key: assignee
      title: 负责人
    # 新增项
    - dataIndex: operator
      title: 操作
      key: operator
      # useChildren&useBrick用法,后续章节会展开讲解
      useChildren: '[operator]'
# ...

Table下新增构件并进行属性修改

将鼠标移入构件树上的Table构件,右侧将出现+图标, 点击图标添加构件, 将出现新增构件弹窗,参数如下:

# 父节点默认不可修改
父节点: Table
# 挂载点等于useChildren的值,useChildren的值需要大括号包裹
挂载点: [operator]
# 选择构件
构件: basic-bricks.general-button
示例(选择可快速创建构件): 随便选择一个

新增完构件后,我们需要对这个构件进行属性编辑

数据名称: isEdit
类型: Value
Value: false

然后对我们刚刚新增的构件进行属性编辑

属性面板-属性:
  buttonIcon:
    lib: easyops
    category: default
    icon: edit
    color: blue
  buttonType: text
  # 构件样式,设置为行内元素
  style:
    display: inline-block
事件面板-生命周期:
  general.button.click:
    # 将 CTX.isEdit 设置为true,涉及数据逻辑联动,下面会有说明
    - action: context.replace
      args:
        - isEdit
        - true
    # 设置表单的静态值
    - target: '#AddTaskForm'
      properties:
        staticValues:
          # 说明一下表达式含义:设置实例ID字段等于行数组的实例ID
          # DATA为特殊表达式,尽在useChildren或useBrick下面进行使用
          # 可以获取其父元素传递的值
          # 这里 DATA = { 
          #   rowData: { instanceId: 'xxx', name: 'xxx', ... },
          #   ...
          # }
          # 因此可以使用以下表达式获取该行的实例ID
          instanceId: <% DATA.rowData.instanceId %>
    - target: '#AddTaskForm'
      method: setInitValue
      args:
        # 设置表单初始值
        - <% DATA.rowData %>
      # 打开弹窗
    - target: '#modalAddTask'
      method: open

弹窗&添加按钮修改

属性面板-属性:
  id: modalAddTask
  # 修改此行数据
  # "track context" 为特殊表达式,用以监听用户自定义变量的值
  # 若监听的值发生更新,则会更新后续表达式中的内容
  # 从而引起构件的变化
  # 下方为三元表达式语法,含义为:
  # 当 CTX.isEdit 等于 true 时,弹窗名称为:编辑任务
  # 当 CTX.isEdit 等于 false 时, 弹窗名称为:添加任务
  modalTitle: '<% "track context", CTX.isEdit ? "编辑任务" : "添加任务" %>'
  closeWhenOk: false
  maskClosable: false
事件面板-事件:
general.button.click:
  # 新增项
  - action: context.replace
    args:
      - isEdit
      - false
  # ...

Form表单修改

事件面板-事件:
  validate.error:
    - action: message.error
      args:
        - 表单填写失败
  validate.success:
    - target: '#modalAddTask'
      properties:
        okDisabled: true
    # 新增if逻辑,这里表示,如果 CTX.isEdit是false的话,则代表是新建状态
    # 调用创建实例接口
    - if: <% !CTX.isEdit %>
      useProvider: providers-of-cmdb.instance-api-create-instance
      # 上个章节的内容,这里不做展开
      # ...
    # ======== 分割线 ==============
    # 新增if逻辑,这里表示,如果 CTX.isEdit是true的话,则代表是编辑状态
    # 调用编辑实例接口
    - if: <% CTX.isEdit %>
      useProvider: providers-of-cmdb.instance-api-update-instance
      args:
        - TASK_FOR_VB_LESSON
        - <% EVENT.detail.instanceId %>
        - |-
          # 这里是入参,获取表单暴露的数据中指定的字段
          # _.pick 是第三方工具库 lodash 提供的处理数据的函数
          # 在表达式中可以直接使用,用以处理数据
          <%
            _.pick(EVENT.detail, [
              "name",
              "state",
              "assignee",
              "reporter",
              "time",
              "description",
            ])
          %>
      callback:
        success:
          # 回调方法,同新增逻辑一致
          - action: message.success
            args:
              - 任务修改成功
          - target: '#modalAddTask'
            properties:
              okDisabled: false
          - action: context.refresh
            args:
              - taskList
          - target: '#modalAddTask'
            method: close
        error:
          - action: handleHttpError

二、任务删除

为Table新增删除按钮

在做完修改功能后,增删改查我们就剩最后一个删除功能了,我们就已最简单的实现结束这块功能吧~

我们要在刚刚Table操作列新增的编辑按钮后面加上一个删除按钮;在构件树上找到 Table 下挂在点为: [operator], 然后在它下面新增构件, 弹窗参数如下:

# 父节点默认不可修改
父节点: Table
# 挂载点等于useChildren的值,useChildren的值需要大括号包裹
挂载点: [operator]
# 选择构件
构件: basic-bricks.general-button
示例(选择可快速创建构件): 随便选择一个

删除按钮入参修改

属性面板-属性:
  buttonIcon:
    lib: easyops
    category: default
    icon: delete
    color: red
  buttonType: text
  style:
    display: inline-block
事件面板-事件:
  general.button.click:
    # 这里简单实现,点击删除按钮,直接调用删除接口,进行删除
    # 然后触发 taskList 重新请求数据,完成渲染
    - useProvider: providers-of-cmdb.instance-api-delete-instance
      args:
        - TASK_FOR_VB_LESSON
        - <% DATA.rowData.instanceId %>
      callback:
        success:
          - action: message.success
            args:
              - 任务删除成功
          - action: context.refresh
            args:
              - taskList
        error:
          action: handleHttpError

三、任务详情页面跳转

URL动态参数详解

在完成了增删改查之后,我们要对我们的功能进一步完善,现在我们需要一个任务详情页面,入口是从任务列表页面进行跳转,那么我们要怎么做呢?首先我们要思考一个问题,一个详情页面,我们要怎么知道当前页面是哪一条实例的详情呢?

最常用的方式就是在 URL 上面携带信息,然后详情页面从 URL 中获取信息,然后进行接口请求,获取信息后再渲染页面上,编排也是如此;在之前的章节中,我们已经介绍了一种方式,通过 QUERY 表达式,可以获取 URL 上面的参数,现在我们介绍另外一种可以从 URL 上面动态参数的表达式 PATH,他们的使用示例如下:

QUERY表达式获取参数:
  # 路由 page1 参数设置
  path: '${APP.homepage}/page1'
  # 实际渲染时,用户根据自己需求,添加动态参数 { a:1, b:2, c: helloWorld }
  # URL将识别成以下格式
  URL: 'https://admin.easyops.local/next/page1?a=1&b=2&c=helloWorld'
  # 则 QUERY.a = 1, QUERY.b = 2, QUERY.c = helloWorld
  
# =========== 分割线 ===========
PATH表达式获取参数:
  # 路由 page2 参数设置
  # 请注意 path 上面的 :a, :b, :c, 这几个就是我们认为的动态路由参数
  path: '${APP.homepage}/page2/:a/task/:b/detail/:c/edit'
  # 实际渲染时,用户根据自己需求,添加动态参数 { a:1, b:2, c: helloWorld }
  # URL将识别成以下格式
  URL: 'https://admin.easyops.local/next/page2/1/task/2/detail/helloWorld/edit'
  # 则 PATH.a = 1, PATH.b = 2, PATH.c = helloWorld

新增路由页面(任务详情)

在介绍完这两个表达式之后,我们将使用 PATH 的方式,创建新的路由页面,并完成任务详情跳转这个功能,下面进入编排步骤:

别名: 任务详情
path: "${APP.homepage}/task/:instanceId/detail"
选择主题: UI8.0主题下的详情页

DATA面板添加数据

在新增完路由后,打开在左侧 DATA 面板,添加数据 taskDetail,入参如下:

数据名称: taskDetail
类型: Provider
Provider(接口): providers-of-cmdb.instance-api-get-detail
Args(参数):
  - TASK_FOR_VB_LESSON
  # 这里路径上面已经配置了 :instanceId, 所以我们可以根据通过 PATH 表达式获取到具体的值
  - <% PATH.instanceId %>

构件属性修改

然后从构件树上找到 brick-descriptions 构件,将其属性修改如下:

属性面板-属性:
  column: 4
  dataSource: <% CTX.taskDetail %>
  itemList:
    - label: 任务名称
      field: name
    - label: 任务描述
      field: description
    - label: 状态
      useChildren: '[tag]'
    - label: 工时
      field: time
    - label: 负责人
      field: assignee
    - label: 汇报人
      field: reporter

任务列表页面编排修改

在做完这一切之后,我们回到任务列表的编排页面中,进行页面编排修改,首先定位到 Table 构件,将其属性入参修改为如下:

columns:
  - dataIndex: name
    key: name
    title: 任务名称
    # 新增项
    useChildren: '[name]'
  # 其他不做修改,只需要增加这一行属性即可
  # ...

然后在 TABLE 的节点下新增 Link 构件

# 父节点默认不可修改
父节点: Table
# 挂载点等于useChildren的值,useChildren的值需要大括号包裹
挂载点: [name]
# 选择构件
构件: presentational-bricks.brick-link
示例(选择可快速创建构件): 随便选择一个

并将新增 Link 构件的属性修改为:

属性面板-属性:
  label: <% DATA.rowData.name %>
  # url由动态参数由列表行数据提供
  url: '<% `${APP.homepage}/task/${DATA.rowData.instanceId}/detail` %>'
  hideExternalIcon: true

四、为Table增加查询条件

之前我们做的查询其实只是批量地将数据查询回来并进行展示,相对来说还比较粗糙,现在我们需要将查询细致化,增加多一些查询条件,方便能够精准定位到我们需要的数据,那么接下来也开始关于这块的编排吧!

相信大家看到左侧DATA面板一直有两个参数filters跟query,但是我们之前的章节一直没有提及;本节课将利用这两个参数,结合taskList,进行数据查询,那么我们要怎么做呢?跟着我一起修改编排吧

DATA属性修改

数据名: filters
类型: Value
Args(参数):
  assignee: <% QUERY.assignee %>
  name: <% QUERY.name %>
数据名: query
类型: Value
Args(参数):
  |-
    <%
      {
        $and: [
          {
            ...(CTX.filters.name
              ? {
                  name: {
                    $like: `%${CTX.filters.name}%`,
                  },
                }
              : {}),
            ...(CTX.filters.assignee
              ? {
                  assignee: {
                    $eq: `${CTX.filters.assignee}`,
                  },
                }
              : {}),
          },
        ],
      }
    %>

数据名称: taskList
类型: Provider
Provider(接口): providers-of-cmdb.instance-api-post-search-v3
Args(参数):
  - TASK_FOR_VB_LESSON
  - fields:
      - name
      - state
      - assignee
      - reporter
      - description
    page: '${QUERY.page=1|number}'
    pageSize: '${QUERY.pageSize=20|number}'
    # 新增项
    query: <% CTX.query %>
Extra provider settings(额外的接口配置):
  lazy: true
Extra basic settings(额外的基础配置):
  track: true

构件属性修改

找到 Table 上放的两个构件,Input & Select, 分别对他们进行修改,如下

属性面板-属性:
  placeholder: 输入任务名称
  q: <% CTX.filters.name %>
  shouldUpdateUrlParams: false
事件面板-事件:
  filter.update:
    # history.pushQuery 为系统提供的方法,用以更新 URL 上的动态参数
    # 若原先 url: http://admin.easyop.local/next/page1?name=1
    # 执行完下面事件后,url将变为: 
    # http://admin.easyops.local/next/page1?name=xxx&page=1
    - action: history.pushQuery
      args:
        - name: <% EVENT.detail.query %>
          page: 1
        # history.pushQuery 第二个入参,notify默认为true
        # 设置成false代表更新完URL后不触发页面更新
        - notify: false
    # context的语法之一,表示更新 CTX.filters 中的 name
    - action: context.assign
      args:
        - filters
        - name: <% EVENT.detail.query %>
属性面板-属性:
  placeholder: 筛选负责人
  objectId: USER
  inputBoxStyle:
    width: 200px
  instanceQuery:
    state: valid
  fields:
    label:
      - name
    value: name
  labelTemplate: '#{name}'
  value: <% CTX.filters.assignee %>
  allowClear: true
事件面板-事件:
  forms.cmdb-instance-select.change:
    # 逻辑同上,不做展开
    - action: history.pushQuery
      args:
        - assignee: '${EVENT.detail}'
          page: 1
        - notify: false
    - action: context.assign
      args:
        - filters
        - assignee: '${EVENT.detail}'

做完这一切编排修改后,我们的查询功能也就丰富完善啦!

五、结语

通过本章节,您已学会查询,编辑,删除,路由页面跳转等高级操作啦,这已经能够满足日常编排工作的大部分场景啦!

从低代码到无代码:可视化业务编排 对于有一定开发基础的用户来说,他可能不知道我们java后台实际代码是怎么执行的,但当他编写或查看DSL的时候他可以指出DSL在工作时会发生什么样的变化或者错误,他可以与java开发人员进行有效的沟通。对比前面那段JSON,我认为它更易写,而且最重要的是,更易读。通过对七巧低代码线上客户部分业务代码进行梳理,发现页面设计大都是以表单、列表,详情为主,而其中90%的业务逻辑基本上都围绕在表单(校验,取值,赋值,提交),对话框(显隐、提示),发送请求,消息提示,数据处理,路由跳转,条件判断等,相对比较收敛。 阅读详情

相关推荐

一种关于低代码平台(LCDP)建设实践与设计思路

业务线特别多,每个业务线对同一个页面都有个性化布局和不同的字段需求,在资源有限的情况下如何支撑好呢?本文就降本的情况下,如何低成本构建产品能力去支撑多条业务线、多租户。

阿里云云栖号 3909

一种面向后端的微服务低代码平台架构设计

近期参加公司组织的极客中餐厅训练营,我们所在的小组接到的课题是微服务的低代码平台架构设计。目标是:结合京东业务研发实际情况,针对后端研发人员,设计一个微服务低代码平台,助力更高效低交付业务需求。现已结业,将我在本次项目中沉淀设计出的设计文档整理成文,期待与大家有进一步的碰撞沟通

京东科技开发者 1253

低代码:可视化逻辑编排选型

业务逻辑的代码繁琐且无用,只能让程序员在做低水平的重复工作。有痛点就会有需求,一些低代码平台推出了可视化逻辑编排能力,能够很好地解决这个问题。本文作者对此进行了分析,希望对你有帮助。

weixin_41722224的博客 1181

低代码平台服务编排提升

数据层:统一数据存储,并提供不同维度的数据操作、数据初始化、数据转换、数据计算等基础数据操作,通过数据的标准化和服务化管理,实现数据的重用和共享,提高数据的利用价值和业务响应速度。随着产品的使用越来越广,业务的不断迭代,由于前期没有很好的规划服务编排的发展方向,现考虑如何做好运维、支持复杂的编排场景、实现统一校验、统一数据采集等提升时,臃肿的代码耗费了很大的改造成本。再由服务组装成一个个通用的业务领域组件,最后仅需要通过业务组件进行简单的组装即可快速完成应用逻辑的开发,低代码开发的效率,也将带来质的飞跃。

whalecloud的博客 1212

政府科技管理者如何提升科技成果转化项目进场交易的备案效率?.docx

政府科技管理者如何提升科技成果转化项目进场交易的备案效率?

山区道路边坡落石隐患检测数据集VOC+YOLO格式241张1类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

低代码开发的核心能力:逻辑引擎服务编排

逻辑引擎是通过对原子服务能力的可视化编排,同时接入外部应用,以满足数据处理、业务实现、自动化业务的实现。轻松实现业务功能,无需复杂冗长的开发过程。

834

高空作业栏杆检测数据集VOC+YOLO格式230张3类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

优维低代码实践:页面编排优化与数据联调

在熟悉完上述几种场景的操作后,回到我们创建的第一个路由(页面),我对之前创建的的编排做了一些改造,将它的功能进行了简单地完善,将它变成了一个任务列表展示页面,并且支持查询任务模型数据,以及新增任务实例数据,还支持了搜索能力,那么我是怎么做到的呢,下着跟着我的操作学习一下吧!通过本节实践,您学习了我们最常用的几个API-CMDB的增删改查操作,构件的操作,查询接口的使用,以及新增接口的使用,这基本涵盖了我们日常页面编排的基本情况,其他操作基本上都是基于这些步骤之上进行拓展;至此,您就完成了新增任务的能力啦!

EasyOps_DevOps的博客 770

Megatron-LM深度解析:万亿参数大模型的3D并行训练之道

训练框架,采用创新的"层内模型并行"设计,通过将Transformer层的计算拆分到多个GPU上并行执行,显著提升训练效率。该系统支持3D并行策略(数据并行、张量并行、流水线并行)和序列并行等新技术,成功应用于训练5300亿参数的MT-NLG模型。相比DeepSpeed、TPU GSPMD等框架,Megatron-LM在NVIDIA GPU上展现出卓越性能,并与TensorRT等工具深度集成,形成从训练到部署的完整解决方案。该项目持续演进,已成为大模型训练的重要基准。

数据与算法架构提升之路专栏 2093

资源描述框架RDF及Turtle

文章目录1. RDF1.1 简介1.2 格式1.3 RDF的要求2. Turtle2.1 语法2.1.1 简单三元组2.1.2 Turtle中的命名空间2.1.3 Base URI2.1.4 谓语列表2.1.5 宾语列表2.1.6 空白节点(bNodes)2.1.7 数据类型2.1.8 Class membership2.1.9 空URI2.1.10 集合 1. RDF 1.1 简介 RDF(Resource Description Framework)语义网的标准数据模型,是一个用于描述 Web 上的资

doublewhite233的博客 2495

无代码解决方案:如何彻底实现无代码化研发模式

近年来,关于低代码(LowCode)和无代码(NoCode)的讨论在前端社区内越来越火,简单的说低代码就是通过编写少量代码的方式完成应用的开发及上线,而无代码则更进一步,不需要编写代码通过...

淘系技术 2569

OPC UA 服务端的模拟工具及客户端工具

详细介绍如何使用 Prosys OPC UA Simulation Server 作为 OPC UA 服务端的模拟工具来生成数据模型,并使用 Softing OPC UA Client 作为客户端工具,直观地查看和验证模拟生成的数据。

weixin_44462773的博客 9883

精读《低代码逻辑编排》

逻辑编排是用可视化方式描述逻辑,在一般搭建场景中用于代替逻辑描述部分。更进一步的逻辑编排是前后端逻辑混排,一般出现在一站式 paas 平台,今天就介绍一个全面实现了逻辑编排的 paas 工...

前端精读周刊 1390

从零构建:如何用MATLAB和SDR硬件搭建你的第一个OFDM卫星通信原型系统

本文详细介绍了如何利用MATLAB和SDR硬件从零构建OFDM卫星通信原型系统。通过核心组件选型、开发环境配置、OFDM算法实现到系统集成与优化的完整流程,帮助通信工程学生和DIY爱好者快速掌握软件无线电技术在卫星通信中的应用。特别推荐使用HackRF One和MATLAB工具箱实现高性价比的OFDM系统验证。

pz890123456的博客 378

STM32芯片解锁读写保护:更改Option Byte [Error已解决]

解锁读保护:STLink更改Option Byte 变Level从1变为0,点击Apply即可。(程序执行读保护,其实是将Level从0变为1) 默认情况下该保护功能是不开启的,若要开启该功能,需要改写内部FLASH选项字节(Option Bytes)中的配置。 RDP读保护级别 级别0,无保护, 级别1,使能读保护, 这种保护下,若使用调试功能(使用下载器、仿真器)或者从内部SRAM自举时都不能对内部FLASH及备份SRAM作任何访问(读写、擦除都被禁止); 当芯片处于级别1的时候,可以把选项字节

HowieXue 薛永浩的博客 2万+

如何抢先未来5年低代码百亿级赛道?后端落地实践之服务编排

低代码按下了企业竞争的“加速键” 数字化转型,如火如荼。作为企业数字化转型的重要工具,势必需要软件服务做支撑,但传统软件开发面临时间长、成本高等痛点,低代码开发平台便成企业数字化转型的“利器”。 2021年,低代码按下了企业竞争的“加速键”。艾瑞咨询《2021年低代码行业研究报告》显示,与2020年相比,中国低代码市场规模将大幅增长至29.3亿元,未来五年市场规模有望达到131亿元。一场没有硝烟的战争,吹响了集结号。Gartner预测2024年应用软件开发活动中,65%将通过低代码方式完成。 在当前B

DOUBLEcFn的博客 245

华为OD机试真题 新系统2026-04-15 Python&JS 实现【失灵的键盘】

有一个键盘有2个按键失灵了,按下这些键时会连续输出其他键对应的字符两次。具体如下: 1. 按下j键一次,屏幕上显示uu(两个连续的u);  按下b键一次,屏幕上显示t(两个连续的t) 2. u键和t键是好的,按下u键一次时,屏幕只会显示一次u(正常按键);按下t键一次时,屏幕只会显示一次t(正常按键) 3. 假定屏幕上连续显示两个t一定是按了一次b键,而不是两次t键;假定按键t之后不会紧接着按键b,即tttt转义为两个b,而不可能是tb

MISAYAONE的博客 524

低代码平台--基于surging开发微服务编排流程引擎构思

前言京东优惠券 https://m.fenfaw.net/ 微服务对于各位并不陌生,在互联网浪潮下不是在学习微服务的路上,就是在使用改造的路上,每个人对于微服务都有自己理解,有用k8s 就说自己是微服务,有用一些第三方框架spring cloud, dubbo ,abp, nginx,kong就说是微服务的,还有用一些第三放分布式平台去架设部署也认为它是微服务,反正微服务的架设是各种各样,没有定义哪个架构是对的,只要是集大成者,全部用docker, 满足服务发现,服务治理就是微服务。而对于以上架构选择不..

nidongla的博客 947

Unreal5从入门到精通之如何实现移动端触屏滑动手势

随着移动设备的普及,越来越多的游戏和应用选择在移动平台上发布。Unreal Engine 5(UE5)作为一款强大的游戏引擎,提供了丰富的工具和功能,帮助开发者打造出色的移动体验。UE5不仅提升了图形质量,还大幅简化了开发流程,使得开发者能够更专注于游戏设计和用户体验。在移动游戏中,触屏滑动手势是用户与应用互动的主要方式之一。然而,许多开发者在实现这些功能时常常遇到困难。为了填补这一知识空白,本篇文章将详细介绍如何在UE5中实现移动端触屏滑动手势,帮助你从入门到精通,提升你的开发技能。

TxNet 1138

跨平台C#上位机开发:.NET MAUI与工业物联网的融合实战

NET MAUI正在重塑工业上位机的开发模式——从“为单一设备定制”转向“全场景覆盖”。其价值不仅在于“代码复用”,更在于打通了工业物联网的“最后一公里”:让边缘设备、云平台、移动终端通过统一的数据模型协同工作。未来,随着.NET MAUI对WebAssembly的支持(计划在.NET 9实现),上位机甚至可直接运行在浏览器中,进一步降低部署门槛。对于工业开发者,掌握跨平台技术意味着能更快响应多样化的现场需求,从“Windows专家”升级为“全栈工业开发者”。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1091

实体类管理系统如何诊断:两条特征与状态的多维性驰骋BPM驰骋低代码低代码工作流引擎

人力资源、固定资产、车辆管理这类系统与交付类系统的形状完全不同:业务围绕一条记录发生,记录本身长期存在,同时还要围绕实体集合做查询、统计与批处理。本文给出实体类管理的两条特征、一套五问清单,以及实体状态在时间点上一维、在不同管理视角下多维的处理方式。

开源驰骋工作流引擎 181

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

私有化低代码实践:基于JVS构建企业级可控数字化平台(信创适配+等保三级+源码交付)

原生兼容Spring Cloud Alibaba微服务生态,已通过Nacos(替代Eureka)、Redis(替代Memcached)、Kafka(替代RabbitMQ)等国产中间件认证,并完成统信UOS、银河麒麟、鲲鹏920、海光Hygon全栈适配测试。金融、政务、能源等行业对系统安全有明确强制要求:数据不出域、操作可审计、接口可追溯。:数据库、中间件、应用层全部资产由客户物理持有,杜绝远程诊断、第三方调用与跨境传输,存储加密、访问控制、备份策略全程自主配置;

weixin_42054392的博客 248

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

表单元素的分类与实现:主表、从表、附件与扩展控件驰骋BPM驰骋低代码低代码工作流引擎

一张低代码表单上的可设计元素,按数据载体可以分成四层:主表字段、从表、附件、字段扩展控件。本文逐层说明各自的元数据落点、设计器入口与运行时链路,并用一张请假单说明四层如何拼装。

开源驰骋工作流引擎 159

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

实体类管理系统万能公式:定对象、定状态、列业务驰骋BPM驰骋低代码低代码工作流引擎

实体类系统的设计可以归纳为三步:先确认要管理的对象并按规范补齐六个必要属性,再确定这个对象一生会经历哪几个状态,最后理清每个状态下可以发生哪些业务,形成状态与业务的矩阵。实现手段在流程、实体方法、通用组件三者之间按规矩轻重取舍,并补齐查询、权限与报表等集合能力。

开源驰骋工作流引擎 109
上一篇: 客户至上 服务至极 ——优维服务流程标准化体系
下一篇: 优维低代码实践:模板
优维科技EasyOps
博客等级 码龄5年 1483粉丝 395原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值