只要一次真心真意使用JavaAction增删改查数据和执行微流-Mendix与Android开发

作品分类:全部文章 2020-08-02

使用JavaAction增删改查数据和执行微流-Mendix与Android开发

此文demo地址:https://github.com/mrgaogang/mendix
日常开发中我们难免会有一些情况是无法使用微流实现的焗染烫,此时需要我们使用Java原生的能力:JavaAction;此文主要介绍如何JavaAction对数据库的数据进行增删改查和使用action执行微流。
目录:
数据添加;
数据删除;
数据修改;
数据查询;
使用Action执行微流;JavaAction使用注意事项
JavaAction使用有几个注意点:
executeAction()是mendix默认调用的方法纸黄金交易通,且我们只能在//BEGIN 和//END之间编写Java代码血色妖瞳。
public java.util.List<IMendixObject> executeAction() throws Exception{// BEGIN USER CODE//此处是你的代码// END USER CODE}
如果你有大量的代码需要编写请在类的末尾以下两个分隔符之间编写
// BEGIN EXTRA CODE// END EXTRA CODE一、数据的添加
数据的创建可以使用Core.instantiate创建一个空的对象,也可直接new 出空对象;数据的提交可以使用obj.commit()可以使用Core.commit()
public IMendixObject executeAction() throws Exception{// BEGIN USER CODE//第一种方式使用 IMendxObject创建数据// IMendixObject ob=Core.instantiate(getContext()天喜堂天喜丸,"Demo.User");// ob.setValue(getContext()洪英姬,"UserName",只要一次真心真意 UserName);// ob.setValue(getContext(),"Password",Password);// ob.setValue(getContext()簸箕的读音 ,"Age"搜同网 ,Age);// Core.commit(getContext()邓森悦,ob);//第二种方式直接创建对象User us=new User(getContext());us.setUserName(UserName);us.setPassword(Password);us.setAge(Age);//提交数据到数据库us.commit(getContext());//也可以使用以下方式//Core.commit(getContext()钱智民,us.getMendixObject());return us.getMendixObject();// END USER CODE}
二、数据的删除
数据的删除可以使用obj.delete()也可使用Core.delete()
public java.lang.Boolean executeAction() throws Exception{this.ParameterParameter1 = __ParameterParameter1 == null ? null : demo.proxies.User.initialize(getContext(), __ParameterParameter1);// BEGIN USER CODE//可以直接使用obj.deleteParameterParameter1.delete(getContext());returntrue;// 也可以使用Core.delete的方式删除数据 //return Core.delete(getContext()玩具兵大战 ,ParameterParameter1.getMendixObject());// END USER CODE}
三、数据的修改
数据的修改和数据的提交类似,只是在action将数据修改后重新提交。
@Overridepublic IMendixObject executeAction() throws Exception{this.ParameterParameter1 = __ParameterParameter1 == null ? null : demo.proxies.User.initialize(getContext()田宗琦 , __ParameterParameter1);// BEGIN USER CODEParameterParameter1.setUserName("===>我修改啦");ParameterParameter1.setPassword("我修改了密码");ParameterParameter1.setAge(200L);Core.commit(getContext(),张翔玲 ParameterParameter1.getMendixObject());return ParameterParameter1.getMendixObject();// END USER CODE}
四、查询数据
数据的查询主要使用以下几种方式
Core.retrieveXPathQuery()
Core.retrieveXPathQueryAggregate()
Core.retrieveId()
Core.retrieveIdAsync()
其中XPath查询数据需要在前方加上// ;但是在mendix客户端编写xpath(比如在datagrid查询数据使用xpath)时 不需要加上//。
//Demo.User检索所有用户。
//Demo.User[UserName='mrgao'] 检索名为'mrgao'的所有用户。
avg(//Demo.User[Age >10 ]/Age) 检索所有用户年龄大于10岁的 年龄平均数灵宝天尊是谁 。
其中XPath可用的函数有: avg、count、max、min、sum、contains、starts-with、ends-with、not、true、false
@Overridepublic java.util.List<IMendixObject> executeAction() throws Exception{// BEGIN USER CODEList<IMendixObject> list=Core.retrieveXPathQuery(getContext()琉璃玉米,"//Demo.User");return list;// END USER CODE}
五、执行微流
微流的执行科分为同步执行execute()和异步执行executeAsyn();此例子主要以同步执行为例;
微流执行时参数的传递主要使用Map<String,Object>的方式夺帅演员表,且Key必须要和参数入参名称相同;
如果传入的是Object类型,则需要转化成mendixobject;
微流执行完成可获取到其返回的参数;
public java.lang.String executeAction() throws Exception{this.ParameterParameter1 = __ParameterParameter1 == null ? null : demo.proxies.User.initialize(getContext()何佩琪, __ParameterParameter1);// BEGIN USER CODEMap<String,Object> map=new HashMap<>();//记得转换成mendixobject,且Map的key需要和微流入参的名称一样map.put("User"慕德贵 ,ParameterParameter1.getMendixObject());map.put("other",other);//执行微流,mf为微流,map则为需要执行微流的入参String result=Core.execute(getContext(),mf,map);return result;// END USER CODE}
如果还想了解更多相关Core的知识巴郎仔,请访问官方API:Mendix官方CoreAPI以及IMendixObject的API:IMendixObject官方API

意见反馈