3.5.4 Ux注解详解

我们默认视图已经基本可以用了,但实际业务中还是会有一些不大不小的自定义需求,写自定义视图又太麻烦,今天我们来学习一种更加轻量的模式即:后端研发可以通过注解来配置视觉交互。该系列注解以Ux开头,例如@UxHomepage、@UxMenu、@UxAction、@UxView、@UxWidget等等。

视图XML的配置优先级大于在代码上的注解,也就是代码上的注解影响的是默认展示逻辑。

一、Ux家族图谱

我们先简单通过家族图谱做个简单了解,脑海里有一个影响当有需要的时候知道能不能做,深入了解还需要大家多多动手去尝试

3.5.4 Ux注解详解

图3-5-4-1 Ux家族图谱

二、默认视图后端配置举例

在下面的代码片段中UxTable、UxForm、UxDetail、UxTableSearch都有涉及,几个特殊点做些解释其他的留大家自行测试

  • Group分组的配置逻辑:为了不让一个分组内的字段不断的写Group,所以采取了第一个字段写了Group,到下一个出现的group之间的字段都自动归为一个Group

  • 搜素整体不展示可以用“@UxTable(enableSearch = false)”配置在模型的类上。

  • 字段搜索用“UxTableSearch”配置在模型的字段上,其特殊逻辑是只要你配了一个字段,系统就不自动补充了,例子中表格页的搜索栏只会留下店铺名称和店铺编码

……其他代码
//@UxTable(enableSearch = false),整体不支持搜索
public class PetShop extends AbstractDemoIdModel {
    public static final String MODEL_MODEL="demo.PetShop";

    @Field(displayName = "店铺编码")
    @UxForm.FieldWidget(@UxWidget(group = "Form基础数据"))//Form分组
    @UxTableSearch.FieldWidget(@UxWidget())//支持搜索
    private String code;

    @Field(displayName = "店铺编码2")
    @Field.Sequence(sequence = "DATE_ORDERLY_SEQ",prefix = "C",size=6,step=1,initial = 10000,format = "yyyyMMdd")
    private String codeTwo;

    @UxTableSearch.FieldWidget(@UxWidget())//支持搜索
    @UxTable.FieldWidget(@UxWidget(invisible = "true"))//表格中不展示支持搜索
    @Field(displayName = "店铺名称",required = true,immutable=true)
    private String shopName;

    @Field(displayName = "一年内新店")
    @UxForm.FieldWidget(@UxWidget(widget = "Switch",group = "Form基础数据"))//Switch,Checkbox可以切换着看,字段可选widget参考【字段的配置】一文
    private Boolean oneYear;

    @Field(displayName = "开店时间",required = true)
    @UxDetail.FieldWidget(@UxWidget(invisible = "true"))//详情不展示
    private Time openTime;

    @Field(displayName = "闭店时间",required = true)
    @UxDetail.FieldWidget(@UxWidget(invisible = "true"))//详情不展示
    private Time closeTime;
    …… 其他代码
}

图3-5-4-2 默认视图后端配置举例

Oinone社区 作者:史, 昂原创文章,如若转载,请注明出处:https://doc.oinone.top/oio4/9256.html

访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验

(0)
史, 昂的头像史, 昂数式管理员
上一篇 2024年5月23日 am9:22
下一篇 2024年5月23日 am9:24

