日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBoot集成Flowable_Jsite已发任务菜单报500

發布時間:2024/9/27 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot集成Flowable_Jsite已发任务菜单报500 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JSite 快速開發框架,內置Flowable工作流引擎 · 五大基礎模塊 · 前后端基礎代碼自動生成 · 權限精確控制。




說明:此版本我已經調通,最新版本正在更新,頁面未處理好,因此采用歷史版本。

文章目錄

  • 一、部門經理流轉
    • 1. 登錄dept賬號
    • 2. 在待辦任務中,簽收任務
    • 3. 在待辦任務中,辦理任務

一、部門經理流轉

1. 登錄dept賬號

2. 在待辦任務中,簽收任務


3. 在待辦任務中,辦理任務


響應碼500

  • 請求的url
  • 頁面傳遞的參數
  • 控制臺報錯信息提取

    在獲取代辦列表FlowTaskService的104行

    在獲取代辦列表FlowTaskService的105行
e.setProcDefId(pd.getId());

這里需要tProcDefId對吧,程序中寫的是從pd中獲取,但是里面,沒有

其實這個tProcDefId在task中,因此需要修改代碼。

  • 點擊辦理,procDefId=undefined

    第一步進FlowTaskController的form方法,調用getFormKey的service進行業務處理



從上圖可以看出很明顯,沒有獲取到procDefId

,清除緩存,再次測試,點擊待辦任務菜單,debbug看程序,

procDefId=leave:1:b74aaad7-15d6-11ea-9f45-4a5ab6e330e5


  • 點擊辦理



    很明顯獲取到值了!!!
    f8跳過,頁面又拋出403,權限的錯了,真是一波未平一波又起啊。

    從頁面很明顯是沒有辦理權限,導致403錯誤,情有可原,對吧,那就給dept用戶配置權限唄,
    登錄jsite系統管理員賬號,給dept用戶配置權限



    角色授權既然是空的,我想靜靜。看看控制臺報錯信息再定位問題吧?

    從控制臺中可以看出,由2條信息比較醒目:
java.lang.ClassNotFoundException: com.jsite.modules.sys.utils.AreaOfficeUtils at com.jsite.modules.sys.web.RoleController.form(RoleController.java:74)

異常信息很明晰那說AreaOfficeUtils類,RoleController.java:74,既然有文件位置,那咱們就去看看吧,
從以下圖中可以看出,通過反射區找 com.jsite.modules.sys.utils.AreaOfficeUtils類,那就在程序中找找有這個類嗎?

程序我是看明白了,他想調用AreaOfficeUtils類的getOfficeList(獲取當前用戶有權限訪問的部門方法),再utils包下就3個工具類,經過查找,UserUtils類中,有getOfficeList(獲取當前用戶有權限訪問的部門方法),那就好辦了,類名修改一下即可,再次測試。

校色授權,就顯示了。

但是,我就不明白了,想獲取一個工具類的方法,直接調用不就行了,如果是靜態的方法,直接用類名.調用不更方便。代碼還寫了折磨多行,浪費。
代用的方法和我們預期的一樣靜態的,那就輕松+快樂了。


一行代碼就搞定了。哈哈哈!!!
測試一下,好不好使,對吧

從上圖可以看出,也好使。

dept用戶的辦理權限,我也配置好了,再去待辦任務菜單中,去辦理任務應該就好了,光預測也不行,測試一下保險。

任務辦理完了,在已辦任務菜單中,查看一下任務辦理的詳情不為過吧,
這里演示以,下面查看當前節點信息,debug斷點調試了。


其實,也是那個definitionId=undefined導致的,也是由于獲取的對象不對,這里我直接修改程序。


解決方案:

//修改后的程序 e.setProcDefId(histTask.getProcessDefinitionId());


再次測試

任務辦理完了,在已辦任務(歷史)菜單中,查看一下任務辦理的節點信息不為過吧,

其實,也是那個definitionId=undefined導致的,也是由于獲取的對象不對,這里我直接修改程序。


解決方案:

//修改后的程序 e.setProcDefId(histTask.getProcessDefinitionId());


再次測試

下一個節點是hr,同理hr也需要權限

jsitehr登錄

在待辦任務菜單中,先對待辦任務進行簽收,簽收之后進行辦理。


在已辦任務菜單中,查看當前節點信息

在已辦任務菜單中,查看詳情
節點流轉結束了,jsite發起流程的執行人,查看一下歷史任務應該吧。

