宜搭问题总结

文章目录

中级认证遇到的问题:

关联表单中数据不可使用

关联表单中的数据不可以直接拿来使用,需要使用另一个文本框,将关联表单中的数据级联到普通文本当中,然后来使用这个普通文本中的数据。

高级级认证遇到的问题:

1.数据源

当想要在自定义表单中读取到令一个普通表单的数据时,此时需要添加远程API,将另一张表的组件与自定义表单中的组件连接,并且其中的请求地址需要对照着文档来,
当为查询时:使用的是/v1/form/searchFormDatas.json,当自定义表单中需要多条数据(数组)而不简简单单是一条数据时,最后的返回中也需要有数组类型的变量来存储数据
在这里插入图片描述

当为更新时:使用的是/v1/form/searchFormDatas.json
在这里插入图片描述

当为删除时:使用的是/v1/form/deleteFormData.json
在这里插入图片描述
并且当为查询时,需要将自动加载打开,而删除和更新时,需要关掉,并且请求方法为post方式
在这里插入图片描述

2.顶部新增操作条

当点击顶部的按钮时,需要弹出一个表单,此时需要一个对话框,对话框是在其他表单之上的,是在一些操作条件下才会触发的,所以写过对话框之后需要对其隐藏。而顶部的对话框有确认和取消按钮,此时需要写js代码来对这两个按钮进行控制,此时可以在对话框组件中及逆行动作设置中进行管理。
在这里插入图片描述

2.1对已有数据进行修改

此时也是弹出一个对话框,并且要求原来的数据还在上面。更新时,需要一个formInstId,此时可以在对话框中设置一个普通的文本,并存着当前对话框的formInstId。

3.分页操作

1.在分页设置中进行设置。
在这里插入图片描述

2.分页操作只在分页设置进行限值是不起效的,还需要在配置数据源的时候,在代码中进行限制的,在查询的js代码中,
在这里插入图片描述

currentPage
totalCount:总数,虽然在后续的代码中没有用到这个变量,但是这个必须设置,并且名字还得是totalCount。//?
这两个参数是系统自动读出来的。///???
3.远程API中添加请求参数。
在这里插入图片描述

4.JS代码:

this.$(‘dialog_l2iqono1’).show()//将组件dialog_l2iqono1呈现出来,一般在点击某些按钮出来个对话框时使用
this.$(‘dialog_l2iqono1’).hide()//将组件dialog_l2iqono1呈现出来,一般在点击取消/确认按钮时生效
this.$(‘dialog_l2iqono1’).load()//重新加载dialog_l2iqono1组件,一般在新增/修改/删除过一些内容,页面的数据发生变更时需要。

5.请求地址

在新的版本当中,默认是支持不用加前面的地址:
在这里插入图片描述
加上反而会出跨域问题的错误。

工作中遇到的问题

1.自定义表单中读取普通表单数据

1.1方法1

在这里插入图片描述
可以在自定义表单中先插入一个表格,将每个字段进行命名,然后将每个字段在数据源中的远程API的数据处理中进行赋值
在这里插入图片描述

1.2方法2

第二种方式是在数据源中的远程API的请求参数中进行赋值
在这里插入图片描述
在这里插入图片描述

2.灵活使用单选组件

当调用一个函数时,返回值只有true和false,但是我们的想要的结果是两个名词,此时就可以使用到单选组件。如我们想要得到结果是PC端和移动端其中之一,调用的函数是this.utils.isMobile(),此时可以将true设置为移动端,false设置成PC端
在这里插入图片描述

3.限制表单提交次数

可以在表单验证处进行限制,选择公式检验EQ(COUNT(“FORMUuid”),限制次数)
在这里插入图片描述

在这里插入图片描述

4.调用同一个函数,有的可以获得用户id,有的却不可以

请添加图片描述
请添加图片描述
原因:这里的用户ID使用的是数值组件,而有的用户ID是以0开头的,所以这时是不符合数值的要求,所以得不到用户ID

5.自动加载

在一个系统中,有自定义页面,也有管理页面。
要求:打开自定义页面或者管理页面时,会将该用户的信息记录到“操作日志”表单中,当对管理页面实现操作时,是在首页进行操作的,而对自定义页面操作时,是在自定义页面进行操作的,并且在配置自定义页面的数据源时,需要打开自动加载,而管理页面不用。

