概要
Agile提供的官方文档中对于列表值的操作不是特别详细。对于列表项的修改也是缺失。特此将列表的操作心得分享出来,一起交流和学习。
层叠列表创建
相当于在控制台中创建一个新的列表。简单列表的操作在官方文档中也有提到。大家可以参考。
本文给出案例代码创建的是层叠列表:省市区。列表项有:江苏省,湖南省。。。
API文档中给出的方法在Agile9.3.6版本中已经deprecated了,但文档并没有更新。推荐大家使用本文的方法。
/**
* 列表创建
* 单元测试类
*/
@Test
public void createAdminList() throws APIException {
IAgileSession session = ISessionUtils.getAdminSession();
//使用管理员session获取列表库
IListLibrary listLib = session.getAdminInstance().getListLibrary();
HashMap<Integer,Object> map = new HashMap<Integer,Object>();
map.put(IAdminList.ATT_NAME, "省市区");
map.put(IAdminList.ATT_APINAME, "list_ssq");
map.put(IAdminList.ATT_DESCRIPTION, "省市区(api测试)");
map.put(IAdminList.ATT_ENABLED, new Boolean(true));
map.put(IAdminList.ATT_CASCADED, new Boolean(true));
//创建列表
IAdminList adminList = listLib.createAdminList(map);
//得到顶层列表项(国家)
IAgileList countrylist = adminList.getValues();
//推荐大家使用2个参数的方法的.单参数的方法已经deprecated
countrylist.addChild("湖南省", "hunan");
IAgileList jiangsu = (IAgileList)countrylist.addChild("江苏省", "jiangsu");
//继续给江苏追加城市
jiangsu.addChild("南京","nanjing");
jiangsu.addChild("无锡","wuxi");
jiangsu.addChild("常州","changzhou");
IAgileList suzhou = (IAgileList)jiangsu.addChild("苏州","suzhou");
//继续给苏州追加区域
suzhou.addChild("姑苏区","gusuqu");
suzhou.addChild("工业园区","gongyeyuanqu");
//保存列表值
adminList.setValues(countrylist);
System.out.println("执行成功!");
}
执行结果-列表-省市区:
列表项
层叠列表修改
这部分内容,api文档也有提及,比较简单。直接分享参考代码:
/**
* 列表修改
* 单元测试类
*/
@Test
public void updateAdminList() throws APIException {
//获取管理员session
IAgileSession session = ISessionUtils.getAdminSession();
//根据API名称获取列表
IAdminList adminList = session.getAdminInstance().getListLibrary().getAdminList("list_ssq");
if(adminList != null) {
//修改描述
adminList.setDescription("省市区2(api测试)");
//修改名称
adminList.setName("省市区2");
//禁用启用
adminList.enable(true);
//列表删除
adminList.delete();
//列表项是否可编辑
adminList.isListItemsEditable();
//列表项是否只读
adminList.isReadOnly();
}
}
层叠列表项修改
这部分内容目前在官方文档中没有找到。下面是我的实践,分享参考代码给大家。
@Test
public void testUpdateAgileListEntry() throws APIException {
IAgileSession session = ISessionUtils.getAdminSession();
// 根据API名称获取列表
IAdminList adminList = session.getAdminInstance().getListLibrary().getAdminList("list_ssq");
if (adminList != null) {
// 获取列表下的所有项
IAgileList list = adminList.getValues();
if (list != null) {
// 通过api名称获取列表项,必须是叶子节点才能查询到
Object childNode = list.getChildNode("湖南");
if (childNode instanceof IAgileList) {
IAgileList child = (IAgileList) childNode;
// 修改列表项描述
child.setDescription("湖南省描述2");
// 修改列表项名称
// child.setValue("湖南省2");
System.out.println("湖南修改成功");
}
// 如果想获取层叠列表中的父节点,目前发现只能通过这个方法,递归往下找
List<IAgileList> childNodes = (List<IAgileList>) list.getChildNodes();
if (childNodes != null && childNodes.size() > 0) {
for (IAgileList child : childNodes) {
if (child.getAPIName().equals("jiangsu")) {
child.setDescription("jiangsu描述");
System.out.println("jiangsu修改成功");
}
}
}
adminList.setValues(list);
}
}
}
父节点是否有更好的方法搜索出来?如果有知道的小伙伴欢迎留言。感觉每次要递归查询挺烦的。
修改后效果截图: