# 控制器Action开发步骤

1. 创建控制器`Action`的java类，以`Action`结尾
    * 在根据用户输入生成`doAction`方法里的逻辑时，注意采用合适的方式转换`request`参数，得到具体的参数对象或者参数Map
    * 根据实际具体的业务需要选择服务类
    * 组装返回的数据
2. 创建控制器`Action`配置文件，以`action.xml`结尾
3. 创建控制器`Action`的鉴权文件,以`authorize.xml`结尾
   
## 1.创建控制器Action的java类
 * 其路径为：`src/client/nccloud/web/模块编码/应用编码/action/应用+具体功能+Action.java`
### Demo
```java
import nccloud.framework.core.json.IJson;
import nccloud.framework.service.ServiceLocator;
import nccloud.framework.web.action.itf.ICommonAction;
import nccloud.framework.web.container.IRequest;
import nccloud.framework.web.json.JsonFactory;
import nc.md.persist.framework.IMDPersistenceQueryService;
import POJO类或者VO实体类全路径;
public class DemoAction implements ICommonAction {
    @Override
    public Object doAction(IRequest request) {
        try {
            //从request参数转换成DTO对象
            String read = request.read();
            IJson json = JsonFactory.create();
            
            //如果需要从前端获取某一个参数或者某几个参数，可以使用如下方式
            //Map<String,Object> paramMap = json.fromJson(read, HashMap.class);
            //从参数Map中获取对应的参数值
            //String param1 = (String)paramMap.get("xx参数key");
            
            //如果需要从前端获取一个参数对象，可以使用如下方式
            //POJO类或者VO实体类 info = json.fromJson(read, POJO类或者VO实体类.class);
            //从参数对象中获取对应的参数值
            //String param = info.getParam();

            //根据具体的业务要求，选择对应的服务类
            //如果是查询功能相关，一般选用IMDPersistenceQueryService；
            IMDPersistenceQueryService queryService = ServiceLocator.find(IMDPersistenceQueryService.class);
            //如果是增删改功能相关，一般选用IMDPersistenceService；
            IMDPersistenceService mngService = ServiceLocator.find(IMDPersistenceService.class);

            //TODO: 实现具体的业务逻辑
            
            //返回组装好的数据

            return "返回组装好的数据";

        } catch (RuntimeException e) {
            throw new RuntimeException(e);
        }
    }
}
```

## 2.创建控制器Action配置文件
* 其路径为：`src/client/yyconfig/modules/模块编码/应用分类/应用编码/config/action/应用编码_action.xml`
* 如果有路径一致的xml，可以把action标签的内容插入到路径一致的xml文件的对应位置
### Demo
```xml
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<actions>
  <action>
    <name>模块编码.应用编码.应用+具体功能+Action</name>
    <label>具体功能Action</label>
    <clazz>nccloud.web.模块编码.应用编码.action.应用+具体功能+Action</clazz>
  </action>
</actions>
```

## 3.创建控制器Action的鉴权文件
* 其路径为：`src/client/yyconfig/modules/模块编码/应用分类/应用编码/config/authorize/应用编码_authorize.xml`
* 如果有路径一致的xml，可以把action标签的内容插入到路径一致的xml文件的对应位置
### Demo
```xml
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<authorizes>
  	<authorize>
  		<appcode>*</appcode>
  		<actions>
			<action>模块编码.应用编码.应用+具体功能+Action</action>
        </actions>
    </authorize>
</authorizes>
```