当一些数据需要在首页显示数据的,则需要设置为自动加载,如果需要进行操作才会显示的,则需要设置为非自动加载

6.自定义页面和普通表单的优劣

自定义表单:
优势:可以对字段的唯一标识进行修改;可以对字段组件的列宽进行限制;组件库里的组件比较多。
劣势:自定义表单在权限设置方面非常不好用,只有对成员的限制,没有对字段的限制。
普通表单:
优势:普通表单在权限方面的设置比较全面
劣势:组件库比较少(但是可以从自定义表单中复制过来)。

7.数据提交页

isSubmissionPage,这个的应用场景可以是:当一个“成员”(这里称为上级)通知其他成员去填报一些信息,但是选择通知成员和要填报的信息在一个表单中,为了使上级看不到要填报的信息,只有要通知的人.
步骤1:
点击要隐藏的表单,选择默认状态为普通
在这里插入图片描述

步骤2:
创建一个变量,并在表单状态处进行绑定
在这里插入图片描述

步骤3:
在didMount函数中进行判断
在这里插入图片描述

8.子表单和普通表单

子表单和普通表单的操作有一些差异,子表单获取某个组件的数据时,需要先获取一行数据,然后再用唯一标识获取列的数据,之后就会定位到精准的数据。

9.选项卡切换触发

可以设置一个动作,选项卡触发时会触发。但是,当它默认的选项卡(第一个),没有去切换的时候,是不会去触发的,所以如果想要在选项卡中进行一些赋值的操作,不能忘掉第一个选项卡的信息,所以可以在didMount函数中进行赋值,来当作第一个选项卡的默认信息。

10.表单页面和管理页面

表单页面就是对表单的设计什么的,而管理页面是只可以查看,新增,删除数据的,是不可以看到表单是怎么设计的。表单页面是给设计人员访问的,管理页面是给应用者访问的。

11.更新日志

更新日志的目的是让用户更加清晰的了解系统每次的优化在哪里,如何操作。
设计:有两个表,一个是普通表单,一个是自定义表单。

1.获取数据源,并在表单中循环

用来存储数据的表:
在这里插入图片描述
用来展示页面的表:
在这里插入图片描述

由此可以获得,他是由一个分组包着一个分组。并且日期、主题和子表单(更新类型、标题、子标题、内容)是一个层级,进行循环的时候,如果不知道哪一层到底绑定哪一个变量,哪一层到底循环那个数组,这可以去console中进行查看。

数据源API数据处理:

function didFetch(res) {
  console.log("res", res)
  //用来判断
  let Uuid = []; //保存Uuid
  let lx = [];//类型
  let bt = [];//标题
  let zbt = [];//子标题
  let nr = [];//内容
  //用来存数据
  let newArr = [];
  let lxArr = [];//类型数组
  let btArr = [];//标题数组
  let zbtArr = []//子标题数组
  let lxv = {};
  let btv = {};
  let zbtv = {};

//子表单:tableField_l5yp4xca
 let v={
    text_l5t9b3fq: res.data[0].formData.textField_l5svm2dz, //主题
    text_l5t9b3fb: res.data[0].formData.dateField_l5svm2dy  //日期
 }

  // console.log("主题",text_l5t9b3fq)
    res.data[0].formData.tableField_l5yp4xca.map(item => {
    let strDL2 = item.selectField_l5svm2e0;//更新类型
    let n2 = lx.lastIndexOf(strDL2);//上次出现的地址,即数组下标
    let strDL3 = item.textField_l5svm2ej;//标题
    let n3 = bt.lastIndexOf(strDL3);
      let strDL4 = item.textField_l5w5wbuq;//子标题-Uuid
    let n4 = zbt.lastIndexOf(strDL4)
    let strDL5 = item.textareaField_l5svm2e2;  //内容
    let n5 = nr.lastIndexOf(strDL5)
    //第一次出现的话,先把主题对象存进去,
  
    if (n2 < 0) {  //第一次出现的类型
      //父节点+类型节点
      lx.push(strDL2)
      lxv = {
       
        lx: strDL2,
      }
      lxArr.push(lxv)
    }
    if (n3 < 0) {  //第一次出现的标题
      //父节点+标题节点
      bt.push(strDL3)
      btv = {
        father: strDL2,
        bt: strDL3
      }
      btArr.push(btv)
    }
    if (n4 < 0) {  //第一次出现的子标题
      //父节点+子标题节点
      zbt.push(strDL4)
      zbtv = {
        father: strDL3,
        zbt: item.textField_l5svm2ei,
        nr: strDL5,
        haveTP: (item.imageField_l5svm2ek ? "NORMAL" : "HIDDEN"),
        tp: JSON.parse((item.imageField_l5svm2ek ? item.imageField_l5svm2ek : "[{\"previewUrl\":\"\"}]"))[0].previewUrl
      }
      zbtArr.push(zbtv)
    }
  });
  let vArrTemp = []
  lxArr.map(item_lx => { //类型
    let lxArrTemp = []
    btArr.map(item_bt => {  //标题
      let btArrTemp = []
      zbtArr.map(item_zbt => {  //遍历最末端的子标题
        if (item_bt.bt == item_zbt.father) {
          btArrTemp.push(item_zbt)  //属于父节点的归类到标题数组btTemp中
        }
      })
      item_bt.son = btArrTemp  //把归类好的数组,作为子节点son存放
      // console.log("item_lx", item_lx)
      // console.log("item_bt", item_bt)
      if (item_lx.lx == item_bt.father) {

        lxArrTemp.push(item_bt)  //属于父节点的归类到类型数组lxTemp中
      }
    })
    item_lx.son = lxArrTemp
    vArrTemp.push(item_lx)
  })
  v.son = vArrTemp;
  // newArr.push(v)
  console.log("result", v)
  // console.log("zbArr", zbtv)
  return v; // 重要,需返回 content
}

这里采用类似于链表的方式,从子标题开始向外循环,因为有的内容没有子标题,所以这里给子标题设置了一个uuid,即使没有子标题,也能去找他的father(标题),(设置子标题UUID的原因:如果子标题为空,则子标题.father会报错,空指针。)这里对每个无论是有子标题的还是没有子标题的都往zbtArr中进行存储UUID。

12.视图的作用

在报表中,进行选择列的时候,只能够从一个数据源进行选择,如果一个表,它包含子表,此时就不能同时选择两个表,这时可以去
在这里插入图片描述
这里进行创建一个视图,在视图中,我们将两个表(主表和子表)进行合并,然后再创建报表时,我们就可以将我们创建的视图当作数据源来进行引用列。

13.数据源-连接器

选择我们要使用的连接器,选择过后,便可得到动作参数
在这里插入图片描述

  const query = {
    "Query": {
      "date": ""//这里是变量赋值
    }
  }
  const inputs = JSON.stringify(query);
  this.dataSourceMap.connector.load({//这里的”connector“是连接器
    inputs: inputs
  })

14.数据源的数据处理和动作面板中的JS代码的关系是?

有时候自己总是不太清楚到底在数据源中的直接进行数据处理,还是在JS代码中进行处理。
一般情况下,在数据源中进行处理后,会返回一个数组,此时我们可以用这个返回的数组数据和表单进行绑定,然后进行循环。(其实这里也可以用我们动作面板中的自定义函数返回的数据进行循环,但不常用。)
在动作面板中的函数一般是当我们要进行一些点击,提交,数值改变,失去焦点等等动作时,会去触发这些函数。

15.提交表单时,往另一个表单写数据

15.1代码方式

首先定义一个数据源,formUuid设置为要写入数据的那个表单,类似于下面的这种。
在这里插入图片描述

15.2非代码方式

这种方式很简单,但是唯一的缺点就是:有延迟
可以在表单事件->公式执行->添加业务关联规则中进行设置,一般我们使用UPSERT,它相比较于UPDATE的区别在于UPSERT可以新增数据,同时也可以添加新数据,而UPDATE只可以更新数据。

16.数据源查询

在最开始学习过程中,所用的查询都没有使用到参数。
在这里插入图片描述
只使用到了formUuid(他是必须的),而在参考文档中
在这里插入图片描述
是可以根据表单中的组件值来查询的。
在这里插入图片描述

