第十二届中国软件杯课程--移动端开发原创
金蝶云社区-陈来珍
陈来珍
5人赞赏了该文章 2635次浏览 未经作者许可,禁止转载编辑于2023年05月22日 10:19:49

一、背景

基于金蝶云苍穹平台开发的应用,可以与移动APP集成,例如云之家、企业微信、钉钉等移动APP。实现多端业务数据实时互联、共享。

二、需求解析

1.常用场景

功能

简介

应用集成

移动端集成苍穹页面

扫码

调用移动端的扫一扫功能

定位

获取定位信息

选择图片/拍照

移动端选择图片/拍照

其他第三方app提供的功能调用

例如企业微信的分享接口

2.A组(学工系统)赛题解析

需求挖掘

实现方案

参考资料

学生课堂签到功能/入学报到等

利用地图控件定位报到或者现场扫码报到

https://vip.kingdee.com/article/224205192453791744

https://vip.kingdee.com/school/liveCourse/322735457992040704

 

苍穹平台扫码登录

企业微信移动端扫码登录苍穹平台

https://vip.kingdee.com/article/214021569763567360

 

校园故障报修功能

利用选择图片/拍照功能上传故障信息图片

https://vip.kingdee.com/article/218099984321581312

 

宿舍申请单/延迟毕业申请等等的审批流集成到移动端审批

消息中心+移动端集成应用

https://vip.kingdee.com/article/443347987486607872

https://mp.weixin.qq.com/s/g75vnElNX1u3an5hVk1n7Q

 

课程评价功能中,提供分享转发功能

利用第三方app提供的分享接口实现,这个要用苍穹自定义控件去调用原生的js代码

https://developer.work.weixin·.qq.com/document/path/97583

https://vip.kingdee.com/school/238380828265371392


3.B组(智慧农业)赛题解析

需求挖掘

实现方案

参考资料

移动端显示环控设备的各个设备情况

可以通过轻分析发布比较酷炫的分析数据到移动端,实时显示设备运转情况。

https://vip.kingdee.com/article/238597297720639232

https://vip.kingdee.com/knowledge/specialDetail/235856897897966336?category=238402970599931648&id=236796118342680320&productLineId=29

 

有紧急异常信息时,通过移动端消息通知对应负责人

移动端消息集成

https://mp.weixin.qq.com/s/g75vnElNX1u3an5hVk1n7Q

 

通过移动端操作设备操作

移动端页面集成

https://vip.kingdee.com/article/344563134742815232

 https://vip.kingdee.com/school/liveCourse/322735457992040704?productLineId=29


 

三、样例开发

1、样例背景:钉钉集成苍穹的移动页面,学生通过移动端定位当前位置并录入相关的报到信息,实现学生无纸化入学报到。

2、开发步骤:

【苍穹页面开发】->【钉钉创建快捷应用】->【钉钉单点登录苍穹配置】->【人员信息同步钉钉】

(1)首先在苍穹平台开发好移动表单页面

image.png


插件开发:主要是点图标时,获取当前定位的位置赋值给当前位置那个字段。(实际业务使用时,可以在点击报到时,再校验当前位置是否在报到城市或者报到指定的经纬度范围内)

package kdec.report;
import java.util.EventObject;
import java.util.HashMap;
import java.util.Map;
import java.math.*;
import kd.bos.bill.AbstractMobBillPlugIn;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.ext.form.control.MapControl;
import kd.bos.ext.form.control.events.MapSelectEvent;
import kd.bos.ext.form.control.events.MapSelectListener;
import kd.bos.ext.form.dto.MapSelectPointOption;
import kd.bos.form.ClientActions;
import kd.bos.form.IClientViewProxy;
import kd.bos.form.control.Button;
import kd.bos.form.control.Control;
 
public class Reportmobplugin extends AbstractMobBillPlugIn implements MapSelectListener{
    @Override
public void registerListener(EventObject e) {
super.registerListener(e);
 
Button bt=getControl("kdec_vectorap");
bt.addClickListener(this);
MapControl mapControl = getControl("kdec_mapcontrolap");
    mapControl.addSelectListener(this);
    mapControl.setDraggable(true);
    mapControl.setDroppable(true);
}
@Override
public void click(EventObject evt) {
 
   Object object= evt.getSource();
    if(object instanceof Button){
        Button  bt=(Button)object;
        if(bt.getKey().equals("kdec_vectorap")){
            MapControl mapControl = getControl("kdec_mapcontrolap");
            // 缓存添加实时打卡标记,防止死循环
            getPageCache().put("selectLocate", "ture");
       
            // 获取地图控件点位当前标记位置。
            mapControl.getAddress();
            this.getView().updateView("kdec_mapcontrolap");
        }
    }
}
 
 /**
 * 获取地图当前位置标记点信息。
 * mapControl.getAddress();回调自动触发
 * @param evt  地图信息
 */
@Override
public void select(MapSelectEvent evt) {
    Map<String, Object> map = evt.getPoint();
    Map point = (Map) map.get("point");
   
    //地图控件的 selectAddress,getAddress方法都会调用这个回调,为防止死循环,需要做一个标志位判断
    if ("ture".equals(getPageCache().get("selectLocate"))) {
       // 获取地位后。移除标记点
        getPageCache().remove("selectLocate");
        MapControl mapControl = getControl("kdec_mapcontrolap");
        MapSelectPointOption mapSelectPointOption = new MapSelectPointOption();
        // 经度
        mapSelectPointOption.setLng(((BigDecimal) point.get("lng")).doubleValue());
        // 维度
        mapSelectPointOption.setLat(((BigDecimal) point.get("lat")).doubleValue());
        mapControl.selectPoint(mapSelectPointOption);
        getModel().setValue("kdec_adress", String.valueOf(map.get("title"))+"{"+String.valueOf(mapSelectPointOption.getLng())+","+String.valueOf(mapSelectPointOption.getLat())+"}");
    }
}
}

 

(2)进入钉钉的开放平台

https://open-dev.dingtalk.com/?spm=dd_developers.homepage.0.0.205a4a97hZvGRV#/

创建快捷应用,指定应用页面的访问地址为我们前面开发好的移动表单。url拼接格式:

【苍穹平台服务地址mobile.html?form=移动表单标识】

如【http://cloudide-ae9f05019c2-ac1ff0e434-605078.cloudide.kingdee.com/ierp/mobile.html?form=kdec_stureport_mob】

然后把快捷应用再转成企业应用,供所有学生使用。

image.png

image.png



转成企业应用

image.png


(3)此时,在钉钉已经集成了苍穹的移动端页面,但是此时点击入学报到页面时,还要进行苍穹页面的登录认证,为了在钉钉登录时,无须登录苍穹即可访问苍穹页面,那么需要在苍穹平台配置钉钉的应用信息。另外需要在mc中配置单点登录的配置信息。

image.png

image.png



mc公共环境配置中配置authtication.apps属性,值为kd.bos.login.thirdauth.app.dingding.DDAuthtication,在开发者大赛的在线环境中已经给大家配置了钉钉的authtication.app属性配置。4)把苍穹的人员信息同步给钉钉,同步之前,先要开启钉钉应用的通讯录权限(可以开启所有的通讯录权限)

image.png


钉钉同步人员

image.png


(5)效果图


 image.png


赞 5