相关推荐

  • 图表

    1. 业务场景 进入数据可视化后,默认处于图表列表页面,点击报表/数据大屏图标则可切换至对应列表;支持从模型获取数据后,过滤数据后创建可视化图表,维护的图表信息可以被报表、数据大屏、以及业务系统引用。 2. 操作流程 1)进入数据可视化,进入图表tab,维护分组信息; 2)在二级分组名称后点击“+”【添加图表】,对图表进行编辑设计; 3)创建完成后可以【编辑】图表; 4)图表完善后,可以点击【发布】图表,则图表此时可以被引用; 5)如果图表有更新,则可以点击【更新发布】,使业务系统引用对图表变为最新的图表信息; 6)如果图表数据不再可以公开使用,则需要通过【隐藏】功能将图表的引用权限收起,此时报表、数据大屏、前端业务系统均不可再引用该图表,但不影响已被引用的图表; 7)隐藏后可以【取消隐藏】,图表恢复隐藏前的状态和功能,可以被引用。 3. 操作流程图解 3.1 创建分组 1)操作流程:创建分组 2)操作路径:数据可视化-图表-创建分组 3)点击搜索框后的「+」创建一级分组,输入一级分组名称后,点击一级分组后的「+」创建二级分组,输入二级分组名称后,此时分组创建完成,可以在二级分组下创建图表 3.2 编辑分组名称 1)操作流程:选择分组-编辑分组名称 2)操作路径:数据可视化-图表-编辑分组名称 3)鼠标移动至需要修改的分组上,点击出现的「编辑图标」,可以修改分组名称,修改后分组名称实时更新 3.3 删除分组 1)操作流程:选择分组-删除分组 2)操作路径:数据可视化-图表-删除分组 3)鼠标移动至需要删除的分组上,当分组下无图表时出现「删除图标」,可以点击图标后删除分组,删除一级分组时对应所有的二级分组也会被删除,删除后消失,只有分组下没有图表的分组才能直接删除成功 3.4 创建图表 1)操作流程:选择二级分组-创建图表 2)操作路径:数据可视化-图表-二级分组-创建图表 3)鼠标移动至需要创建图表的二级分组上,出现「+」,点击图标后弹出“创建图表”弹窗,需要填写图表标题、模型、方法; a图表标题:最大支持20个字,支持汉字、数字、大小写字母、-;同个一级分组下不允许重复; b模型:需要选择来源数据对应的模型; c方法:选择模型后需要选择方法,方法是用来提取模型数据的逻辑; 4)选择成功后进入图表设计页面 3.5 编辑图表 1)操作流程:选择图表-编辑图表 2)操作路径:数据可视化-图表-二级分组-图表-编辑图表 3)只能编辑未发布或者已发布但没有被隐藏的图表,且存在三种编辑情况 a第一种:点击图表标题后的编辑图标,仅能编辑图表标题; b第二种:点击图表中的图表标题、图表副标题、图表描述后的编辑图标,可以直接编辑图表标题、图表副标题、图表描述; c第三种:点击【编辑】按钮,进入图表设计页面,带出已有的数据字段、样式、图表内容,编辑时的规则与创建时一致,编辑后可以点击保存进行更新,如果未保存直接返回,则编辑无效; 4)编辑后实时生效,图表信息保持展示最新效果 3.6 删除图表 1)操作流程:选择图表-删除图表 2)操作路径:数据可视化-图表-二级分组-图表-删除图表 3)未发布或者已发布但没有被隐藏的图表,并且没被前端或者报表引用,才展示图表菜单名称后的删除图标 4)删除后图表消失 3.7 复制 1)操作流程:选择图表-复制图表 2)操作路径:数据可视化-图表-二级分组-图表-复制图表 3)点击【复制】按钮,复制成功,名称为copy of 原图表标题,展示在原图表分组的最后一个 3.8 发布 1)操作流程:选择图表-发布图表 2)操作路径:数据可视化-图表-二级分组-图表-发布 3)选择单个未发布且没有被隐藏的图表,点击【发布】按钮,图表发布后可以被前端引用,图表状态变为已发布,展示最近发布时间; 4)如果图表发布后有更新内容,会展示的更新类型:更新图表信息/更新图表内容 3.9 查看最近一次发布的版本 1)操作流程:选择图表-查看最近一次发布的版本 2)操作路径:数据可视化-图表-二级分组-图表-查看最近一次发布的版本 3)当图表发布后有更新,在最近发布时间左侧展示【查看】,在最近发布时间下展示更新的类型,点击查看可以查看最近发布的版本 3.10 更新发布 1)操作流程:选择图表-更新发布图表 2)操作路径:数据可视化-图表-二级分组-图表-更新发布图表 3)选择单个已发布且没有被隐藏的图表,并且该图表在上次发布后有所更新,可以点击【更新发布】按钮,将最新的图表内容发布至业务系统,业务系统引用的图表为最新内容; 4)如果更新了内容,但未点击更新发布,则前端业务系统查看的图表仍为最近发布的图表 3.11 隐藏 1)操作流程:选择图表-隐藏图表 2)操作路径:数据可视化-图表-二级分组-图表-隐藏图表 3)图表默认不隐藏,点击图表左侧的是否隐藏可以切换,切换是否隐藏=是 a未发布的图表,较隐藏前,不可以操作【发布】,可以【取消隐藏】; b已发布的图表,较隐藏前,只能操作【导出图片、导出excel、取消隐藏】; 4)隐藏后的图表不可以被引用,但不影响已经被引用的数据 3.12 取消隐藏 1)操作流程:选择图表-取消隐藏图表 2)操作路径:数据可视化-图表-二级分组-图表-取消隐藏图表 3)隐藏后的图表可以取消隐藏,切换是否隐藏=否,取消隐藏后,图表恢复隐藏前的状态和功能,可以被引用 3.13 查看引用 1)流程:选择图表-查看被哪些报表/数据大屏/页面引用 2)操作路径:数据可视化-图表-二级分组-图表-更多-查看引用 3)选择具体的图表,查看当前图表被引用的所有信息 3.14 不允许别人编辑 1)流程:选择图表-不允许别人编辑 2)操作路径:数据可视化-图表-二级分组-图表-更多-不允许别人编辑 3)选择自己创建的图表,对图表是否允许其他人编辑进行设置;如果设置为不允许,则其他人无法编辑图表 3.15 不允许别人引用 1)流程:选择图表-更多-不允许别人引用 2)操作路径:数据可视化-图表-二级分组-图表-更多-不允许别人引用 3)选择自己创建的图表,对图表是否允许他人引用进行设置;如果设置为不允许,则其他人无法在报表、数据大屏、界面设计器引用到该图表 3.16 导出图片 1)操作流程:选择图表-导出图片 2)操作路径:数据可视化-图表-二级分组-图表-图表导出图片 3)选择图表后,点击【导出图片】按钮可以将当前图表导出为图片 3.17 导出EXCEL 1)操作流程:选择图表-导出EXCEL 2)操作路径:数据可视化-图表-二级分组-图表-图表导出EXCEL 3)选择图表后,点击【导出EXCEL】按钮可以将当前图表导出为EXCEL 4. 图表设计页面 4.1 修改模型、方法 1)操作流程:创建图表-进入图表设计页面 2)操作路径:数据可视化-图表-二级分组-图表-创建图表 3)在“创建图表”弹窗中选择了模型和方法后,可以在进入图表设计页面修改 4)图表设计页面,点击模型后的设置图标后,右侧弹出弹窗,可以修改模型和获取模型数据的方法,需要注意的是:修改模型后,图表信息会清空 4.2 维度 1)操作流程:创建图表-进入图表设计页面 2)操作路径:数据可视化-图表-二级分组-图表-创建图表 3)维度字段:布尔、文本、枚举、日期时间、年份、日期、时间、用户ID、手机号、邮箱 4.2.1 维度的添加 1)图表设计页面,点击维度后的「+」,右侧弹出弹窗,展示所有的维度字段,可以选择对应的字段进行分析 a拖动字段进入维度列表 b点击字段,则字段进入维度列表 2)不同的图表支持的维度个数不同,当维度字段个数已达上限后不可再添加;此时拖动新字段到旧字段上后,新字段会代替旧字段进行数据分析,且会保留相同的样式 4.2.2 维度的删除 1)维度选择后,鼠标放到维度字段上,显示「删除图标」 2)点击则字段删除成功,维度字段的效果消失 4.2.3 修改维度展示名称 1)维度选择后,鼠标放到维度字段上,显示「设置图标」 2)点击后下方弹出「修改展示名称」的设置选项,点击后右侧出现修改展示名称的弹窗,可以进行修改,在输入框下方可以查看原字段名称 4.3 数值 1)操作流程:创建图表-进入图表设计页面 2)操作路径:数据可视化-图表-二级分组-图表-创建图表 3)数值字段:整数、浮点数、金额、(连续的日期时间、年份、日期、时间) 4.3.1 数值的添加 1)图表设计页面,点击数值后的「+」,右侧弹出弹窗,展示所有的数值字段,可以选择对应的字段进行分析 a拖动字段进入数值列表 b点击字段,则字段进入数值列表 2)不同的图表支持的数值个数不同,当数值字段个数已达上限后不可再添加;此时拖动新字段到旧字段上后,新字段会代替旧字段进行数据分析,且会保留相同的样式 3)拖入的数值字段中,可以同时拖入整数、浮点数、金额;但是拖入字段类型=年份/日期时间/日期/时间后,不可以拖入其他字段类型的数值字段 4)饼图、漏斗图不可以在数值列表中拖入字段类型=年份/日期时间/日期/时间的字段 4.3.2 数值的删除 1)数值选择后,鼠标放到数值字段上,显示「删除图标」 2)点击则字段删除成功,数值字段的效果消失 4.3.3 修改数值展示名称 1)维度选择后,鼠标放到数值字段上,显示「设置图标」 2)点击后下方弹出可以设置的选项,点击「修改展示名称」选项,点击后右侧出现修改展示名称的弹窗,可以进行修改,在输入框下方可以查看原字段名称 4.3.4 修改数值聚合方式 1)维度选择后,鼠标放到数值字段上,显示「设置图标」 2)点击后下方弹出可以设置的选项,点击「聚合方式」选项,点击后右侧出现修改展示名称的弹窗,可以进行修改 3)默认是求和,可以修改为「无处理、最小值、最大值、平均值、计数」 a求和:将维度值对应的所有数值进行加和 b无处理:取维度值对应数值中的最近一条不为空的值 c最小值:取维度值对应数值中的最小值 d最大值:取维度值对应数值中的最大值 e平均值:取维度值对应数值的平均值 f计数:计算维度值对应的数值个数 4)修改后实时更新图表信息,会影响辅助线取数值字段时的值 4.3.5 修改数值数据格式 1)维度选择后,鼠标放到数值字段上,显示「设置图标」 2)点击后下方弹出可以设置的选项,点击「数据格式」选项,点击后右侧出现修改数据格式的弹窗,可以进行修改 3)可以设置字段的数据类型、单位;…

    2024年6月20日
    1.5K00
  • 工作台

    有工作台权限的用户,默认登录页为工作台,也可以通过APP Finder进入工作台。 1. 快捷处理 右上角消息中会气泡展示未处理或未读的操作,点击展开后可以点过去进行快捷处理。 2. 查看、处理流程 2.1 流程查看 流程管理页面共同点: 1包含选项分类筛选 2包含标签筛选 3包含应用下拉选筛选 4包含根据流程名称搜素 流程管理页面名词解释: 待办:当前登录用户未处理的流程节点 我发起的:当前登录用户人为触发的流程(模型触发) 抄送:抄送给当前登录用户的节点(审批/填写) 我已办结:由当前登录用户完成人工/自动同意、人工拒绝或人工填写的节点 无需办理:当前登录用户转交的任务/被退回、被撤销、被或签、被其他分支任务拒绝的还未办理的任务 站内信:当前登录用户收到的站内信 2.2 流程处理 每条流程数据下方有动作,点击进入流程处理页面,大致分为详情页和操作页。 待办中点击“审批/填写”会进入流程操作页。审批操作页可能包含“同意、拒绝、退回、加签、转交、返回”,填写操作页可能包含“提交、暂存”,审批操作页包含哪些动作由流程设计决定。 我发起的、抄送、我已办结、无需处理点击“查看”会进入流程详情页。 3. 应用快捷入口 应用中心中星标的收藏应用会展示在此处,点击可快捷进入应用。 应用中心中已安装的应用点击星标即可收藏。

    2024年6月20日
    1.4K00
  • 4.1.17 框架之网关协议-GraphQL协议

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。 一个 GraphQL 服务是通过定义类型和类型上的字段来创建的,然后给每个类型上的每个字段提供解析函数。例如,一个 GraphQL 服务告诉我们当前登录用户是 me,这个用户的名称可能像这样: type Query { me: User } type User { id: ID name: String } 图4-1-17-1 GraphQL定义类型和字段示意 一并的还有每个类型上字段的解析函数: function Query_me(request) { return request.auth.user; } function User_name(user) { return user.getName(); } 图4-1-17-2 每个类型上字段的解析函数示意 一旦一个 GraphQL 服务运行起来(通常在 web 服务的一个 URL 上),它就能接收 GraphQL 查询,并验证和执行。接收到的查询首先会被检查确保它只引用了已定义的类型和字段,然后运行指定的解析函数来生成结果。 例如这个查询: { me { name } } 图4-1-17-3 GraphQL查询请求示意 会产生这样的JSON结果: { "me": { "name": "Luke Skywalker" } } 图4-1-17-4 GraphQL查询结果示意 了解更多 https://graphql.cn/learn/

    Oinone 7天入门到精通 2024年5月23日
    1.2K00
  • 7.3.1 去除资源上传大小限制

    场景说明 全员营销标准软件产品对于视频上传限制为35M,该大小适合管理短视频类的素材。该软件产品的使用方为营销部门,营销部门不仅管理短视频素材,也负责管理电商商品的视频素材、公司团建的素材等,且不少素材的内存都远大于35M。 业务需求:将全员营销中的内容中心扩展成营销部门的内容统一管理中心,管理营销部门工作范围内的所有内容素材,且不受35M的限制。 实战训练 新增一个资源管理页面,替换原来的资源管理,并构建新的上传行为。 Step1 通过界面设计器,设计出必要管理页面 进入界面设计器,应用选择全员营销,模型通过搜索【素材】选择【Gemini素材】,点击添加页面下的直接创建 设置页面标题、模型(自动带上可切换)、业务类型(运营管理后续会扩展其他类型)、视图类型(表格)后点击确认按钮进入【内容中心-新素材管理】设计页面 进入页面设计器,对【内容中心-新素材管理】表格页面进行设计(更多细节介绍,请参考界面设计产品使用手册) a. 左侧为物料区:分为组件、模型。 ⅰ. 【组件】选项卡下为通用物料区,我们可以为页面增加对应布局、字段(如同在模型设计器增加字段)、动作、数据、多媒体等等 ⅱ. 【模型】选项卡下为页面对应模型的自定义字段、系统字段、以及模型已有动作 b. 中间是设计区域 c. 右侧为属性面板,在设计区域选择中组件会显示对应组件的可配置参数 在左侧【模型】选项卡下,分别把系统字段中的【素材名称】、【素材链接】、【素材来源】、【素材类型】、【更新时间】、【创建时间】等字段拖入设计区域的表格区 设置字段在表格中的展示组件,在设计区域切换【素材链接】展示组件为【超链接】 设置字段在表格中的展示组件的属性,在设计区域选中【素材名称】,在右侧属性面板中设置【标题】为【内容名称】 设置字段在表格中的展示组件的属性,在设计区域选中【创建时间】,在右侧属性面板中设置【标题】为【上传时间】 在左侧【模型】选项卡下,把动作分类下的提交类型【下载】和【删除】动作拖入中间设计区的动作区,并选择【删除】按钮,在右侧属性面板中设置【按钮样式】为【次要按钮】 在左侧【组件】选项卡下,把动作分类下的【跳转动作】拖入中间设计区的动作区,并在右侧属性面板中设置动作名称为【上传素材】,数据控制类型为【不进行数据处理】,打开方式为【弹窗打开】,【弹出内容】为【创建新页面】,【弹窗模型】通过搜索【素材】选择【Gemini素材代理-上传】,并点击保存 设计区选中【上传素材】按钮,点击【打开弹窗】设计【素材上传】的操作页面,此时会发现左侧【模型】选项卡下的当前模型切换成了【Gemini素材代理-上传】 a. 分别把系统字段中的【上传素材链接列表】拖入【Gemini素材代理-上传】的弹窗页面设计区。 b. 选中【上传素材链接列表】切换展示组件为【文件上传】 c. 选中【上传素材链接列表】并在右侧属性面板中 ⅰ. 设置【校验】分组下,设置【最大上传文件体积】为空,即不设置 ⅱ. 设置【校验】分组下,设置【限制上传文件类型】为打开,并勾选【图片】和【视频】 ⅲ. 设置【交互】分组下的宽度属性为【1】 在左侧【模型】选项卡下,把动作分类下的提交类型【上传素材】动作拖入中间设计区的动作区 在左侧【组件】选项卡下,把动作分类下的【客户端动作】类型拖入中间设计区的动作区,选中并在右侧属性面板中设置【动作名称】为返回,设置【客户端行为】为【关闭弹窗】,点击【保存】按钮来完成动作的基础设置 选中【返回】按钮、并在右侧属性面板中设置【按钮样式】为【次要按钮】 关闭弹窗返回主模型设计区 点击右上角【显示母版】进入页面最终展示形式,点击添加菜单项,并在输入框中输入【新内容中心】 点击菜单右侧设置图标,选择【绑定已有页面】,进行菜单与页面的绑定操作 在绑定页面中,模型选择【Gemini素材】,视图选择【内容中心-新素材管理】,点击确认按钮提交 最后别忘了点击右上角【发布】按钮对【内容中心-新素材管理】表格页面进行发布,回到界面设计器首页查看刚刚建好的表格页面 Step2 测试完成以后隐藏原【内容中心】菜单 进入【界面设计器】管理页面,通过点击【设计图标】进入任一页面的设计页面 点击右上角【显示母版】进入页面最终展示形式,找菜单【内容中心】点击菜单右侧设置图标,选择【隐藏菜单】,因为【内容中心】菜单是标准产品自带菜单,只能进行隐藏操作,无法进行如绑定页面和调整菜单顺序 Step3 回到全员营销应用,刷新页面体验效果 整个实战训练就到此结束,更多细节请参阅具体的产品使用手册

    2024年5月23日
    1.1K00
  • 3.4.3.1 面向对象-继承与多态

    本节为小伙伴们介绍,Function的面向对象的特性:继承与多态; 一、继承 我们在3.4.1【构建第一个Function】一文中伴随模型新增函数和独立类新增函数绑定到模型部分都是在父模型PetShop新增了sayHello的Function,同样其子模型都具备sayHello的Function。因为我们是通过Function的namespace来做依据的,子模型在继承父模型的sayHello函数后会以子模型的编码为namespace,名称则同样为sayHello。 二、多态(举例) oinone的多态,我们只提供覆盖功能,不提供重载,因为oinone相同name和fun的情况下不会去识别参数个数和类型。 Step1 为PetShop新增hello函数 package pro.shushi.pamirs.demo.api.model; …… //import @Model.model(PetShop.MODEL_MODEL) @Model(displayName = "宠物店铺",summary="宠物店铺",labelFields ={"shopName"} ) @Model.Code(sequence = "DATE_ORDERLY_SEQ",prefix = "P",size=6,step=1,initial = 10000,format = "yyyyMMdd") public class PetShop extends AbstractDemoIdModel { public static final String MODEL_MODEL="demo.PetShop"; …… //省略其他代码 @Function(openLevel = FunctionOpenEnum.API) @Function.Advanced(type= FunctionTypeEnum.QUERY) public PetShop sayHello(PetShop shop){ PamirsSession.getMessageHub().info("Hello:"+shop.getShopName()); return shop; } @Function(name = "sayHello2",openLevel = FunctionOpenEnum.API) @Function.Advanced(type= FunctionTypeEnum.QUERY) @Function.fun("sayHello2") public PetShop sayHello(PetShop shop, String s) { PamirsSession.getMessageHub().info("Hello:"+shop.getShopName()+",s:"+s); return shop; } @Function(openLevel = FunctionOpenEnum.API) @Function.Advanced(type= FunctionTypeEnum.QUERY) public PetShop hello(PetShop shop){ PamirsSession.getMessageHub().info("Hello:"+shop.getShopName()); return shop; } } 图3-4-3-1 为PetShop新增hello函数 Step2 为PetShopProxyB新增对应的三个函数 其中PetShopProxyB新增的hello函数,在java中是重载了hello,在代码中new PetShopProxyB()是可以调用父类的sayHello单参方法,也可以调用本类的双参方法。但在oinone的体系中对于PetShopProxyB只有一个可识别的Function就是双参的sayHello package pro.shushi.pamirs.demo.api.proxy; import pro.shushi.pamirs.demo.api.model.PetCatItem; import pro.shushi.pamirs.demo.api.model.PetShop; import pro.shushi.pamirs.meta.annotation.Field; import pro.shushi.pamirs.meta.annotation.Function; import pro.shushi.pamirs.meta.annotation.Model; import pro.shushi.pamirs.meta.api.session.PamirsSession; import pro.shushi.pamirs.meta.enmu.FunctionOpenEnum; import pro.shushi.pamirs.meta.enmu.FunctionTypeEnum; import pro.shushi.pamirs.meta.enmu.ModelTypeEnum; import java.util.List; @Model.model(PetShopProxyB.MODEL_MODEL) @Model.Advanced(type = ModelTypeEnum.PROXY,inherited ={PetShopProxy.MODEL_MODEL,PetShopProxyA.MODEL_MODEL} ) @Model(displayName = "宠物店铺代理模型B",summary="宠物店铺代理模型B") public class PetShopProxyB extends PetShop { public static final String MODEL_MODEL="demo.PetShopProxyB"; @Field.one2many @Field(displayName = "萌猫商品列表") @Field.Relation(relationFields = {"id"},referenceFields = {"shopId"}) private List<PetCatItem> catItems; @Function(openLevel = FunctionOpenEnum.API) @Function.Advanced(type= FunctionTypeEnum.QUERY) public PetShop sayHello(PetShop shop){ PamirsSession.getMessageHub().info("PetShopProxyB Hello:"+shop.getShopName()); return shop; } @Function(name = "sayHello2",openLevel = FunctionOpenEnum.API) @Function.Advanced(type= FunctionTypeEnum.QUERY) @Function.fun("sayHello2") public PetShop sayHello(PetShop shop,String hello){ PamirsSession.getMessageHub().info("PetShopProxyB say:"+hello+","+shop.getShopName()); return shop; } @Function(openLevel = FunctionOpenEnum.API)…

    2024年5月23日
    1.4K00

Leave a Reply

登录后才能评论