迷惑点解答

什么时候直接用组件的唯一标识:其实是不可以直接用的,只是当时的自己弄错了。在这里插入图片描述
这里其实是变量的名字,只不过自己当时以为必须得是唯一标识,这里起的名字,就是之后在表单中要循环的变量名。
什么时候用this.$(),这个this到底指的那个表单:this是当前表单,所能引用的唯一标识也都是该表单中的

17.报表中的图片显示不出来

因为一些前缀的问题,导致图片显示不出来,所以我们要去使用自定义列

MID(图片列,3,len(图片列)-4)

这是老版本的,新版中,可以不用自定义字段,用原来的字段就可以,在表格列->单元格图片中记得选择即可
在这里插入图片描述
在样式中设置图片的显示大小
:root .cell-image{
max-height:100px;
}

18.单行文本和下拉框的选择

单行文本时模糊查询,而下拉框是精准查询,只有把字段全部打上才会出来结果。这个要根据具体的业务场景来选择,并且下拉框是无法与关联表单进行联合的,如果想要联合,还必须使用到单行文本

19.表单中的消息通知和集成自动化中的消息通知的区别

例如:当都是定时提醒时,表单中的消息通知提交后就不能在改了,改了后,消息通知还会按照之前的时间进行操作,而集成自动化不会受到这种影响。

20.当一个必填字段在集成自动化中没有办法赋值时

当一个必填字段在集成自动化中没有办法赋值时,此时可以将必填字段设置为隐藏。
业务场景:一个订单录入表单,但是里面的成员不是"成员组件",而是单行文本组件,这个表单里面没有"成员组件"。
此时会涉及到一个成员对照表,里面有单行文本组件,也有一个成员组件。
还会涉及到一个流程表单,里面有单行文本组件,也有成员组件。
集成自动化:
此时一个用户填写订单录入表单,填写的名字与成员对照表中的文本字段对不上,此时就会走流程表单,经过人审批,然后审批人去填写流程表单中的成员组件,这里会涉及到一个问题:
在这里插入图片描述
(上图是已经设计好的)
当流程表单中的成员字段为必填时,在上图中就会出现,并且还得赋值,但是没有值去给他赋,所以此时就可以将流程表单中的成员组件设置为隐藏必填,这时候在集成自动化中就没有成员必填了。

21.报表中条件样式日期相关

报表中的日期处是有缺陷的,他需要的是时间戳形式,但是却没有timestamp函数,所以一般我们使用的时候最好使用整形,比如将日期设置为倒计时,然后根据倒计时进行判断条件样式。

22.集成自动化中的日期组件

集成自动化中的日期组件在进行条件限制的时候,有介于,早于,晚于等等。介于是需要两个时间的,一个早于,一个晚于(宜搭默认给的只有一个时间,所以会让我们有误解,此时需要再加一个时间限制)。"早于"是时间大的那个数,"晚于"是时间小的那个数,最后取得他们两个的交集。

23.关联业务规则与集成自动化

能使用集成自动化的就使用集成自动化
场景1:当一个表单A新增数据时,同时往另一个表单B新增数据。当A进行修改数据时,将B中的数据也修改,此时应该把之前的那一条进行删除,然后再新增一条。因为在业务关联规则中,新增和删除他的顺序不一定,所以可能会先新增,然后将这一条给删除。这里使用集成自动化就不会涉及到这种情况。
场景2:一个导入表与一个正式表(正式表比导入表多一个UUID,因为导入的时候他不会自动生成UUID),前提:正式表新增的时候会往其他表A里面添加数据。此时如果使用关联业务规则,导入表会往正式表中加数据,但是结果正式表他不能往A表中写数据。但是这里使用到集成自动化时就不会出现加不了数据的情况。

24.map循环中的item指的是什么

