电话 8000-111-2626

# 低代码使用说明、经典案例及常见异常

# 七巧低代码低代码平台可使用低代码的地方及使用说明

# 1.流程:

# 连线判断脚本模式

流程节点连线判断,通过脚本可实现各种形式的校验来判断当前流程可否流转(该低代码需返回‘false’或'true',false表示不可流转,true表示可流转)

(function(){
   var doc = $.context.getCurrentDocument();
   var count = doc.getElementByName("数量").getIntValue();
   return count<1000;
})()
# 人工任务路由脚本模式

流程人工任务审批人路由脚本模式指定审批人,获取表单人员单选控件对应用户作为节点审批人(该低代码需返回User对象或List对象)

(function(){
   //获取当前文档
   var doc = $.context.getCurrentDocument();
   //获取用户id
   var userId = doc.getElementByName("项目队长").getValue();
   //调用通讯录接口,通过userId获取对应User对象,并返回
   return $.contact.getUserById(userId);
})()
# 系统任务

系统任务可执行用户自定义的任意行为,代码示例表示流程流转至该系统任务时发送站内信给用户(该低代码不需返回值)

(function(){
   //获取当前文档
   var doc = $.context.getCurrentDocument();
   //获取用户id
   var userId = doc.getElementByName("项目队长").getValue();
   //自定义消息内容
   var subject = "消息标题";
   var context = "消息内容";
   //发送七巧低代码站内信
   $.message.sendGeneralStationMessage(subject,context,userId);
})()
# 按钮执行前后事件

流程按钮(办理,驳回,终止)提供执行前后事件,选择脚本模式时,用户可自定义行为;代码示例表示按钮执行前,修改表单值

(function(){
    var doc = $.context.getCurrentDocument();
    doc.addElement("姓名","steven");
    doc.addElement("手机号码","138****0000");
})()

# 2.业务建模:

# 按钮执行前后事件

与流程按钮执行前后事件类似

(function(){
    var doc = $.context.getCurrentDocument();
    doc.addElement("姓名","steven");
    doc.addElement("手机号码","138****0000");
})()
# 消息通知事件指定接收用户

