【智慧图书馆实战训练营课程】第三章—单据体及页面设计原创
金蝶云社区-醉倾梦_Dreamy
醉倾梦_Dreamy
2人赞赏了该文章 342次浏览 未经作者许可,禁止转载编辑于2024年11月08日 15:48:54
summary-icon摘要由AI智能服务提供

本文介绍了在掌握页面设计和插件运用基础上,学习控件的运用,包括单据体的使用以支持更复杂单据情况,并通过动态表单开发个性化页面。以书籍基础资料和座位预约页面为例,讲解了控件分类及重要控件用法,并详细说明了修改书籍基础资料、增加单据体以及编写借书插件的实现步骤。

导言

经过了前面两章的学习,相信你已经掌握了基本的页面设计,以及插件的运用。那么现在我们已经可以进行控件的学习了!通过本章,你可以学习到单据体的运用,让你的单据可以支持更复杂的情况。同时,我们还将学习如何通过动态表单开发一些更加美观,更加个性化的页面。比如这个应用首页:

上传图片


再比如这个预约座位的页面:

上传图片

控件总体介绍

苍穹开发平台使用封装好的控件来开发表单,可以极大的减少工作量,缩短开发周期。在开发页面的左侧,可以看到苍穹平台提供的丰富的控件:

这些控件可以根据是否会在数据模型中存储数据,大致分为通用控件与字段控件两类。接下来的课程中,我们将围绕书籍基础资料和座位预约页面这两个场景,讲解一些重要控件的用法。


书籍基础资料单据体

导言

我们在第一章中制作了储存书籍信息的基础资料,可以存放书籍的封面,作者等关键信息。可是如果我们的图书馆有多本同样的图书呢?我们该怎样表示每一本图书的存放位置,借阅情况呢?这时就要用到单据体了。

单据体可以用于展示一批具有相同属性的数据,类似Excel。在业务语义上一个单据体对应数据库中一张表,其中一列对应数据库表的一列,可以编辑录入数据。

章节目标

修改第一章完成的书籍基础资料,增加一个单据体,用来表示这种书籍,每一本实体书的存放位置以及借阅情况。同时实现借书的相关插件,从而对单据体进行操作。

实现步骤

1.新增并配置单据体控件

首先我们在内容区中添加一个高级容器,高级容器预置了两个工具栏项按钮,可以方便我们配置单据体的新增一行与删除一行的按钮:

上传图片

然后在这个高级容器的子容器里面添加一个单据体:

上传图片

删除书籍库存信息里面的存放位置,借阅状态两个字段,并把他们重新添加到单据体里面。同时,为了区分不同的书,我们还要单据体中增加一个书籍编码字段(myg6_code):

上传图片

然后我们就可以把上面旧的书籍库存信息隐藏了(因为含有继承字段不能直接删除),然后将高级容器更名为新的书籍库存信息。

上传图片

别忘了单据体也需要注册表名, 在大纲中选中并进行注册:

上传图片

然后我们要进行工具栏项的配置,选中一个工具栏项并点击操作代码右侧的三个点:

上传图片

点击新增:

上传图片

打开操作类型的选择界面,并点击过滤按钮进行查询:

上传图片

查找“新增”,并选择新增分录,这个操作可以实现单据体新增一行的操作。同样的办法将另一个工具栏项配置为删除分录:

上传图片


保存并点击预览,可以看到可以通过这两个按钮进行单据体的操作:

上传图片

我们将这本书添加到列表中,方便我们后续的演示:

上传图片


上传图片

2.编写借书插件

第二步我们就要编写借书插件了,这里我们想要实现的流程是,当用户提交借书单据 ,点击审核时,遍历所有的图书库存,将最先遍历到的可借阅的书籍借给这名用户。如果没有可借阅的书,则弹窗提示。

代码非常简单,需要注意的是,使用BusinessDataServiceHelper进行查询时,Fields中要加入单据体标识和单据体内要查询字段的标识,完整代码如下:

package plugins.teach;

import kd.bos.base.AbstractBasePlugIn;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.form.control.events.ItemClickEvent;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.sdk.plugin.Plugin;

/**
 * 基础资料插件
 */
public class BorrowOneBook extends AbstractBasePlugIn implements Plugin {
    public void itemClick(ItemClickEvent e) {
        super.itemClick(e);
        // 若检测到点击到审核按钮
        if (e.getItemKey().equalsIgnoreCase("bar_audit")) {
            // 查看列表
            String fields = "name,myg6_bookinfo,myg6_combo";
            QFilter[] filters = new QFilter[0];
            DynamicObject[] dys = BusinessDataServiceHelper.load("myg6_book", fields, filters);
            String borrowBookName = (String) this.getModel().getValue("myg6_name");

            Boolean haveBook = false;
            for (DynamicObject obj : dys) {

                String bookName = obj.getString("name");
                if(bookName.equals(borrowBookName)){

                    DynamicObjectCollection rows = obj.getDynamicObjectCollection("myg6_bookinfo");
                    for(DynamicObject row: rows){
                        if(row.getString("myg6_combo").equals("0")){
                            haveBook = true;
                            row.set("myg6_combo", "1");
                            SaveServiceHelper.update(obj);
                            break;
                        }
                    }
                }

            }
            //如果haveBook为false,说明没有库存
            if(!haveBook) {
                this.getView().showMessage("没有库存");
            }
        }
    }


图标赞 2
2人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!