connectorItemAll.data.map(connectorItem=>{

}

connectorItemAll是根据连接器查询到的数据,然后要对之进行循环。
当从连接器中获取数据时的结构:在这里插入图片描述

当从表单中获取数据时的结构:
在这里插入图片描述
循环的时候,只用循环data里面的就可以了。

25.读取表单数据时的分页

在用数据源进行get表单数据时,此时会默认只读取第一页,我们可以设置每页的pageSize,最大为100,当数据大于100时,我们可以使用下面的方法来实现:
解决方案

  export async function solveData(count, newArr) {
  //数据量大于100时的处理
  for (let i = 0; i < Math.ceil(count / 100); i++) {
    let params = {
      formUuid: "数据源表单formUuid",
      searchFieldJson: JSON.stringify({
        数据源表查询条件组件唯一标识: [window.loginUser.userId] 
      }),
      pageSize: 100,
      currentPage: i + 1
    };
    await this.dataSourceMap.数据源名称.load(params).then(res => {
      newArr.push(...res.data);
    })
  };
  console.log("大于100", newArr);
} 

26.同步/异步

研究一下

27.表单修改过字段后报表无法添加新字段

因为报表的一些特性,当修改表单后,报表无法把新加的字段添加进去,此时不用重新设计报表,只需将表单中的数据全部删除,然后导入有新添加的列的数据,此时报表就可以使用了。

28.卡片

卡片的坑很多
1.卡片需要先把酷应用发布
2.卡片中当你修改了却不生效:延迟很长,改过后过一会再去试
3.卡片中的定义变量没有时间类型,如果想用需要使用
TEXT(DATE(TIMESTAMP(SYSTIME())),“yyyy-MM-dd”),来定义当前时间。

当我们要进行页面跳转的时候(如:跳转到一个自定义页面),不可以直接复制地址栏的地址,而是需要到自定义页面的编辑页面,然后进入到页面发布中,复制页面发布中的地址。

29.toast信息提醒

在这里插入图片描述

若想要对信息提醒的持续时间进行设置,则可以使用 duration:时间

30.改变一些输入框的状态(普通,只读,隐藏)

可以使用变量的方式,也可以使用set的方式
变量的方式:
先在数据源中定义变量,(可以设置默认的状态),然后在状态处进行变量的绑定在这里插入图片描述
,然后我们就可以在一些JS的代码中通过一些情况来改变该变量。

      this.setState({
        isFzr: "NORMAL"
      })

不用变量的方式:
在这里插入图片描述

 this.$('selectField_l78bjer0').set("behavior", "READONLY") 

31.集成自动化:允许自动触发

比如当我们的触发条件是:创建成功,若不勾选允许自动触发,则,他默认是只有我们走表单的新增插入才会触发这个集成自动化,但是当我们写的一些代码或者一些其他的集成自动化,往表单里面写,就不会自动触发这个集成自动化,必须要勾选上这个按钮才可以。
在这里插入图片描述

32.表单中有子表,如何在报表中全部展示

在设计报表中,因为子表单会单独形成一个表单,在选择数据源的时候,只能选择一个表单/视图。所以我们可以把表单和子表单联合成一个视图,此时如何把表单和子表单联系一块,这时可以选择一个实例ID和父实例ID:
在这里插入图片描述
这样在报表中就可以选择这个视图来当作数据源。如果表单中有两个子表单,现在暂时还不能实现全部展示,此时可以将基表和子表单分别做一个视图,然后在报表中做两个报表,分别导入数据源就可以。

成员组件初始化

在初始化成员组件的数据时,需要提供 一个数组对象,里面有id和姓名
[{
value: “109980”,
label: “姓名(花名)”,
}]

关联表单中可以对数据进行筛选

在关联表单中,有很多功能,可以新增关联表单中的数据,可以对关联表单中的数据进行筛选,还可以对当前表单中的数据进行填充
在这里插入图片描述

(坑)关联表单的筛选条件未显示

在这里插入图片描述
在这里插入图片描述
同一个表单里面的两个关联表单,有的可以设置筛选条件,有的不可以设置筛选条件。
原因:被关联的表单必须设置数据的显示列中的提交人/创建时间/修改时间为显示才可以进行筛选
在这里插入图片描述

审批人进行填写字段

有一些需求是申请人填写的信息,然后经过审批,审批人必须指定某一个人进行通知,实现:
1.对审批人要填写的字段设置成必填
2.在流程步骤进行设置
在这里插入图片描述
在这里插入图片描述
此时在审批时,审批人就必须填写落实人才可以同意(审批)

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值