触发事件消息通知事件,可通过低代码指定消息接收用户,该低代码需返回用户对象或用户集合对象(User/List

(function(){
   //获取当前用户id
   var userId = $.context.getCurrentUserId();
   //调用通讯录接口,通过userId获取对应User对象,并返回
   return $.contact.getUserById(userId);
})()
# 自定义按钮

与流程系统任务类似,无需返回值

(function(){
   //获取当前文档
   var doc = $.context.getCurrentDocument();
   //获取用户id
   var userId = doc.getElementByName("项目队长").getValue();
   //自定义消息内容
   var subject = "消息标题";
   var context = "消息内容";
   //发送七巧低代码站内信
   $.message.sendGeneralStationMessage(subject,context,userId);
})()
# 自定义页面

自定义页面相关内容请查看“自定义页面使用指南”

# 经典案例

# 1. 生成入库单

# 需求场景和注意点:

添加采购订单后,需要对订单进行入库的操作。 目前入库的方式是选择采购订单,填写入库明细是需要手动选择采购明细,比较麻烦。所以需要用低代码,在采购单列表的操作栏增加一个添加按钮,按钮绑定采购入库表,点击按钮,自动获取这行采购单的数据,通过低代码把数据写进入库表相应的字段中,包括采购编号、供应商、入库明细等

# 代码示例:
(function(){
   var appId= $.context.getCurrentApplicationId();
   var originalDocument = $.context.getHttpRequest().getAttribute("document");
   var purchaseNumber = originalDocument.getElementByName("采购编号").getValue();
   var supplier = originalDocument.getElementByName("供应商名称").getValue();

   var storageDoc = $.context.getCurrentDocument();
   storageDoc.addElement("采购编号",originalDocument.getId());
   storageDoc.addElement("供应商名称",supplier);

   var storageDetailDocs = new Packages.java.util.ArrayList();
   var subOriginalDocuments = $.form.getSubFormDocumentsByName(originalDocument.getId(),"采购编号","采购明细",appId);
   for(var index=0;index<subOriginalDocuments.size();index++){
   	var subOriginalDocument = subOriginalDocuments.get(index);
       var name = subOriginalDocument.getElementByName("产品名称").getValue();
       var number = subOriginalDocument.getElementByName("采购编号").getValue();
       var price = subOriginalDocument.getElementByName("采购单价").getValue();
       var nonStorageNumber = subOriginalDocument.getElementByName("待入库数量").getValue();
       var storageNumber = subOriginalDocument.getElementByName("采购数量").getValue();

       var storageDetailDoc = $.form.createEmptyDocument(appId,"入库明细");
       storageDetailDoc.addElement("产品名称",subOriginalDocument.getId());
       storageDetailDoc.addElement("入库编号",storageDoc.getId());
       storageDetailDoc.addElement("采购单价",price);
       storageDetailDoc.addElement("待入库数量",nonStorageNumber);
       storageDetailDoc.addElement("入库数量",nonStorageNumber);

       storageDetailDocs.add(storageDetailDoc);
   }
   storageDoc.addElement("入库明细",storageDetailDocs);
})()

# 2. 添加子表数据时,获取主表ID填入子表外键

# 需求场景和注意点:

客户与跟进记录,在客户列表中添加一个【添加跟进】按钮,然后绑定跟进记录表单,希望添加的跟进记录自动关联到客户信息,可在添加按钮的执行后写入此代码

# 代码示例:
(function(){
   var appId= $.context.getCurrentApplicationId();
   var originalDocument = $.context.getHttpRequest().getAttribute("document");
   var name = originalDocument.getElementByName("客户名称").getValue();

   var storageDoc = $.context.getCurrentDocument();
   storageDoc.addElement("所属客户",originalDocument.getId());
})()

# 3. 业务建模,表单提交时校验

# 需求场景和注意点:

添加报销单,获取报销总金额,小于100则不允许提交并提示“金额小于100,不允许提交;请累积金额达到100再提交”

# 代码示例:
(function(){
   //获取提交表单
   var doc = $.context.getCurrentDocument();
   //获取总金额控件值
   var count = doc.getElementByName("总金额").getIntValue();
   if(count<100){
       //创建校验消息对象
       var message = $.validate.create();
       message.addError("金额小于100,不允许提交;请累积金额达到100再提交");
       return message;
   }
})()

# 4. 获取表单各类型控件值

# 需求场景和注意点:

获取表单各类型控件值及返回数据类型说明(单行文本,数字控件,人员单选,人员多选,部门单选,部门多选,子表单)

# 代码示例:
(function(){
   //获取当前文档
   var doc = $.context.getCurrentDocument();
   //获取单行文本控件值(返回类型:String)
   var text = doc.getElementByName("姓名").getValue();
   //获取数据控件控件值(返回类型:int)
   var age = doc.getElementByName("年龄").getIntValue();
   //获取子表单控件值(返回类型:List<Document>)
   var subDocuments = doc.getElementByName("成绩单").getSubDocuments();
   //获取人员单选控件值(返回类型:String)
   var userId = doc.getElementByName("班主任").getValue();
   //获取人员多选控件值(返回类型:JSONArray)
   var userIds = doc.getElementByName("任课老师").getValue();
   //获取部门单选控件值(返回类型:String)
   var deptId = doc.getElementByName("部门单选").getValue();
   //获取部门多选控件值(返回类型:JSONArray)
   var deptIds = doc.getElementByName("部门多选").getValue();
})()

# 5. 发送站内信通知指定用户

# 需求场景和注意点:

提交项目申请表,并发消息通知【项目队长】人员单选控件指定用户

# 代码示例:
(function(){
   //获取当前文档
   var doc = $.context.getCurrentDocument();
   //获取用户id
   var userId = doc.getElementByName("项目队长").getValue();
   //自定义消息内容
   var subject = "消息标题";
   var context = "消息内容";
   //发送七巧低代码站内信
   $.message.sendGeneralStationMessage(subject,context,userId);
})()

# 6. 创建空表单,复制,并保存表单

# 需求场景和注意点:

新建学生表,给姓名控件及年龄控件赋值,保存

# 代码示例:
(function(){
   var appId =$.context.getCurrentApplicationId();
   var doc = $.form.createEmptyDocument(appId,"学生表");
   doc.addElement("姓名","steven");
   doc.addElement("年龄",24);
   $.form.saveFormDocument(doc,appId);
})()

# 7. 业务建模消息发送事件,通过低代码指定消息接收用户

# 需求场景和注意点:

该低代码需返回用户对象或用户集合对象(User/List

# 代码示例:
(function(){
   //获取当前用户id
   var userId = $.context.getCurrentUserId();
   //调用通讯录接口,通过userId获取对应User对象,并返回
   return $.contact.getUserById(userId);
})()

# 8. 修改或添加控件值,并保存(常用于按钮执行前事件或系统任务)

# 需求场景和注意点:

注意点:该类型低代码只需要修改表单控件值,不需保存表单,因为七巧低代码表单存在版本概念及服务器会自动保存表单,若低代码中保存会报错

# 代码示例:
(function(){
   var doc = $.context.getCurrentDocument();
   doc.addElement("姓名","steven");
   doc.addElement("手机号码","138****0000");
})()

# 常见异常

# 1.常量未定义

代码示例:

(function(){
   var context = "任务名称";
   var receiveUserIds = $.context.getCurrentUserId();
   $.message.sendGeneralStationMessage(subject, context, receiveUserIds);
})()

异常信息:

[org.mozilla.javascript.EcmaError: ReferenceError: "subject" is not defined. (12321312_5e1fde77fb38aca44a96b7c6#4)]

原因: 低代码未定义“subject”变量

# 2.使用未定义方法

代码示例:

(function(){
   var doc = $.context.getCurrentDocument();
   var userId = doc.getElementByName("人员单选1").getvalue();
})()

异常信息:

[org.mozilla.javascript.EcmaError: TypeError: Cannot find function getvalue in object cn.com.do1.do1cloud.bpms.form.document.model.StandardElement@a729d70d. (12321312_5e1fde77fb38aca44a96b7c6#3)]

原因: StandardElement中value对应的getter方法为getValue(),而不是getvalue()

# 3.空指针异常

代码示例:

(function(){
   var appId = $.context.getCurrentApplicationId();
   //构建控件值键对
   var fieldMap = new Packages.java.util.HashMap();
   //表单名称
   var formName ="测试表单a";
   //获取文档集合
   var docs =  $.form.getFormDocumentsByFieldNameAndValue(appId, formName, fieldMap);
   for(i=0;i<docs.size();i++){
       $.log.info("{}+{}={}",1,2,3);
   }
})()

异常信息:

[org.mozilla.javascript.EcmaError: TypeError: Cannot call method "size" of null (12321312_5e2008b8fb38aca44a96b7cd#9)]

原因: 返回的docs对象为null,无法调用size(),调用对象方法前需判空,防止空指针异常

1 / 0