看了一段时间的微信小程序,感觉对一些企业来说,也是可以用起来的。哪怕只是简单的使用。
先发布REST:参照这里:https://www.cnblogs.com/sapSB/p/9968054.html
METHOD IF_HTTP_EXTENSION~HANDLE_REQUEST. DATA: LO_JSON_SER TYPE REF TO ZCL_TREX_JSON_SERIALIZER, LO_JSON_DES TYPE REF TO CL_TREX_JSON_DESERIALIZER, LV_DATA TYPE STRING. DATA: JSON_STRING TYPE STRING. DATA:GT_T005U TYPE TABLE OF T005U. DATA:GW_T005U TYPE T005U. DATA:LV_METHOD TYPE STRING. LV_METHOD = SERVER->REQUEST->GET_HEADER_FIELD( NAME = '~request_method' ). LV_DATA = SERVER->REQUEST->IF_HTTP_ENTITY~GET_CDATA( ). CALL METHOD SERVER->RESPONSE->IF_HTTP_ENTITY~SET_CONTENT_TYPE EXPORTING CONTENT_TYPE = 'application/json'. CASE LV_METHOD. WHEN 'GET'. SELECT * INTO TABLE GT_T005U FROM T005U WHERE SPRAS = '1' AND LAND1 = 'CN'. CREATE OBJECT LO_JSON_SER EXPORTING DATA = GT_T005U[]. CALL METHOD LO_JSON_SER->SERIALIZE. CALL METHOD LO_JSON_SER->GET_DATA RECEIVING RVAL = JSON_STRING. CALL METHOD SERVER->RESPONSE->SET_CDATA( EXPORTING DATA = JSON_STRING ). * REPLACE ALL OCCURRENCES OF ' ' SERVER->RESPONSE->SET_STATUS( CODE = 200 REASON = 'OK' ). WHEN 'POST' OR 'PUT'. JSON_STRING = SERVER->REQUEST->IF_HTTP_ENTITY~GET_CDATA( ). CREATE OBJECT LO_JSON_DES. CALL METHOD LO_JSON_DES->DESERIALIZE( EXPORTING JSON = JSON_STRING IMPORTING ABAP = GW_T005U ). SERVER->RESPONSE->SET_STATUS( CODE = 200 REASON = 'OK' ). * MODIFY GT_T005U FROM GW_T005U. WHEN 'DELETE'. WHEN OTHERS. ENDCASE. ENDMETHOD.
然后就是微信小程序注册了,这里就不说了,自己百度"微信小程序"然后注册。
下面就简单说说微信小程序里的代码了:
整体结构:
用了生成的默认代码当作主页:所以这里app.js就不用加代码了。
因为我们这里加了几个页签块,所以需要在app.json里定义全局页面:pages是所有的页面,window是窗口属性设置,tabBar是窗口下面的页签。
{ "pages": [ "pages/index/index", "pages/order/order", "pages/regin/regin", "pages/logs/logs", "pages/process/process" ], "window": { "backgroundTextStyle": "light", "navigationBarBackgroundColor": "#000000", "navigationBarTitleText": "WeChat", "navigationBarTextStyle": "white" }, "tabBar": { "list": [ { "pagePath": "pages/index/index", "iconPtah": "image/tabBar.jpg", "text": "首页" }, { "pagePath": "pages/order/order", "iconPtah": "image/tabBar.jpg", "text": "主页面" }, { "pagePath": "pages/regin/regin", "iconPtah": "image/tabBar.jpg", "text": "国家地区" }, { "pagePath": "pages/logs/logs", "iconPtah": "image/tabBar.jpg", "text": "LOGS" } ], "backgroundColor": "#32cd32" }, "style": "v2", "sitemapLocation": "sitemap.json", "networkTimeout": { "request": 10000, "downloadFile": 10000 }, "debug": false }
这里定义了5个页签块,但是下面的list中只用了4个,所以也就只会显示4个。
这时候全局的配置完成了。下面再看对应的每个小页签块:
工单页面:order.js
Page({ data: { orderlist: [{ object_id: "0210001233", process_type: "ZSV1", posting_date: "2019-12-30", status: "E0003", zzgroup: "TV1" }, { object_id: "0210001234", process_type: "ZSV2", posting_date: "2019-12-30", status: "E0003", zzgroup: "TV1" }, { object_id: "0210001235", process_type: "ZSV1", posting_date: "2019-12-30", status: "E0003", zzgroup: "TV1" }, { object_id: "0210001236", process_type: "ZSV2", posting_date: "2019-12-30", status: "E0002", zzgroup: "AC1" } ] }, //事件处理函数 bindViewTap: function() { wx.navigateTo({ url: '../regin/regin' }) } })
定义了一个orderlist数组,写死了默认的几条数据,下面有个切换窗口设置,
页面控制:order.json (随便加就行,默认是需要有一个json类型的数据才不会报错)
{ "style": "v2", "sitemapLocation": "sitemap.json" }
页面XML配置:order.wxml 设置5列,循环,每列都引用前面定义的orderlist
<!--index.wxml--> <view class="table"> <!-- <view class="scrollview"> <scroll-view class="scrollx" scroll-x="true" style="100%">--> <view id="title" class="tr"> <text class="DH">单号</text> <text class="LX">类型</text> <text class="RQ">创建日期</text> <text class="ZT">状态</text> <text class="PL">品类</text> </view> <view wx:for="{{orderlist}}" wx:for-index="idx" wx:for-item="item" id="list" class="tr"> <text class="DH">{{item.object_id}}</text> <text class="LX">{{item.process_type}}</text> <text class="RQ">{{item.posting_date}}</text> <text class="ZT">{{item.status}}</text> <text class="PL">{{item.zzgroup}}</text> </view> <!-- </scroll-view> </view>--> </view>
设置CSS:order.wxss
.table {
border: 1rpx solid #ccc;
}
.tr {
display: flex;
justify-content: space-between;
background: #ce9595;
}
.th, .th {
border-right: 1rpx solid #000;
}
.DH {
200rpx;
font-weight: 900;
font-size: 30rpx;
}
.LX {
100rpx;
font-weight: 900;
font-size: 30rpx;
}
.RQ {
200rpx;
font-weight: 900;
font-size: 30rpx;
}
.ZT {
100rpx;
font-weight: 900;
font-size: 30rpx;
}
.XH {
200rpx;
font-weight: 900;
font-size: 30rpx;
}
.PL {
100rpx;
font-weight: 900;
font-size: 30rpx;
}
注*上面的orderlist是固定的值,下面的region是动态取rest的:
regin.js:
var call = require("../util/request.js")
Page({
data: {
orderlist: []
},
//事件处理函数
bindViewTap: function () {
wx.navigateTo({
url: '../logs/logs'
})
},
onLoad:function(){
var that = this;
//调用封装的方法,为了方便我直接在页面加载的时候执行这个方法
// call.getData('posts/1/comments', this.shuffleSuc, this.fail);
call.getData('zrest?sap-client=300', this.shuffleSuc, this.fail);
},
shuffleSuc: function (data) {
var that = this;
that.setData({
orderlist: data
})
//我后面测试了一下,直接this.setData也可以,但是因为我在没有使用封装方法的时候
//this.setData报过错,不能直接用this,所以我在赋值的时候一般都会加上var that = this;
//这句话算是一个不是习惯的习惯
},
fail: function () {
console.log("失败")
},
})
regin.json
{
"style": "v2",
"sitemapLocation": "sitemap.json"
}
regin.wxml
<!--index.wxml--> <view class="table"> <!-- <view class="scrollview"> <scroll-view class="scrollx" scroll-x="true" style="100%">--> <view id="title" class="tr"> <text class="DH">客户端</text> <text class="LX">语言</text> <text class="RQ">国家</text> <text class="ZT">省市</text> <text class="PL">省市描述</text> </view> <view wx:for="{{orderlist}}" wx:for-index="idx" wx:for-item="item" id="list" class="tr"> <text class="DH">{{item.mandt}}</text> <text class="LX">{{item.spras}}</text> <text class="RQ">{{item.land1}}</text> <text class="ZT">{{item.bland}}</text> <text class="PL">{{item.bezei}}</text> </view> <!-- </scroll-view> </view>--> </view>
regin.wxss
.table {
border: 1rpx solid #ccc;
}
.tr {
display: flex;
justify-content: space-between;
background: #ce9595;
}
.th, .th {
border-right: 1rpx solid #000;
}
.DH {
200rpx;
font-weight: 800;
font-size: 25rpx;
}
.LX {
200rpx;
font-weight: 800;
font-size: 25rpx;
}
.RQ {
200rpx;
font-weight: 800;
font-size: 25rpx;
text-overflow:ellipsis;
}
.ZT {
200rpx;
font-weight: 800;
font-size: 25rpx;
text-overflow:ellipsis;
}
.PL {
200rpx;
font-weight: 800;
font-size: 25rpx;
text-overflow:ellipsis;
}
这个省市的页面是调用的接口,所以上面request了。这个是在util里新建的request.js中:
var app = getApp();
//项目URL相同部分,减轻代码量,同时方便项目迁移
//这里因为我是本地调试,所以host不规范,实际上应该是你备案的域名信息
var host = 'https://gjyxxxxxxx.crm.hisense.com:1443/sap/';
/**
* POST请求,
* URL:接口
* postData:参数,json类型
* doSuccess:成功的回调函数
* doFail:失败的回调函数
*/
function request(url, postData, doSuccess, doFail) {
wx.request({
//项目的真正接口,通过字符串拼接方式实现
url: host + url,
header: {
"content-type": "application/json;charset=GBK"
},
data: postData,
method: 'POST',
success: function (res) {
//参数值为res.data,直接将返回的数据传入
doSuccess(res.data);
},
fail: function () {
doFail();
},
})
}
//GET请求,不需传参,直接URL调用,
function getData(url, doSuccess, doFail) {
wx.showLoading({
title: 'Data Loding...',
})
wx.request({
url: host + url,
header: {
"content-type": "application/json;charset=GBK"
},
method: 'GET',
success: function (res) {
doSuccess(res.data);
wx.hideLoading()
},
fail: function () {
doFail();
wx.hideLoading()
},
})
}
/**
* module.exports用来导出代码
* js文件中通过var call = require("../util/request.js") 加载
* 在引入引入文件的时候" "里面的内容通过../../../这种类型,小程序的编译器会自动提示,因为你可能
* 项目目录不止一级,不同的js文件对应的工具类的位置不一样
*/
module.exports.request = request;
module.exports.getData = getData;
好了,下面看看效果吧: