电话 400-111-2626

# 使用教程

# 使用流程

(1)PC/移动端业务建模新增页面

image.png

(2)引入自定义页面组件

image.png

(3)编写前后端代码

a.时序图:

image.png

b.前端代码

html代码示例:

<!DOCTYPE html>
<html>

  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>demo</title>
  </head>

  <body>

  </body>
</html>

c.后端代码

代码示例:

var API = {
     hello:function(name){
             FUNC.log("log hello"+name);
             return "hello "+name;
     },
     add:function(a,b){
             return FUNC.add(a,b);
     },
     getUserId:function(){
             return FUNC.getUserId();
     }
 }

 var FUNC = {
     log:function(msg){
             $.log.info(msg);
     },
     add:function(a,b){
             var c = a+b;
             $.log.info("add方法的执行前,a={},b={}",a,b,c);
             $.log.info("add方法的执行后,result={}",c);
             return a + b;
     },
     getUserId:function(){
             return $.context.getCurrentUserId();
     }
 }

代码说明:后端代码中必须声明API对象,用于定义rest接口供前端调用,用户可以定义多级方法提高代码可读性和可拓展性,可自行定义方法或调用七巧低代码系统函数库实现业务

d.前后端代码交互规则

代码示例:

let params = [5,2]
   applyApi('add', params).then(response => {
       if (response.data.code === 0) {
            // 调用成功业务代码
             console.log('调用成功',response.data)
       }else{
             console.log('调用失败')
       }
   })

交互原理:

function applyApi(name,...params){
 return new Promise(function(resolve, reject){
      // 在iframe中
     if (self != top) { 
        // 调试模式
         if(parent.window && parent.window.triggerSocket){
           console.log('当前在调试模式的iframe里',parent.window.triggerSocket)
          parent.window.triggerSocket(`REST.API.${name}(${params})`);
         }else{
         // 预览模式
          let obj = {
             data: {
                 code: 0,
                 data: '预览模式下的测试数据',
                 msg: "执行成功"
             }
          }
          resolve(obj)
         }
         return false
     }
     // 获取相关参数和ID属性 
     let token = getQueryVariable("X-Auth0-Token")
     let applicationId = getQueryVariable("applicationId")
     let businessId = getQueryVariable("businessId")
     let origin = window.location.origin
     // 请求
     var xhr = new XMLHttpRequest();
     xhr.open("POST", `${origin}/dev-runtime/api/v1/runtime/business/${applicationId}/${businessId}/custompage/code/execute`, true);
     // 添加http头,发送信息至服务器时内容编码类型
     xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
      //设置请求头
     xhr.setRequestHeader("X-Auth0-Token",token); 
     // 必填参数
     let paramsData = {}
     paramsData.code = `REST.API.${name}(${params})`
     paramsData.methodName = name
     paramsData.applicationId = applicationId
     paramsData.businessId = businessId
     // 必填参数 end
     xhr.send(JSON.stringify(paramsData));
     xhr.onreadystatechange = function() {
         if(xhr.readyState == 4 && xhr.status == 200) {
          let obj = {
             data: JSON.parse(xhr.response)
          }
          resolve(obj)
         }
     };
     // 请求结束
 })
}
// 获取url参数
function getQueryVariable(variable){
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    for (var i=0;i<vars.length;i++) {
        var pair = vars[i].split("=");
        if(pair[0] == variable){return pair[1];}
    }
    return(false);
}

代码说明:applyApi是一个Promise,用来定义和接参完成用户调用自定义API函数的桥,将获取到的相关参数以原生的ajax发起请求。getQueryVariable是一个用来获取url接口必填的参数内容。

(4)调试并发布

详情请见:功能介绍->IDE编辑器与功能介绍->调试器

# 入门案例

场景描述:使用自定义页面在七巧业务系统中镶嵌第三方系统页面

操作步骤:

  1. 新建一个页面,并拖拉拽自定义页面组件进入当前页面

image.png

  1. 点击「点击编写代码」进入代码编写页面

image.png

  1. 编写代码

image.png

<!DOCTYPE html>
<html>
  <head>
    <title>w3school</title>
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
    <style type="text/css">
      html,body {
        height: 100%;
        width: 100%;
      }
      *{
        margin: 0;
        padding: 0;
      }
      #sougou_iframe {
        height: calc(100% - 50px);
        width: 1px; 
        min-width: 100%; 
        *width: 100%;
        border: none;
      }
    </style>
  </head>
  <body>
    <div style="overflow: auto;-webkit-overflow-scrolling:touch;width:100%;height: 100%">
      <iframe id="sougou_iframe" name="sick_status" src="https://www.w3school.com.cn/js/js_intro.asp"></iframe>
    </div>
  </body>
</html>
  1. 保存并发布后在运行端查看效果

image.png

1 / 0