钉钉企业内部应用开发心得

3,417 阅读3分钟

基本流程

以企业钉钉管理员身份登陆钉钉开发者平台,进入钉钉开放平台,选择企业内部应用

创建应用,并给应用添加对应logo图片 下载钉钉开放平台提供编译器,在编译器中扫码登陆钉钉账号,选择企业内部应用,并选择刚才新建的应用关联
代码开发、编译器上上传、开放者平台发布体验版或者正式版

小技巧

  • 有些时候某个页面的数据的更新依托于另一个页面某些操作之后,比如菜品页面选择菜品之后,跳转到结算页面来对订单进行结算,结算成功之后要及时对菜品列表页面进行数据更新
getOrder(data).then(resp => {
          dd.hideLoading();
          if (resp.code == 200) {
            var pages = getCurrentPages();//当前页面栈
            var beforePage = pages[pages.length - 2];//获取上一个页面实例对象
            beforePage.changeData();//触发父页面中的方法
          }
        })
  • 针对钉钉小程序并没有vue的路由监听机制,有时候业务上需要监听当前页面的上一页面是哪个页面;比如订餐系统,由订单列表进入到取餐码页面,拿取餐码进行取餐,这种情况不同于一情况在子页面数据提交成功之后即可刷新上一页面数据,前端上只是提供一张取餐码图片,无法获取何时用户已经成功进行取餐,此时就要在父页面建立一个flag标志路由跳转去向,并利用onShow监听
//用isOpen进行标记
data: {
    isOpen: true
},
getCode(event) {
    let orderId = event.target.dataset.orderid;
    this.setData({
      isOpen: false
    })
    dd.navigateTo({
      url: './mealCode/mealCode?orderID=' + orderId
    })
    },
onShow(){
    if(!this.data.isOpen){
     this.getOrderListData();
    }
    },
  • 路由层级嵌套太深问题,钉钉小程序也是有路由嵌套层级限制的,最多五层,但有的时候业务上需要不停几个页面间循环跳转,解决这个问题的方法是添加fail方法,及时清空堆栈
dd.navigateTo({
      url: "../goods/goods",
      fail: (err) => {
        dd.reLaunch({
          url: "../goods/goods"
        })
      }
    })
  • 四钉钉小程序下拉刷新,上拉加载更多数据处理
    钉钉小程序自带UI库是没有提供刷新和上拉加载更多组件的,但提供了可以用来解决这个问题的事件处理函数
    onPullDownRefresh() {
    // 页面被下拉
    },
    onReachBottom() {
    // 页面被拉到底部
    let page = this.data.page + 1
    this.setData({
      page: page
    })
    this.getOrderListData();
    },
  • 五appjs的onLaunch执行完之后再执行Page的onLoad(微信小程序存在同样问题)
    一般,微信或者钉钉小程序,appjs的onLaunch我们会放获取权限认证、免登之类的异步操作,只有这个异步操作成功之后,方可成功调取后面的页面上的功能接口,但是如果不做处理的话,都是第一个页面的onLoad先与appjs的onLaunch执行,导致调取失败,这里只要加申明一个异步回调函数即可解决

心得

我们开发的是企业内部应用的E应用,整体感觉是钉钉开放的这个是不成熟的,有一些功能没有做到,文档也及其不全面,有些明明支持却在文档里没有任何说明,一种你猜我支不支持、有么有的感觉。建议是有些钉钉文档没有的可以看下支付宝小程序、微信小程序对应功能是怎么写的,然后把全局对象改成dd,一般是可以的,好垃圾啊!