先追蹤一下流程詳情

很明顯又是這個問題,大家應該知道怎末改了吧,

再次測試

總上,異?,F象有2種:

  • 在待辦任務/已辦任務/已發任務都會拋出異常,都是由于definitionId=undefined導致的
  • 由于沒有辦理權限導致的403
    到此,一個完整的工作流走完了。
  • 補充,在待辦任務菜單中會出現2種業務場景,上明只講了一種,直接在待辦任務列表中簽收任務,然后辦理,已經簽收的任務,另外一種情況就是,我還未簽收,但是,我想先不簽收,先查看一下節點信息和流程詳情,也符合業務需要,這樣需要在待辦任務中添加這種業務場景。

    當前屬于未簽收的業務場景:




    解決方案:

    //源程序// e.setProcDefId(pd.getId());//修改后e.setProcDefId(task.getProcessDefinitionId());



    源碼附上:

    /*** 獲取待辦列表* @param procDefKey 流程定義標識* @return*/public Page<Flow> todoList(Flow act){String userId = UserUtils.getUser().getLoginName();//ObjectUtils.toString(UserUtils.getUser().getId());Page<Flow> result = new Page<Flow>();List<Flow> flowList = new ArrayList<Flow>();// =============== 已經簽收的任務 ===============TaskQuery todoTaskQuery = taskService.createTaskQuery().taskAssignee(userId).active().includeProcessVariables().orderByTaskCreateTime().desc();// 設置查詢條件if (StringUtils.isNotBlank(act.getProcDefKey())){todoTaskQuery.processDefinitionKey(act.getProcDefKey());}if (act.getBeginDate() != null){todoTaskQuery.taskCreatedAfter(act.getBeginDate());}if (act.getEndDate() != null){todoTaskQuery.taskCreatedBefore(act.getEndDate());}result.setCount(todoTaskQuery.count());// 查詢列表List<Task> todoList = todoTaskQuery.list();for (Task task : todoList) {Flow e = new Flow();e.setTaskId(task.getId());e.setTaskDefKey(task.getTaskDefinitionKey());e.setTaskName(task.getName());e.setAssignee(task.getAssignee());e.setCreateTime(task.getCreateTime());e.setExecutionId(task.getExecutionId());e.setVars(task.getProcessVariables());ProcessDefinition pd = ProcessDefCache.get(task.getProcessDefinitionId());//源程序// e.setProcDefId(pd.getId());//修改后e.setProcDefId(task.getProcessDefinitionId());e.setProcDefname(pd.getName());e.setProcDefKey(pd.getKey());e.setProcDefversion(pd.getVersion());e.setProcInsId(task.getProcessInstanceId());e.setStatus("todo");flowList.add(e);}// =============== 等待簽收的任務 ===============TaskQuery toClaimQuery = taskService.createTaskQuery().taskCandidateUser(userId).includeProcessVariables().active().orderByTaskCreateTime().desc();// 設置查詢條件if (StringUtils.isNotBlank(act.getProcDefKey())){toClaimQuery.processDefinitionKey(act.getProcDefKey());}if (act.getBeginDate() != null){toClaimQuery.taskCreatedAfter(act.getBeginDate());}if (act.getEndDate() != null){toClaimQuery.taskCreatedBefore(act.getEndDate());}// 查詢列表List<Task> toClaimList = toClaimQuery.list();for (Task task : toClaimList) {Flow e = new Flow();e.setTaskId(task.getId());e.setTaskDefKey(task.getTaskDefinitionKey());e.setTaskName(task.getName());e.setAssignee(task.getAssignee());e.setCreateTime(task.getCreateTime());e.setExecutionId(task.getExecutionId());e.setVars(task.getProcessVariables());ProcessDefinition pd = ProcessDefCache.get(task.getProcessDefinitionId());//源程序// e.setProcDefId(pd.getId());//修改后e.setProcDefId(task.getProcessDefinitionId());e.setProcDefname(pd.getName());e.setProcDefKey(pd.getKey());e.setProcDefversion(pd.getVersion());e.setProcInsId(task.getProcessInstanceId());e.setStatus("claim");flowList.add(e);}logger.info("==FLOWABLE LIST=="+JsonMapper.toJsonString(flowList));result.setList(flowList);return result;}

    總結

    以上是生活随笔為你收集整理的SpringBoot集成Flowable_Jsite已发任务菜单报500的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。