使用Camunda和Trello自动执行手动任务(上)

使用Camunda和Trello自动执行手动任务(上)

本文是该系列文章中的第三篇,探讨了使用Camunda Cloud控制工作流的有趣,简单的方法—如果您希望看到Camunda Cloud与Restzeebe一起使用,而没有一行代码,请阅读其他背景知识。

在本系列的前两篇文章中,您学习了如何执行工作流,如何根据上下文来控制流程和采用不同的路径以及工作人员如何在任务中执行各自的代码。这些示例可能有点理论性,所以现在我想向您展示一个用例:使用 待办事项列表控制手动任务

手动流程仍然存在,比您想像的更多。例如,一个人必须发布一个流程,或者完成一个到目前为止尚未自动化的任务。

以下情况如何: 开发人员在公司中开始新工作。在开始之前,之后和之后必须完成一些任务。这些包括

所有这些活动 大部分是由人类进行的。如果对这个过程进行建模并且所有负责人员在Trello董事会上都有相应的条目来完成工作,那会不会很好?而且,如果待办事项完成后通知流程,那会不会更好呢?

好吧,我想要那个!

好消息是-我们并不需要太多去那里。本质上,有以下几点:

开始吧!

设置

Trello 是组织和协作共享任务的出色工具。要将示例与Trello一起使用,我们需要三件事:

API密钥和令牌是与Trello API通信所必需的。对于我们的示例,我们要执行两个操作:

创建Trello卡

当然,该任务应由工人执行。以下控制器负责与Trello API的通信:

import axios, { AxiosRequestConfig, AxiosResponse } from 'axios'

import * as functions from 'firebase-functions'

import { v4 } from 'uuid'

import { Document } from '../types/Document.type'

import { StorageController } from './storage.controller'

const BASEURL = 'https://api.trello.com/1'

export enum TRELLO {

  KEY = 'key',

  TOKEN = 'token',

  ID_LIST = 'idList',

  NAME = 'name',

}

export enum ROUTE {

  CARDS = 'cards',

}

export class TrelloController {

  private trelloKey: string

  private trelloToken: string

 

  constructor(private store: StorageController) {

    this.trelloKey = functions.config().trello.key

    this.trelloToken = functions.config().trello.token

  }

 

  public async storeWebhookPayload(payload: any) {

    const uuid: string = v4()

    await this.store.set(Document.TRELLO_WEBHOOK_PAYLOAD, uuid, payload)

  }

 

  public async addCard(idList: string, name: string): Promise {

    const queryParams: URLSearchParams = new URLSearchParams()

    queryParams.append(TRELLO.ID_LIST, idList)

    queryParams.append(TRELLO.NAME, name)

    const result = await this.request('POST', ROUTE.CARDS, queryParams)

    return result ? result.id : undefined

  }

 

  private async request(

    method: 'GET' | 'POST' | 'PATCH' | 'DELETE',

    route: string,

    queryParams: URLSearchParams,

  ) {

    const params = queryParams

    params.append(TRELLO.KEY, this.trelloKey)

    params.append(TRELLO.TOKEN, this.trelloToken)

 

    const config: AxiosRequestConfig = {

      method,

      url: `${BASEURL}/${route}`,

      params,

    }

 

    try {

      const result: AxiosResponse = await axios(config)

      return result ? result.data : undefined

    } catch (error) {

      console.error(error)

    }

  }

}

 

相关教程