Giter VIP home page Giter VIP logo

bpmn-chinese-document's Introduction

bpmn.js简介

bpmn.js是一个BPMN2.0渲染工具包和web建模器.

它使用JavaScript编写,在不需要后端服务器支持的前提下向现代浏览器内嵌入BPMN2.0流程图.

简单来说, 就是能使得前端来画流程图, 它可能长成这样:

readme1

也可能长成这样:

readme1

或许你可以亲自试试: 在线绘制bpmn流程图

全部目录

bpmn.js教材目录

(如果github中一些文章的图片显示不出来,可以在掘金上查看,也有相应的文章:https://juejin.cn/user/360295513463912/posts)

几个问题

Q: bpmn.js是什么? 🤔️

bpmn.js是一个BPMN2.0渲染工具包和web建模器, 使得画流程图的功能在前端来完成.

Q: 我为什么要写该系列的教材? 🤔️

因为公司业务的需要因而要在项目中使用到bpmn.js,但是由于bpmn.js的开发者是国外友人, 因此国内对这方面的教材很少, 也没有详细的文档. 所以很多使用方式很多坑都得自己去找 😅.

在将其琢磨完之后, 决定写一系列关于它的教材来帮助更多bpmn.js的使用者或者是期于找到一种好的绘制流程图的开发者. 同时也是自己对其的一种巩固.

Q: 教材中的知识我都是从哪里看的? 🤔️

最开始是根据公司业务的需要, 跟着官方给的一些例子 来推敲了解bpmn.js的一些基础知识, 包括一些自定义contextPad、renderer、palette的使用, 然后就写了几篇关于bpmn.js的文章 ✏️.

之后越来越多读者通过微信与我联系, 他们也会问一些我没有遇到过的问题, 从中互相探索怎样使用, 怎样解决实际问题... 过程里大多都是通过查看bpmn.js的源码, 然后本地测试源码中一些方法和属性的作用.

Q: 本教材还会更新多久? 🤔️

不知道🤷‍♂️... 因为其实现在工作已经没在用bpmn.js了, 我现在更多的把它当成一种兴趣来学习吧...

而且现在我们也有了自己的一个bpmn.js交流群, 时不时会有一些新的问题抛出来, 所以暂时是与其分不开的 😊.

我也会在工作之余, 尽量多出一些教材, 包括群里大家抛出的问题, 我也会抽时间将它们整理出来, 方便后面遇到同样问题的小伙伴查看, 所以现在是持续更新的.

Q: 还有什么想说的? 🤔️

求Star 🌟 , 求 Fork 📒

就像之前我提到过的, 光靠我一个人的力量想要将 bpmn-chinese-document打造成一个真正的bpmn中文文档

是不可能的...

精力不够...能力也不够...

所以我希望有更多的bpmn.js使用者能参与到此项目中来 🎉...

你可以是写一篇关于某个知识点的文章, 就算是我已经写过的知识点也可以, 因为我知道我写的不一定全面, 如果你有更多可以写的我当然欢迎👏.

也可以是写一些教材案例, 因为之前就有大佬吐槽说官方给的案例都太过简单了 😂, 可以让我们自己写一些案例出来. (案例中的README要尽量详细哟 😁, 当然有一篇配合着的文档更好啦 😄)

再或者是一些你平常碰到的坑, 总结之类的文章也很好 😼.

Q: 如何 Fork ? 🤔️

点击项目右上角的Fork, 然后像Fork其它项目一样, 不太会的小伙伴可以查看这篇文章:

Github上怎么修改别人的项目并且提交给原作者!图文并茂!

不过在提交的时候, 为避免项目太乱, 可以在根目录下创建一个以你github为名的文件夹(比如我的就是LinDaiDai)然后将你的文章或者案例都放在这个文件夹里面进行提交就可以了🎉 .

Q: 还有什么要提醒的?

文章中的案例 icon 或者一些 .bpmn 的云文件链接,例如以 https:hexo-blog-1256114407 开头的链接,用的都是我私人的腾讯云存储桶。

仅用于文章案例,所以如果大家自己写写 demo 看还好,请勿用在实际项目上哈。

这样带来的风险:

1、如果我的私人账号欠费了的话,所有这些链接都不能访问了,可能会对您的生产环境造成不可预估的影响;

2、访问量多了的话,我这费用也抗不住啊...

案例里的这些图标都是:

89283582b8919cc501720cd6785ff10

后语

如果你也对bpmn.js 感兴趣的话, 欢迎加入我们的bpmn.js交流群, 一起学习, 一起进步💪.

weixin

进群方式: 关注 霖呆呆(LinDaiDai) 的公众号👇👇👇, 选择 其它 菜单中的 bpmn.js群 即可😊.

公众号二维码 赞赏码

整理文章, 编写案例不易 😂...

走过路过的各位大佬能否打赏点饭钱呢...

你的支持是霖呆呆持续更新的动力, 哈哈哈 😄

更多bpmn相关文档和案例

bpmn-chinese-document's People

Contributors

lindaidai avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bpmn-chinese-document's Issues

如何动态修改组件的样式?

可以参考官网的example https://github.com/bpmn-io/bpmn-js-examples/tree/master/colors

有几点需要注意:

  1. overlay的方式,在移动画布的时候会照造成样式的短暂缺失

  2. addMarker的方式,我的理解类似于给组件的某个元素增加了一个class类,那么我们就可以对它下面的所有子节点做自定义样式调节,只需要写CSS即可

3.要是你的组件是通过customRender创建的话,最理想的方式是用方法2,但是如果是非自定义render方式创建的组件,那么通过modeler.get('editorActions').trigger('setColor', {fill: XX, stroke: XX})来设定样式,同样是生效的,也是最简单的方式。我们修改连线颜色的话就可以用这种方式。

4.modeler.get('editorActions').trigger('setColor', {fill: XX, stroke: XX})方法只是对选中的元素生效,要是想要指定具体的元素:可以用__modeler__.get('modeling').setColor(modeler.get('elementRegistry').get("Action_1kfdira"), {fill:XX, stroke:XX})`

BpmnModeler如何只允许查看不允许编辑

1、引用以下几个
import labelEditingProvider from 'bpmn-js/lib/features/label-editing/LabelEditingProvider'
import contextPadProvider from 'bpmn-js/lib/features/context-pad/ContextPadProvider'
import paletteProvider from 'bpmn-js/lib/features/palette/PaletteProvider'
2、添加属性additionalModules,含义见注释

this.bpmnModeler = new BpmnModeler({
         container: canvas,
        //添加控制板
        propertiesPanel: {
          parent: '#js-properties-panel'
        },
        additionalModules: [
          customModule,
          {
           paletteProvider:['value',''], // 禁用左面板
           labelEditingProvider: ['value',''], // 禁用编辑
           contextPadProvider:  ['value',''] // 禁用点击出现的contextPad
          }
        ]
      })

解决信号 signalRef 引用 为undefined

signalEventDefinition signalRef="undefined"
let signalRef = this.bpmnModeler.get('moddle').create('bpmn:Signal', {
id: 'theSignalsss',
name: 'xxx',
})

let singalEvent = this.bpmnModeler.get('moddle').create('bpmn:SignalEventDefinition', {
signalRef: signalRef,
})

this.modeling.updateProperties(elemnet, {
eventDefinitions: [singalEvent],
})

label置于节点下方问题

如在label标签自定义在元素下方中的讨论,发现了另外一种可行的方法。

经查源码,在 ./node_modules/bpmn-js/lib/import/BpmnImporter.js 185行可知,

// line 185
//  (optional) LABEL
if (isLabelExternal(semantic) && semantic.name) {
    this.addLabel(semantic, element);
 }

而isLabelExternal定义在 ./node_modules/bpmn-js/lib/util/LabelUtil.js

// 22 
// Returns true if the given semantic has an external label
// Params:
// semantic: BpmnElement
// Returns:
// Boolean - true if has label
export function isLabelExternal(semantic) {
  return is(semantic, 'bpmn:Event') ||
         is(semantic, 'bpmn:Gateway') ||
         is(semantic, 'bpmn:DataStoreReference') ||
         is(semantic, 'bpmn:DataObjectReference') ||
         is(semantic, 'bpmn:DataInput') ||
         is(semantic, 'bpmn:DataOutput') ||
         is(semantic, 'bpmn:SequenceFlow') ||
         is(semantic, 'bpmn:MessageFlow') ;
}

所以,event节点、gateway节点等标签在节点下方,而Task节点不是。

故,可以通过将我们的节点添加到isLabelExternal修改默认标签行为。

如果你有更好的办法,欢迎讨论。

部分文章的图片好像是损坏了

有的图片只显示 十分之一
只能看到个 header
不知道是不是图片坏了
麻烦更新下

比如这小节 全网最详bpmn.js教材-编辑、删除节点篇.md
image

不是一两个图片就不一一列出了
具体哪些图片坏了,每篇文章点进去看下


推荐个截图方案 给图片加个边框

截图后,用 picpick 编辑下图片

左边是原图 右边是编辑后图片

编辑后的图片加了个边框
image

操作步骤

image
image

如何去除左侧工具栏不要的元素?

可能不是最好的办法,但是我提供了两种解决方案:
(一)简单粗暴法
右键审查元素找到要隐藏的 class 名,之后在代码中设置 display: none;

(二)自定义palette
额,这个就按自定义palette那里写就可以了,只返回创建自己想要的组或者元素

如何显示追踪流程图

如何确保已经过的节点、连线显示不同的颜色;如何保证当前节点显示不同颜色

bpmn 快捷键支持

import CliModule from 'bpmn-js-cli';
this.modeler = new BpmnModeler({
                         container: el,
                         additionalModules: [
                             customTranslateModule,
                             config,
                             // minimapModule,
                             CliModule
                         ],
                         keyboard:{
                             bindTo:window
                         },
                         cli: {
                             bindTo: 'cli'
                         },
                         moddleExtensions: {
                             camunda: camundaModdleDescriptor
                         }
                     });

打开画布,流程图自动剧中

在加载成功之后,调用以下代码:

  this.bpmnModeler.get('canvas').zoom('fit-viewport', 'auto');

注意⚠️

  • bpmnModeler为你定义modeler时的名字

修改Gateway在画布中的图标不生效

按照example修改Task和Gateway的显示图标,但是Task是生效的Gateway不生效,

function createGateway() {
    return function(event) {
      const shape = elementFactory.createShape({
        type: 'bpmn:Gateway'
      })
      create.start(event, shape)
    }
  }
'create.Gateway': {
      group: 'gateway',
      className: 'icon-custom support-task',
      title: '创建一个类型为机器辅助的任务节点',
      action: {
        click: createGateway(),
        dragstart: createGateway()
      }
    },

这样有错误吗

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.