SiebelAdapter--具体干事的类,

本文介绍了SiebelAdapter在适配器模式中的具体使用,它实现了Adapter接口,并且在AbstractBase类中通过内部获取Adapter并调用相关方法。OrderEntryServiceImpl作为服务层接口的实现,继承了AbstractBase。此外,内容提到了SiebelAdapter.java的详细实现,以及与ExceptionWithCode和JDBFactory的联动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继承关系
OrderEntryServiceImpl extends AbstractBase implements OrderEntryService
AbstractBase implements AdapterConfig :内部获取Aapter,调用各种方法。
interface Adapter
SiebelAdapter implements Adapter
具体请看:
SiebelAdapter.java —适配器实现类
联动 ExceptionWithCode, JDBFactory

public  class SiebelAdapter<Z extends BaseModel> implements Adapter<Z>{
	public static final Logger logger = LoggerFactory.getLogger(SiebelAdapter.class);
	
	protected AdapterConfig<Z> config;
	public AdapterConfig<Z> getConfig(){
		return config;
	}
	public void setConfig( AdapterConfig<Z> config){
		this.config = config;
	}
	//1;获取适配器配置
	public Z getConfigByModel(Z model){
		return fillProperties(getConfig(),model);
	}
	public Z fillProperties(AdapterConfig<Z> adapter, Z model){
		if(StringUtils.isBlank(model.getBusinessComponeseName())){ model.setBusinessComponeseName(adapter.getBCName())}
		//BC,BO,IC,IO,PBC一样,我就不写了.基本就是在各个实现类中 重写AdapterConfig接口的方法.
		return model;
	}

