AgilePLM列表值操作

概要

虽然Agile的官方文档中已经关于列表值的使用描述。但写的不是特别详细,而且有部分内容缺失。特此将自己的实践经验总结了一下分享出来,欢迎大家一起交流,讨论,学习。

环境说明

Agile版本:9.3.6

JDK版本:1.8

开发工具:Eclipse4.8

构建工具:Maven3.5.2

层叠列表创建

相当于在控制台中创建一个新的列表。简单列表的操作在官方文档中也有提到。大家可以参考。本文不在赘述。

本文给出案例代码,创建的是层叠列表:省市区。列表项有:江苏省,湖南省。。。

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);
			}
		}
	}

父节点是否有更好的方法搜索出来?如果有知道的小伙伴欢迎留言。感觉每次要递归查询挺烦的。

修改后效果截图:

公共代码

本文中的代码都是以单元测试用例方式执行的。里面有个ISessionUtils公共类

/**
 * 封装会话相关方法<br>
 * @author namelessmyth
 * @version 1.0
 * @date 2021/12/6/0006
 */
public class ISessionUtils {
	/**
	 * 缓存admin的session,仅供查询使用,增删改操作请单独获取session.
	 */
	private static IAgileSession adminSession;
	/**
	 * 管理员用户ID,取自配置文件中配置的管理员账号ID
	 */
	private static String adminId;
	
	/**
	 * 用户session缓存.在session过期之前可直接使用,不用每次都创建.
	 */
	private static ConcurrentHashMap<String, IAgileSession> sessionMap = new ConcurrentHashMap<String, IAgileSession>();

	public static IAgileSession createSession() throws APIException {
		return createSession(null, null, null);
	}

	public static IAgileSession createSession(String userName, String passWord) throws APIException {
		return createSession(userName, passWord, null);
	}

	private static IAgileSession createSession(String userName, String passWord, String url) throws APIException {
		IAgileSession session = null;
		if (StringUtils.isBlank(userName) || StringUtils.isBlank(passWord)) {
			userName = PropertyUtils.getString("agile.admin.username");
			passWord = PropertyUtils.getString("agile.admin.password");
			adminId = userName;
		}
		if (StringUtils.isBlank(url)) {
			url = PropertyUtils.getString("agile.url");
		}
		Map<Integer, String> params = new HashMap<Integer, String>();
		params.put(AgileSessionFactory.USERNAME, userName);
		params.put(AgileSessionFactory.PASSWORD, passWord);
		params.put(AgileSessionFactory.URL, url);
		session = AgileSessionFactory.createSessionEx(params);
		return session;
	}

	/**
	 * 管理员Session <br/>
	 * 注意:此Session只能用来查询,千万不要用来做增删改操作.增删改请调用createSession()方法
	 * 
	 * @return
	 * @throws Exception
	 */
	public static IAgileSession getAdminSession() throws APIException {
		if (adminSession == null || !adminSession.isOpen()) {
			initAdminSession();
		}
		return adminSession;
	}
	
	/**
	 * 获取Session方法,如果之前的session还未失效直接使用 <br/>
	 * 
	 * @return
	 * @throws Exception
	 */
	public static IAgileSession getSession(String userId, String password) throws APIException {
		IAgileSession session = null;
		synchronized (sessionMap) {
			session = sessionMap.get(userId);
			if (session == null || !session.isOpen()) {
				session = createSession(userId, password);
				sessionMap.put(userId, session);
			}
		}
		return session;
	}

	/**
	 * 判断当前用户是否有管理员权限(在某个对象上)
	 * 
	 * @param session
	 * @return
	 * @throws APIException
	 */
	public static boolean isAdmin(IAgileSession session, IDataObject obj) throws APIException {
		if (session != null && session.isOpen()) {
			return session.getCurrentUser().hasPrivilege(UserConstants.PRIV_ADMINISTRATOR, obj);
		}
		return false;
	}

	private static void initAdminSession() throws APIException {
		synchronized (ISessionUtils.class) {
			if (adminSession == null || !adminSession.isOpen()) {
				adminSession = createSession(null, null, null);
			}
		}
	}
	
	public static String getAdminId() {
		return adminId;
	}
}

还有配置文件config.properties

agile.url=http://puvagile:7001/Agile
agile.admin.username=admin
agile.admin.password=tartan

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值