# 一、前端常见问题排查

# 融合流程没有转发按钮?

默认的固定外框是左右布局(是专门针对cmi写的),这种固定外框是把转发按钮去掉了的。

需要检查如下几个点:

  1. 融合流程是否配置外框,外框上是否配置了转发按钮
  2. 当前节点权限是否勾选了转发按钮
  3. 高级设置是否配置了允许转发
  4. 当前环境是否安装有转发插件(这个也影响显隐控制)

# 方法重复执行,多个消息监听?

点击按钮,父页面只发送了一条信息给中间表单,第三方确回传了两个消息给父页面。

排查问题方向: 页面是否做了多个window.addEventListener('message', fn) 离开页面是否及时卸载 window.removeEventListener事件

const fn = ()=> {
  // 业务方逻辑
}
// 事件监听
window.addEventListener('message', fn)
// 事件卸载,离开页面时,及时卸载事件
window.removeEventListener('message', fn)

# 融合流程按钮点击没反应?

建立起了消息监听,这种一般是第三方没有回传点击按钮的消息到外框页面。 我们可以通过接口来看按钮点击第三方有无回传消息? 如何检查:

  1. 点击按钮是否有发的消息: 1747274885335.png

  2. 检查是否有接收消息: 1747274906566.png

如果上图接收的接口没有,只有发的情况,说明是第三方未正确回传消息给外框,则需要第三方正确回传消息。

# 提交后页面未关闭?

PC端检查以下几点:

  1. 检查当前浏览器是否是无痕模式打开,无痕模式不支持关闭(浏览器限制)
  2. 如果为非无痕模式,则看下第三方回传消息体内容是否有preventClose参数,这个参数会阻止关闭页面。
  3. 业务方是否调用了REFRESH方法通知刷新。如果提前通知了刷新,会导致页面重新加载不会再关闭。
  4. 待办节点是否是同一处理人。 例如:
window.parent?.postMessage({
    success: true,
    submitType: 'SUNMIT',
    formData: values,
    messageType: 'GET_FORM_DATA', 
    actionInfo: {
      // 阻止页面关闭
      preventClose: true
    }
  },
  * //父页面地址
);

移动端检查以下几点:

  1. 第三方回传消息体内容是否有preventClose参数。
  2. 业务方是否调用了REFRESH方法通知刷新。如果提前通知了刷新,会导致页面重新加载不会再关闭。
  3. 待办节点是否是同一处理人。
  4. 是否存在上一个页面。
window.parent?.postMessage({
  messageType: 'REFRESH',
}, '*');

# 融合流程表单区域空白?

  1. 先检查第三方页面是否有报错
  2. 检查详情接口loadPageDto中pageUrl是否有值
  3. 如果接口没返回pageUrl检查表单权限配置是否配置url
  4. 如果上诉无问题,浏览器检查哈iframe元素url是否正确、iframe元素高度是否不为0,或者排查元素是否被隐藏等原因。

# 如何通过事项状态控制显隐?

# 1. 添加页面入参

在外框页面点击页面入参,增加页面入参参数。 1747275026751.png

# 2. 配置表达式

通过配置表达式的值来控制显隐,支持的事项状态值:

待发: READY 
已发: SENT
待办:PENDING
已办:DONE
撤销:REVOKE

1747275064723.png

# 外框插入按钮相关问题

# 1. 插入按钮是否可以调整顺序?

场景:这个自定义按钮。如果我有一个主要按钮(蓝色),一个次要按钮(灰色)。需要放在不同的位置,而不是连在一起。这个按钮位置有办法控制嘛? 答:不支持

插入的按钮是批量插入的按钮,插入的安置目前仅支持批量按钮插入指定的位置,批量按钮中单独的按钮不能指定位置插入。

# 2. 三方的自定义按钮想在特定的节点展示,这个能控制嘛?

插入时机由第三方自己决定的, 外框不会控制第三方自定义按钮的显隐状态。第三方可通过当前节点code来自行控制在哪个节点展示(业务方根据自己需求决定)。

# 融合流程如何判断页面是否绑定外框?

  1. 根据url判断是否有_layoutApp、_layoutPage(2.6以后),_frameApp(2.6之前)。
  2. 根据bpm详情接口返回值layoutInfo

# 融合流程页面未加载完,按钮可点击问题?

我们可以通过提前以下消息代码到index.html文件head标签下第一个script标签中来解决此问题。这样达到的效果就是:中间表单未完全加载完的情况下,按钮点击是无效果的。

window.parent?.postMessage({ 
    hasListener: true, 
}, '*');

实现原理:按钮点击,利用iframe onLoad事件,外框自己做了加锁判断,未onLoad时,则按钮不可点击,当onLoad时,第三方页面如果未完全加载完,就需要利用hasListener的消息来,此时加载html第一行代码,会发送消息到外框表示需要建立监听,此时第三方表单的监听message事件因为没有加载建立,外框点击按钮发送消息过去,第三方不会处理,则能达到页面未完全加载完按钮不可点击的目的。

# 二、后端常见问题排查

编撰人:xuxyyf、xusx