	//2:getMapping
	final private Map<String ,String> getMapping(){
		Map<String ,String>  mapping = new LinkedHashMap<>();
			if(mapping.isEmpty() ){
				Map<String ,String> map =  getConfig().getRawMapping();
					if( map != null ){
						map.put("Id","rowId");
						map.put("Created","createTime");
						map.put("Created By","creatorId");
						mapping.putAll(map);
					}
			}
		return mapping;
	}
	//3,4 getExpress/getOrExpress 条件拼接。
	public final String getExpress (List<String> exprList){
		StringBuffer expr = new String Buffer();
		for(String  e : exprList){
			if( expr.length() > 0 ) expr.append(" and ");
			expr.append(e);
		}
		return  expr.toString();
	}
	public final String getOrExpress (List<String> exprList){
		StringBuffer expr = new String Buffer();
		for(String  e : exprList){
			if( expr.length() > 0 ) expr.append(" or");
			expr.append(e);
		}
		return  expr.toString();
	}
	//5通过查询 取得数据的列表
	public List<Z> getList(Z model) throws Exception{
		return getList(  model, getConfig().getListExpress(model) );
	}
	public List<Z> getListByBs(Z model) throws Exception{
		return getListByBs(  model,getConfig().getListExpress(model) );
	}
	//--通过查询 取得数据的列表
	public List<Z> getList(Z model,String expr) throws Exception{
		Z modelconfig = getConfigByModel(model);//得到具体有Bo,BC,IC,IO配置的模型
		if(StringUtils.isBlank(modelconfig.getBOName())){ throw new ExceptionWithCode("0010");} --BO未指定
		if(StringUtils.isBlank(modelconfig.getBCName())){ throw new ExceptionWithCode("0011");}--BC未指定
		/从这里可以看出来,在具体的实现类中必须  重写BO,BC方法,指明其名字,否则将报错。
	List<Z> retlist = new LinkedList<Z>();
	//获取siebel--数据对象
	SiebelDataBean sdb = JDBFactory.getSiebelDataBean();
try{	getConfigInfo(sdb);
	//获取siebel--BO对象
	SiebelBusObject busObject = sdb.getBusObject(modelconfig.getBusinessObjectNameI());
	//获取siebel--BC对象,及其父BC对象
try{ SiebelBusComp busComp = busObject.getBusComp(modelconfig.getBusinessComponeseName());	
try{ SiebelBusComp pc = busComp.parentBusComp();
	 //激活BC字段
	 activateField( getFieldOpt(busComp),model );
		if(expr != null && expr.length() > 0){//条件表达式,传进来的
			busComp.clearToQuery();
			busComp.setSearchExpr(expr);	
		}
		logger.info(String.format(
		"ViewMode : [%s] ,BO : [%s], BC : [%s], SearchExpr : {%s}",model.getViewType(),modelconfig.getBOName(),modelconfig.getBCName(),expr
		) );
		//BC设置排序配置 
		if(StringUtils.isNotNullOrEmptyStr(getConfig().getSortSpec(model))){ 
		busComp.setSortSpec( getConfig().getSortSpec(model) );
		}
		busComp.setViewModel( model.getViewType);//bc设置视图
		busComp.executeQuery2(false,false);//执行查询?
		//busComp.executeQuery(true);
		int count = 0;
		//啥意思?妈的,查列表 都这么复杂的吗?
		if(  busComp.firstRecord() ){
			Z m = convert(model.getFieldOpt(busComp));
			count++;
			m.setPageRowNo(count);
			retlist.add(m);
			while(busComp.nextRecord()){
				retlist.add(convert(model,getFieldOpt(busComp)));
			}
		}
		return retlist;
	}finally{busComp.release();}//首先释放BC
	}finally{busObject.release();}//再次释放BO
	}finally{JDBFactory.freeSiebelDataBean(sdb);}//最后释放Siebel数据模型
}
//**6**.getListByBS 通过BS 获取列表
public List<Z> getListByBs(Z model ,String expr) throws Exception{
	Z modelconfig = getConfigByModel(model);//得到具体有Bo,BC,IC,IO配置的模型
		if(StringUtils.isBlank(modelconfig.getBOName())){ throw new ExceptionWithCode("0010");}
		if(StringUtils.isBlank(modelconfig.getBCName())){ throw new ExceptionWithCode("0011");}

	//1:获取siebel--数据对象
	SiebelDataBean sdb = JDBFactory.getSiebelDataBean();
	try{
	getConfigInfo(sdb);
	//2:创建输入,出Siebel属性集合
	SiebelPropertySet inpPS = sdb.newPropertySet(); 
	SiebelPropertySet outPS = sdb.newPropertySet(); 
	SiebelService oBS = sdb.getService("SHYY Upload Attachment Service Test");
	//3:给输入Siebel集合设值
	inpPS .setProperty("BusObject",modelconfig.getBOName()); //给集合设值
	inpPS .setProperty("BusComp",modelconfig.getBCName()); 
	inpPS .setProperty("ViewMode",String.format(%d"",model.getViewType())); 
	if(expr != null && expr.legnth() > 0 ){ inpPS.setProperty("SearchExpr",expr);  }
	if(StringUtils.isNotNullOrEmptyStr(getConfig().getSortSpec())){inpPS.setProperty("SortSpec",getConfig().getSortSpec());}	
	//4:创建输入Siebel参数集合
	SiebelPropertySet  inpPS_PARAMS = sdb.newPropertySet();
	//5:得到实现类中的参数映射
	Map<String ,String > map = getMapping();
	for(String key : map){
		inpPS_PARAMS .setProperty(key,key); //把实现类中的key(BC字段),作为参数.
	}
	inpPS.addChild(inpPS_PARAMS ); //子BC?
	//控制台打印日志:
	logger.info(String.format(
		"ViewMode : [%s] ,BO : [%s], BC : [%s], SearchExpr : {%s}",model.getViewType(),modelconfig.getBOName(),modelconfig.getBCName(),expr
		) );
		//调用BS方法
		oBS.invokeMethod("Action",inpPS,outPS);
		List<Z> retlist = new LinkedList<>();
		for( int i = 0; i < outPS.getChildCount(); i++){
			SiebelPropertySet childPS = outPS.getChild(i);//得到每一个子属性集合
			Z m = convert(model,childPS);
			String rowId = m.getRowId();
			boolean found = false;
			for(Z z : retlist){
				if(rowId.equals(z.getRowId())){
				found = true;
				break;
				}
			}	
				if(!fount){
				retlist.add(m);
			}
			return retlist;	
			}finally{JDBFactory.freeSiebelDateBean(sdb);}
		}				
}
//**7**添加数据
public void add(Z model) throws Exception{
	addAndGetRowId(model);
}
public String addAndGetRowId(Z model) throws Exception{
	//1:得到具体有Bo,BC,IC,IO配置的模型
		Z modelconfig = getConfigByModel(model);
		if(StringUtils.isBlank(modelconfig.getBOName())){ throw new ExceptionWithCode("0010");}
		if(StringUtils.isBlank(modelconfig.getBCName())){ throw new ExceptionWithCode("0011");}
	
	//2:获取siebel--数据对象
	SiebelDataBean sdb = JDBFactory.getSiebelDataBean();
	try{	getConfigInfo(sdb);
	//3:获取siebel--BO对象
	SiebelBusObject busObj = sdb.getBusObject(modelconfig.getBusinessObjectName());
	try{
	Map<String, String > map = getConfig().getParentList(model);
		if(map != null ){
			for(String bcName : map.KeySet()){
				String rowId = map.get(bcName);
				if(StringUtils.isNotNullOrEmptyStr(rowId)){
					SiebelBusComp parentbusComp = busObject.getBusComp(bcname);
					parentbusComp.setViewMode(3);
					parentbusComp.setSearchExpr("[Id] = '"+rowId+"'");
					parentbusComp.executeQuery2(true,true);
					if( !parentbusComp.firstRecord()){throw new Exception("父BC中,查不到相关记录")}
				 }
			}
		}
	SiebelBusComp busComp = busObject.getBusComp(modelconfig.getBusinessComponeseName());
	try{
	if(model.isAdminModel()){
		busComp.invokeMethod("SetAdminMode",new String[] {"TRUE"});
		logger.info("SetAdminMode TRUE");
	}
	activateField(getFieldOpt(busComp),model);
	busComp.setViewMode(model.getViewMode());
	busComp.setSearchExpr("1<>1");
	busComp.executeQuery2(true,true);
	busComp.newRecord(true);
	setFieldValue(busComp,getFieldOpt(busComp),model);
	busComp.writeRecord();
	logger.info(String.format(
"ViewMode: [%s], BO :[%s] , BC : [%s] ,[Id] : %s ",model.getViewType(),modelconfig.getBOName(),modelconfig.getBCNaem(),
busComp.getFieldValue("Id")
	));
	String id = busComp.getFieldValue("Id");
	model.setRowId(id);
	return id;
}finally{
	if(model.isAdminMode()){
		busComp.invokeMethod("SetAdminMode",new String[] {"FALSE"});
		logger.info("SetAdminMode false");
	}
	busComp.release();
	}
}finally{
	busObject.release();
}
}finally{
	JDBFactory.freeSiebelDataBean();
}
//还有批量添加.
//**8** 批量添加
public List<String> batAddAndGetRowIds(List<Z>  list) throws Exception{
	if( list == null || list.isEmpty() ) throws new Exception("没有数据需要添加");
	if(StringUtils.isBlank(modelconfig.getBOName())){ throw new ExceptionWithCode("0010");}
	if(StringUtils.isBlank(modelconfig.getBCName())){ throw new ExceptionWithCode("0011");}

	//1:获取siebel--数据对象
	SiebelDataBean sdb = JDBFactory.getSiebelDataBean();
	try{
	       getConfigInfo(sdb);
	       //3:获取siebel--BO对象
			SiebelBusObject busObj = sdb.getBusObject(modelconfig.getBusinessObjectName());
		try{
				Map<String, String > map = getConfig().getParentList( list.get(0) );
					if(map != null ){
						for(String bcName : map.KeySet()){
						String rowId = map.get(bcName);
							if(StringUtils.isNotNullOrEmptyStr(rowId)){
								SiebelBusComp parentbusComp = busObject.getBusComp(bcname);
								parentbusComp.setViewMode(3);
								parentbusComp.setSearchExpr("[Id] = '"+rowId+"'");
								parentbusComp.executeQuery2(true,true);
								if( !parentbusComp.firstRecord()){throw new Exception("父BC中,查不到相关记录")}
				 }
			}
		}
SiebelBusComp busComp = busObject.getBusComp(modelconfig.getBusinessComponeseName());
	activateField(getFieldOpt(busComp),list.get(0));
	busComp.setViewMode(model.getViewMode());
	busComp.setSearchExpr("1<>1");
	busComp.executeQuery2(true,true);
	List<String> retlist = new LinkedList<>();
		for(Z model : retlist){
		busComp.newRecord(true);
		setFieldValue( busComp,getFieldOpt(busComp ),model  );
		busComp.writeRecord();
		String id = busComp.getFieldValue("id");
		model.setRowId(id);
		retlist.add(id);
		}
logger.info(String.format(
"ViewMode: [%s], BO :[%s] , BC : [%s] ,[Id] : %s ",model.getViewType(),modelconfig.getBOName(),modelconfig.getBCNaem(),
busComp.getFieldValue("Id")
	));
return retlist;
}finally{busComp.release();}
}finally{busObject.release();}
}finally{JDBFactory.freeSiebelDataBean(sdb);}
}
//**9** 更新数据
public void update(Z  model) throws Exception{
	if( StringUtils.isBlank( model.getRowId()) ){throw new Exception("未指定对应的RowId ,操作无法继续");}
		//1:得到具体有Bo,BC,IC,IO配置的模型
	Z modelconfig = getConfigByModel(model);
	if(StringUtils.isBlank(modelconfig.getBOName())){ throw new ExceptionWithCode("0010");}
	if(StringUtils.isBlank(modelconfig.getBCName())){ throw new ExceptionWithCode("0011");}
		//2:获取siebel--数据对象
	SiebelDataBean sdb = JDBFactory.getSiebelDataBean();
	try{	getConfigInfo(sdb);
		//3:获取siebel--BO对象
	SiebelBusObject busObj = sdb.getBusObject(modelconfig.getBusinessObjectName());
	try{
	Map<String, String > map = getConfig().getParentList(model);
		if(map != null ){
			for(String bcName : map.KeySet()){
				String rowId = map.get(bcName);
				if(StringUtils.isNotNullOrEmptyStr(rowId)){
					SiebelBusComp parentbusComp = busObject.getBusComp(bcname);
					parentbusComp.setViewMode(3);
					parentbusComp.setSearchExpr("[Id] = '"+rowId+"'");
					parentbusComp.executeQuery2(true,true);
					if( !parentbusComp.firstRecord()){throw new Exception("父BC中,查不到相关记录")}
				 }
			}
		}
	SiebelBusComp busComp = busObject.getBusComp(modelconfig.getBusinessComponeseName());
	try{
	if(model.isAdminModel()){
		busComp.invokeMethod("SetAdminMode",new String[] {"TRUE"});
		logger.info("SetAdminMode TRUE");
	}
	activateField(getFieldOpt(busComp),model);
	busComp.setViewMode(model.getViewMode());
	busComp.cleatToQuery();
	logger.info(String.format(
"ViewMode: [%s], BO :[%s] , BC : [%s] ,[Id] : %s ",model.getViewType(),modelconfig.getBOName(),modelconfig.getBCNaem(),
busComp.getFieldValue("Id")
	));
	busComp.setSearchSpec( "Id",model.getRowId() );
	busComp.executeQuery2(true,true);
	if( busComp.firstRecord() ){
		setFieldValue(busComp,getFiledOpt(busComp), model);
		busComp.writeRecord();
		return;
		}
		throw new Exception("记录没有找到");
		}finally{
				if(model.isAdminModel()){
				busComp.invokeMethod("SetAdminMode",new String[] {"TRUE"});
				logger.info("SetAdminMode TRUE");
				}
				busComp.release();
		}finally{busObject.release();}
		}finally{JDBFactory.freeSiebelDataBean(sdb);}
	}
//增删改查基本都是这样,批量的情况下把model 换成list.get(0)
}

//转换参数 String[] ------ String :{"a","b","c"}---a,b,c
private  static final String convert(String[] param ){
if(param ==null){ return  "";}
StringBuffer sb = new StringBuffer();
	for(String  p : param){
			if( sb.length()>0 ) sb.append(',');
			sb.append(p);
	}
return sb.toString();
}
//还有好多,太他妈多了,日乐购了。
final private void activateField(SiebelBusComp pickBusComp,MVGBaseModel model ) throws Exception{
	Map<String ,String > map = model.getMapping();
	for(String key : map.keySet()){
		if(StringUtils.isBlank(key)) continue;
		pickBusComp.activateField(key);

	}
}
//设置全局变量:就是新建一个map 放一个自定义变量进去,在放入参数
public Map<String,String> profileAttrs(List<String> attrList)  throws Exception{
	SiebelDataBean sdb = JDBFactory.getSiebelDataBean();//这里有日志打印,校验siebel连接的
	try{
		getConfigInfo(sdb);//这里有日志打印,---设置用户信息到CurrentConfigModel的。
		Map<String,String> retmap = new LinkedHashMap<String,String>();
			for(String  key  : attrList){
				retMap.put(key,sdb.getProfileAttr(key));//Siebel那边的方法
			}
			logger.info(String.format("profileAttrs:[%s]",retmap.toString()));
			return retmap;	
		 }finally{
			JDBFactory.freeSiebelDataBean();
		}
}
public  void profileSetAttrs( Map<String,String> attrList )throws Exception{
	SiebelDataBean sdb = JDBFactory.getSiebelDataBean();//这里有日志打印,校验siebel连接的
	try{
		getConfigInfo(sdb);//这里有日志打印,---设置用户信息到CurrentConfigModel的。
		Map<String,String> retmap = new LinkedHashMap<String,String>();
			for(String  key  : attrList){
				sdb.setProfileAttr(key,attrList.get(key));
				logger.info(String.format("profileAttrs:[%s = %s]",key,attrList.get(key)));
			}
		 }finally{
			JDBFactory.freeSiebelDataBean();
		}




}
//忘记了一个很重要的方法,这个可以解释为什么CurrentConfigModel 有值。就是登录接口中的。
private static final void getConfigInfo(SiebelDataBean sdb){
	CurrentConfigModel  = null ;
	try{
			config = SystemUtils.getCurrentConfigModel(); //这一步不要忘记了,同步副本信息。这样可以拿到同一个。不然
			//副本中的还是空的。下面就可以 设值了。
			}catch(Exception e){
			e.printStackTrace();
			}

			if( config == null ) return ; //其实第一次登录这个绝对是空的。
			if( sdb.positionId().equals(config.getPositionId()) ) return;
			//把siebel数据模型的数据 设置到CurrentConfigModel中。但是我不明白,为什么sdb中有值?、
			config.setPositionId(sdb.positionId());
			config.setPositinName(sdb.positionName());
			config.setLoginId(sdb.loginId());
			config.setLoginName(sdb.loginName()); 
			try{
					config.setOrganizationLoc(sdb.getProfileAttr("Organization Loc"));  
					}catch(SiebelException e){
					e.printStackTrace();
					}
			logger.info(String.format("用户配置信息被设置!"));
}

}//类尾
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值