Function、Action函数常见问题排查

Function的定义需要严格遵循Oinone的规范,

  • @Action是指页面上有按钮展示的方法,所有@Action注解的方法都是需要在权限处设置权限才能访问的。Action背后都对应一个Function。
  • @Function是Oinone的可管理的执行逻辑,是无处不在的。
  • 如果只是查询,不需要在页面有按钮,定义为@Function就可以了。

覆写常用默认数据管理器定义标准

    @Action.Advanced(name = FunctionConstants.create, managed = true)//默认取的是方法名
    @Action(displayName = "确定", summary = "添加", bindingType = ViewTypeEnum.FORM)
    @Function(name = FunctionConstants.create)//默认取的是方法名
    @Function.fun(FunctionConstants.create)//默认取的是方法名
    public AuthRole create(AuthRole data) {

    @Action.Advanced(type = FunctionTypeEnum.UPDATE, managed = true, invisible = ExpConstants.idValueNotExist)
    @Action(displayName = "更新", label = "确定", summary = "修改", bindingType = ViewTypeEnum.FORM)
    public AuthRole update(AuthRole data) {

    @Action.Advanced(type = FunctionTypeEnum.DELETE, managed = true)
    @Action(displayName = "删除", label = "删除", contextType = ActionContextTypeEnum.SINGLE_AND_BATCH)
    @Function.fun(FunctionConstant.deleteWithFieldBatch)
    public List<AuthRole> delete(List<AuthRoe> dataList) {

    @Function.Advanced(displayName = "查询角色列表", type = FunctionTypeEnum.QUERY, category = FunctionCategoryEnum.QUERY_PAGE, managed = true)
    @Function(openLevel = {FunctionOpenEnum.LOCAL, FunctionOpenEnum.REMOTE, FunctionOpenEnum.API})
    public Pagination<AuthRole> queryPage(Pagination<AuthRole> page, IWrapper<AuthRole> queryWrapper) {//注意方法名和入参名称必须和平台保持一致

    @Function.Advanced(displayName = "查询指定角色", type = FunctionTypeEnum.QUERY, category = FunctionCategoryEnum.QUERY_ONE, managed = true)
    @Function.fun(FunctionConstants.queryByEntity)
    @Function(openLevel = {FunctionOpenEnum.LOCAL, FunctionOpenEnum.REMOTE, FunctionOpenEnum.API})
    public AuthRole queryOne(AuthRole query) {//注意方法名和入参名称必须和平台保持一致

注意事项:

  1. 覆写常用默认数据管理器Function定义需要严格按照以上函数定义,包括出入参名字定义、注解定义。定义错误会导致gql请求报错或者找不到函数。
  2. 定义@Action或者@Function时,函数出入参必须是当前类注解定义的@Model.model()的模型,或者被该模型字段全包含的的模型,比如它的父模型。
  3. 页面调用使用的@Action或者@Function方法,出入参必须是oinone的对象,且不能是基础的java类型,因为oinone的对象有元数据信息,这样才能完成前后端之间的自动交互
  4. managed = true定义当前函数为数据管理函数。它只有在重写平台默认数据管理器时需要使用。
  5. @Function.fun()代表定义函数编码,不可更改,默认与方法名称相同。同一个模型Action内不允许有两个相同的函数编码。
  6. 不要使用set、get、unset作为函数方法名的开头,不要使用toString作为函数方法名。
  7. 传输模型没有默认的数据管理器,所以不能定义数据管理函数。

    @Action和@Function注解使用约定

    • 重写内置数据管理器动作和函数的,应与平台注册方式完全保持一致。以下属性可根据需要进行修改:(必须)
    • @Function.Advanced#displayName
    • @Function#openLevel
    • 自定义方法不要与内置数据管理器中定义的动作和函数重名。(必须)
    • @Action和@Function注解不要混合使用。(自定义方法必须)
    • 如无特殊必要,请不要使用如下属性修改函数定义:(自定义方法必须)
    • @Function#name
    • @Function.fun#value
    • @Function.Advanced#managed
    • @Function.Advanced#builtin
    • @Function.Advanced#group
    • @Function.Advanced#version
    • @Action.Advanced#name
    • @Action.Advanced#args
    • @Action.Advanced#managed
    • @Action.Advanced#language
    • 自定义方法在选择注册动作或函数时,应按照如下规则进行判断:(必须)
    • 若该方法通过用户行为触发的,应注册为动作。
    • 若该方法通过“入口”进行控制的,应注册为函数。
    • 自定义方法若注册为动作时,应按照如下规则进行定义:
    • 使用@Action.Advanced#type属性定义函数类型,默认为UPDATE。混合操作的动作应明确列出所有类型。(必须)
    • 使用@Action#displayName属性定义动作功能名称。如无特殊必要,同一模型下的所有动作名称不要重复。页面展示名称重复的,可使用@Action#label属性定义展示名称。(必须)
    • 使用@Action#summary属性定义动作功能简要描述。
    • 使用@Action#contextType属性定义动作上下文类型,默认为SINGLE。(必须)
    • 使用@Action#bindingType属性定义动作所在视图类型,默认为TABLE。(必须)
    • 自定义方法若注册为函数时,应按照如下规则进行定义:
    • 使用@Function.Advanced#type属性定义函数类型,默认为UPDATE。混合操作的函数应明确列出所有类型。(必须)
    • 使用@Function#openLevel属性定义函数开放级别。(必须)
    • 使用@Function.Advanced#displayName属性定义函数功能名称。如无特殊必要,同一命名空间下的所有函数名称不要重复。(必须)
    • 使用@Function#summary属性定义函数功能简要描述。
    • 使用@Function.Advanced#category属性定义函数分类。

更多Function使用详见构建第一个Function

Oinone社区 作者:yexiu原创文章,如若转载,请注明出处:https://doc.oinone.top/wen-ti-zhen-duan/16197.html

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

(0)
yexiu的头像yexiu数式员工
上一篇 2024年8月19日 下午7:11
下一篇 2024年8月20日 上午10:37

相关推荐

  • O2M、M2O、M2M关系字段配置问题以及问题排查路径

    M2O关系字段 配置示例: @Field(displayName = “教师关联学生”) @Field.many2one @Field.Relation(relationFields = {“studentName”}, referenceFields = {“name”}) private Student students; 解析: 在这个多对一关系中,s…

    2024年8月9日
    55200
  • 保存多值字段SQL执行报错

    定义多值类型时,字段类型应该设置为List类型。 @Field.String @Field(displayName ="经费证明", multi = true, serialize = Field.serialize.JSON) private List<String> matchFund; 场景复现

    2024年8月30日
    39700
  • 调试工具在业务场景的使用-后端

    这篇文档主要介绍在业务场景中,使用调试工具解决后端问题的思路。 调试工具的使用见文档:问题排查调试工具使用手册 调试工具的页面内容介绍:Oinone平台可视化调试工具 例1:模型配置不存在 现象:点击详情报模型配置不存在错误 排查路径: 将报错请求复制到接口调试出,查看调试信息 在调试信息页面,可以看到全部堆栈,利用堆栈信息找报错问题。 可以看到执行了Stu…

    2024年9月26日
    50300
  • 工作流工作台无权限排查路径

    现象:用户前端自定义跳转工作流审批页面,提示无权限 排查路径: 5.0版本权限是根据路径进行鉴权的,请求载荷中variables需要携带path路径。 示例:path=/management_center/AuthMenus_RoleAndPermission_SystemPermission如果是用户自定义跳转页面,需要配置sessionPath:,值为u…

    2024年8月6日
    40300
  • 树表查不到二级目录

    场景:树表结构查不到二级模型内容,联动配置如下 问题:界面只显示部门,不显示岗位。 已知: 自定义部门代理模型继承了PamirsDepartment @Model.model(DepartmentDoc.MODEL_MODEL) @Model.Advanced(type = ModelTypeEnum.PROXY) @Model(displayName = …

    2024年7月23日
    38600

发表回复

登录后才能评论